<?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>148960</bug_id>
          
          <creation_ts>2015-09-08 09:09:38 -0700</creation_ts>
          <short_desc>Web Inspector: update Esprima to latest version</short_desc>
          <delta_ts>2015-09-22 01:27:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>ariya.hidayat</cc>
    
    <cc>bburg</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1124249</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 09:09:38 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124251</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-09-08 09:15:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/22611037&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124378</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 13:43:11 -0700</bug_when>
    <thetext>*** Bug 148972 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127803</commentid>
    <comment_count>3</comment_count>
      <attachid>261698</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-21 16:04:22 -0700</bug_when>
    <thetext>Created attachment 261698
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127822</commentid>
    <comment_count>4</comment_count>
      <attachid>261698</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-09-21 16:31:08 -0700</bug_when>
    <thetext>Comment on attachment 261698
patch

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

r=me, but there are some changes that I think deserve to be made to ScriptSyntaxTree at the same time.

&gt; Source/WebInspectorUI/ChangeLog:17
&gt; +        * UserInterface/External/Esprima/esprima.js:
&gt; +        (assert):
&gt; +        (isDecimalDigit):
&gt; +        (isOctalDigit):
&gt; +        (octalToDecimal):

You can drop everything past esprima.js in the ChangeLog, it is not particularly useful.

&gt; Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js:108
&gt; +        AssignmentPattern: &apos;AssignmentPattern&apos;,

Of the new Nodes, there are three that WebInspector.ScriptSyntaxTree does not support but probably should:

    AssignmentPattern (destructuring)
    MetaProperty (new.target?)
    Super (super?)

The rest are things we know about and haven&apos;t yet supported:

    ArrowFunctionExpression
    ExportAllDeclaration
    ExportDefaultDeclaration
    ExportNamedDeclaration
    ExportSpecifier
    ImportDeclaration
    ImportDefaultSpecifier
    ImportNamespaceSpecifier
    ImportSpecifier
    RestElement
    YieldStatement

----

It seems that, at least for this patch ScriptSyntaxTree should:

  1. add support for AssignmentPattern to prevent breaking type profiling with destructuring assignments.
  2. Cover MetaProperty and Super, which should be rather basic, to avoid potential issues parsing classes

Do you agree, or were things working in these cases?

&gt; Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js:2137
&gt; +        finishProgram: function (body, sourceType) {
&gt; +            this.type = Syntax.Program;
&gt; +            this.body = body;
&gt; +            this.sourceType = sourceType;

The &quot;sourceType&quot; property of Program is new. Maybe we should reflect that in ScriptSyntaxTree. It seems sourceType can be the string &apos;script&apos; or &apos;module&apos;.

&gt; Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js:2246
&gt; +        finishTryStatement: function (block, handler, finalizer) {
&gt; +            this.type = Syntax.TryStatement;
&gt; +            this.block = block;
&gt; +            this.guardedHandlers = [];
&gt; +            this.handlers = handler ? [handler] : [];
&gt; +            this.handler = handler;

This is a particularly interesting change. There appears to be a single &apos;handler&apos; property alongside &apos;handlers&apos; which is either a single element array or empty array. Perhaps we should also move to a single handler as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127824</commentid>
    <comment_count>5</comment_count>
      <attachid>261698</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-09-21 16:33:13 -0700</bug_when>
    <thetext>Comment on attachment 261698
patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js:2246
&gt;&gt; +            this.handler = handler;
&gt; 
&gt; This is a particularly interesting change. There appears to be a single &apos;handler&apos; property alongside &apos;handlers&apos; which is either a single element array or empty array. Perhaps we should also move to a single handler as well.

Yes, further discussion on ESTree. Funny, this was the first ESTree issue!
&lt;https://github.com/estree/estree/issues/1&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127842</commentid>
    <comment_count>6</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2015-09-21 17:03:02 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 261698 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261698&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js:2246
&gt; &gt;&gt; +            this.handler = handler;
&gt; &gt; 
&gt; &gt; This is a particularly interesting change. There appears to be a single &apos;handler&apos; property alongside &apos;handlers&apos; which is either a single element array or empty array. Perhaps we should also move to a single handler as well.
&gt; 
&gt; Yes, further discussion on ESTree. Funny, this was the first ESTree issue!
&gt; &lt;https://github.com/estree/estree/issues/1&gt;

And we will drop that in Esprima 3.0 (major version bump, breaking change):
https://github.com/jquery/esprima/issues/1030</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127902</commentid>
    <comment_count>7</comment_count>
      <attachid>261717</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-21 19:40:25 -0700</bug_when>
    <thetext>Created attachment 261717
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127904</commentid>
    <comment_count>8</comment_count>
      <attachid>261717</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-09-21 19:49:33 -0700</bug_when>
    <thetext>Comment on attachment 261717
patch

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

r=me, nice!

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:449
&gt; +        case WebInspector.ScriptSyntaxTree.NodeType.Super:

You could share the implementation of Meta/Super/This, since they are so super similar. Or we could try to keep this mostly alphabetical. Either way works!

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:556
&gt; +

Style: Unnecessary newline.

&gt; LayoutTests/inspector/model/parse-script-syntax-tree.html:449
&gt; +    node = makeNode(&quot;class C { constructor() { super(); new.target; } }&quot;, false);

Oh snap, I forgot about this test. It would also be awesome to have some tests for template strings / default arguments (which I recently added but did not test). But that is totally up to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127955</commentid>
    <comment_count>9</comment_count>
      <attachid>261717</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-22 00:47:14 -0700</bug_when>
    <thetext>Comment on attachment 261717
patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:449
&gt;&gt; +        case WebInspector.ScriptSyntaxTree.NodeType.Super:
&gt; 
&gt; You could share the implementation of Meta/Super/This, since they are so super similar. Or we could try to keep this mostly alphabetical. Either way works!

I&apos;ll collect all leaf nodes into one section.

&gt;&gt; LayoutTests/inspector/model/parse-script-syntax-tree.html:449
&gt;&gt; +    node = makeNode(&quot;class C { constructor() { super(); new.target; } }&quot;, false);
&gt; 
&gt; Oh snap, I forgot about this test. It would also be awesome to have some tests for template strings / default arguments (which I recently added but did not test). But that is totally up to you.

Lets do this in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127960</commentid>
    <comment_count>10</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-22 01:27:35 -0700</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/190110</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261698</attachid>
            <date>2015-09-21 16:04:22 -0700</date>
            <delta_ts>2015-09-21 19:40:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>309059</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMDg3KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyNCBA
QAorMjAxNS0wOS0yMSAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBXZWIgSW5zcGVjdG9yOiB1cGRhdGUgRXNwcmltYSB0byBsYXRlc3QgdmVyc2lvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4OTYwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXNwcmltYSB2ZXJzaW9u
IDIuNiBmdXJ0aGVyIHN1cHBvcnRzIEVTNi4gV2UncmUKKyAgICAgICAgdXBkYXRpbmcgdG8gaXQg
c28gd2UgY2FuIHN1cHBvcnQgbW9yZSBFUzYgZmVhdHVyZXMKKyAgICAgICAgaW4gb3VyIHNjcmlw
dCBzeW50YXggdHJlZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmlt
YS9MSUNFTlNFOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9lc3By
aW1hLmpzOgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGlzRGVjaW1hbERpZ2l0KToKKyAg
ICAgICAgKGlzT2N0YWxEaWdpdCk6CisgICAgICAgIChvY3RhbFRvRGVjaW1hbCk6CisgICAgICAg
IChpc1doaXRlU3BhY2UpOgorICAgICAgICAoaXNJZGVudGlmaWVyU3RhcnQpOgorICAgICAgICAo
aXNSZXN0cmljdGVkV29yZCk6CisgICAgICAgIChpc0tleXdvcmQpOgorICAgICAgICAoYWRkQ29t
bWVudCk6CisgICAgICAgIChza2lwU2luZ2xlTGluZUNvbW1lbnQpOgorICAgICAgICAoc2tpcE11
bHRpTGluZUNvbW1lbnQpOgorICAgICAgICAoc2tpcENvbW1lbnQpOgorICAgICAgICAoc2Nhbkhl
eEVzY2FwZSk6CisgICAgICAgIChzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSk6CisgICAgICAg
IChjb2RlUG9pbnRBdCk6CisgICAgICAgIChnZXRDb21wbGV4SWRlbnRpZmllcik6CisgICAgICAg
IChnZXRJZGVudGlmaWVyKToKKyAgICAgICAgKHNjYW5JZGVudGlmaWVyKToKKyAgICAgICAgKHNj
YW5QdW5jdHVhdG9yKToKKyAgICAgICAgKHNjYW5IZXhMaXRlcmFsKToKKyAgICAgICAgKHNjYW5C
aW5hcnlMaXRlcmFsKToKKyAgICAgICAgKHNjYW5PY3RhbExpdGVyYWwpOgorICAgICAgICAoaXNJ
bXBsaWNpdE9jdGFsTGl0ZXJhbCk6CisgICAgICAgIChzY2FuTnVtZXJpY0xpdGVyYWwpOgorICAg
ICAgICAoc2NhblN0cmluZ0xpdGVyYWwpOgorICAgICAgICAoc2NhblRlbXBsYXRlKToKKyAgICAg
ICAgKHRlc3RSZWdFeHApOgorICAgICAgICAoc2NhblJlZ0V4cEJvZHkpOgorICAgICAgICAoc2Nh
blJlZ0V4cEZsYWdzKToKKyAgICAgICAgKHNjYW5SZWdFeHApOgorICAgICAgICAoY29sbGVjdFJl
Z2V4KToKKyAgICAgICAgKGlzSWRlbnRpZmllck5hbWUpOgorICAgICAgICAoYWR2YW5jZVNsYXNo
KToKKyAgICAgICAgKGFkdmFuY2UpOgorICAgICAgICAoY29sbGVjdFRva2VuKToKKyAgICAgICAg
KGxleCk6CisgICAgICAgIChwZWVrKToKKyAgICAgICAgKFBvc2l0aW9uKToKKyAgICAgICAgKFNv
dXJjZUxvY2F0aW9uKToKKyAgICAgICAgKFdyYXBwaW5nU291cmNlTG9jYXRpb24pOgorICAgICAg
ICAoTm9kZSk6CisgICAgICAgIChXcmFwcGluZ05vZGUpOgorICAgICAgICAoV3JhcHBpbmdOb2Rl
LnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5wcm9jZXNzQ29tbWVudCk6CisgICAgICAgIChXcmFw
cGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaCk6CisgICAgICAgIChXcmFw
cGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaEFycmF5RXhwcmVzc2lvbik6
CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaEFy
cmF5UGF0dGVybik6CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90
eXBlLmZpbmlzaEFycm93RnVuY3Rpb25FeHByZXNzaW9uKToKKyAgICAgICAgKFdyYXBwaW5nTm9k
ZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmluaXNoQXNzaWdubWVudEV4cHJlc3Npb24pOgor
ICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hBc3Np
Z25tZW50UGF0dGVybik6CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJv
dG90eXBlLmZpbmlzaEJpbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnBy
b3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hCbG9ja1N0YXRlbWVudCk6CisgICAgICAgIChX
cmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaEJyZWFrU3RhdGVtZW50
KToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmluaXNo
Q2FsbEV4cHJlc3Npb24pOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnBy
b3RvdHlwZS5maW5pc2hDYXRjaENsYXVzZSk6CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90
eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaENsYXNzQm9keSk6CisgICAgICAgIChXcmFwcGluZ05v
ZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaENsYXNzRGVjbGFyYXRpb24pOgorICAg
ICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hDbGFzc0V4
cHJlc3Npb24pOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlw
ZS5maW5pc2hDb25kaXRpb25hbEV4cHJlc3Npb24pOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnBy
b3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAg
IChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaERlYnVnZ2VyU3Rh
dGVtZW50KToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUu
ZmluaXNoRG9XaGlsZVN0YXRlbWVudCk6CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBl
Lk5vZGUucHJvdG90eXBlLmZpbmlzaEVtcHR5U3RhdGVtZW50KToKKyAgICAgICAgKFdyYXBwaW5n
Tm9kZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmluaXNoRXhwcmVzc2lvblN0YXRlbWVudCk6
CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaEZv
clN0YXRlbWVudCk6CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90
eXBlLmZpbmlzaEZvck9mU3RhdGVtZW50KToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5
cGUuTm9kZS5wcm90b3R5cGUuZmluaXNoRm9ySW5TdGF0ZW1lbnQpOgorICAgICAgICAoV3JhcHBp
bmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hGdW5jdGlvbkRlY2xhcmF0aW9u
KToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmluaXNo
RnVuY3Rpb25FeHByZXNzaW9uKToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUuTm9k
ZS5wcm90b3R5cGUuZmluaXNoSWRlbnRpZmllcik6CisgICAgICAgIChXcmFwcGluZ05vZGUucHJv
dG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaElmU3RhdGVtZW50KToKKyAgICAgICAgKFdyYXBw
aW5nTm9kZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmluaXNoTGFiZWxlZFN0YXRlbWVudCk6
CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaExp
dGVyYWwpOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5m
aW5pc2hNZW1iZXJFeHByZXNzaW9uKToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUu
Tm9kZS5wcm90b3R5cGUuZmluaXNoTWV0YVByb3BlcnR5KToKKyAgICAgICAgKFdyYXBwaW5nTm9k
ZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmluaXNoTmV3RXhwcmVzc2lvbik6CisgICAgICAg
IChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaE9iamVjdEV4cHJl
c3Npb24pOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5m
aW5pc2hPYmplY3RQYXR0ZXJuKToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUuTm9k
ZS5wcm90b3R5cGUuZmluaXNoUG9zdGZpeEV4cHJlc3Npb24pOgorICAgICAgICAoV3JhcHBpbmdO
b2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hQcm9ncmFtKToKKyAgICAgICAgKFdy
YXBwaW5nTm9kZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmluaXNoUHJvcGVydHkpOgorICAg
ICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hSZXN0RWxl
bWVudCk6CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZp
bmlzaFJldHVyblN0YXRlbWVudCk6CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5v
ZGUucHJvdG90eXBlLmZpbmlzaFNlcXVlbmNlRXhwcmVzc2lvbik6CisgICAgICAgIChXcmFwcGlu
Z05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaFNwcmVhZEVsZW1lbnQpOgorICAg
ICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hTd2l0Y2hD
YXNlKToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmlu
aXNoU3VwZXIpOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlw
ZS5maW5pc2hTd2l0Y2hTdGF0ZW1lbnQpOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlw
ZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24pOgorICAgICAg
ICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hUZW1wbGF0ZUVs
ZW1lbnQpOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5m
aW5pc2hUZW1wbGF0ZUxpdGVyYWwpOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5O
b2RlLnByb3RvdHlwZS5maW5pc2hUaGlzRXhwcmVzc2lvbik6CisgICAgICAgIChXcmFwcGluZ05v
ZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaFRocm93U3RhdGVtZW50KToKKyAgICAg
ICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmluaXNoVHJ5U3RhdGVt
ZW50KToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmlu
aXNoVW5hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUuTm9k
ZS5wcm90b3R5cGUuZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbik6CisgICAgICAgIChXcmFwcGlu
Z05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaExleGljYWxEZWNsYXJhdGlvbik6
CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaFZh
cmlhYmxlRGVjbGFyYXRvcik6CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUu
cHJvdG90eXBlLmZpbmlzaFdoaWxlU3RhdGVtZW50KToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5w
cm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmluaXNoV2l0aFN0YXRlbWVudCk6CisgICAgICAgIChX
cmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaEV4cG9ydFNwZWNpZmll
cik6CisgICAgICAgIChXcmFwcGluZ05vZGUucHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlz
aEltcG9ydERlZmF1bHRTcGVjaWZpZXIpOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlw
ZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIpOgorICAgICAg
ICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hFeHBvcnROYW1l
ZERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdyYXBwaW5nTm9kZS5wcm90b3R5cGUuTm9kZS5wcm90
b3R5cGUuZmluaXNoRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdyYXBwaW5n
Tm9kZS5wcm90b3R5cGUuTm9kZS5wcm90b3R5cGUuZmluaXNoRXhwb3J0QWxsRGVjbGFyYXRpb24p
OgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnByb3RvdHlwZS5maW5pc2hJ
bXBvcnRTcGVjaWZpZXIpOgorICAgICAgICAoV3JhcHBpbmdOb2RlLnByb3RvdHlwZS5Ob2RlLnBy
b3RvdHlwZS5maW5pc2hJbXBvcnREZWNsYXJhdGlvbik6CisgICAgICAgIChXcmFwcGluZ05vZGUu
cHJvdG90eXBlLk5vZGUucHJvdG90eXBlLmZpbmlzaFlpZWxkRXhwcmVzc2lvbik6CisgICAgICAg
IChyZWNvcmRFcnJvcik6CisgICAgICAgIChjb25zdHJ1Y3RFcnJvcik6CisgICAgICAgIChjcmVh
dGVFcnJvcik6CisgICAgICAgICh0aHJvd0Vycm9yKToKKyAgICAgICAgKHRvbGVyYXRlRXJyb3Ip
OgorICAgICAgICAodW5leHBlY3RlZFRva2VuRXJyb3IpOgorICAgICAgICAodG9sZXJhdGVVbmV4
cGVjdGVkVG9rZW4pOgorICAgICAgICAoZXhwZWN0KToKKyAgICAgICAgKGV4cGVjdENvbW1hU2Vw
YXJhdG9yKToKKyAgICAgICAgKGV4cGVjdEtleXdvcmQpOgorICAgICAgICAobWF0Y2hLZXl3b3Jk
KToKKyAgICAgICAgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQpOgorICAgICAgICAobWF0Y2hBc3Np
Z24pOgorICAgICAgICAoY29uc3VtZVNlbWljb2xvbik6CisgICAgICAgIChpc29sYXRlQ292ZXJH
cmFtbWFyKToKKyAgICAgICAgKGluaGVyaXRDb3ZlckdyYW1tYXIpOgorICAgICAgICAocGFyc2VB
cnJheVBhdHRlcm4pOgorICAgICAgICAocGFyc2VQcm9wZXJ0eVBhdHRlcm4pOgorICAgICAgICAo
cGFyc2VPYmplY3RQYXR0ZXJuKToKKyAgICAgICAgKHBhcnNlUGF0dGVybik6CisgICAgICAgIChw
YXJzZVBhdHRlcm5XaXRoRGVmYXVsdCk6CisgICAgICAgIChwYXJzZUFycmF5SW5pdGlhbGl6ZXIp
OgorICAgICAgICAocGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKToKKyAgICAgICAgKHBhcnNlUHJvcGVy
dHlNZXRob2RGdW5jdGlvbik6CisgICAgICAgIChwYXJzZU9iamVjdFByb3BlcnR5S2V5KToKKyAg
ICAgICAgKGxvb2thaGVhZFByb3BlcnR5TmFtZSk6CisgICAgICAgICh0cnlQYXJzZU1ldGhvZERl
ZmluaXRpb24pOgorICAgICAgICAocGFyc2VPYmplY3RQcm9wZXJ0eSk6CisgICAgICAgIChwYXJz
ZU9iamVjdEluaXRpYWxpemVyKToKKyAgICAgICAgKHJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0
dGVybik6CisgICAgICAgIChwYXJzZVRlbXBsYXRlRWxlbWVudCk6CisgICAgICAgIChwYXJzZUdy
b3VwRXhwcmVzc2lvbik6CisgICAgICAgIChwYXJzZVByaW1hcnlFeHByZXNzaW9uKToKKyAgICAg
ICAgKHBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSk6
CisgICAgICAgIChwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKToKKyAgICAgICAgKHBhcnNlQ29tcHV0
ZWRNZW1iZXIpOgorICAgICAgICAocGFyc2VOZXdFeHByZXNzaW9uKToKKyAgICAgICAgKHBhcnNl
TGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk6CisgICAgICAgIChwYXJzZUxlZnRIYW5k
U2lkZUV4cHJlc3Npb24pOgorICAgICAgICAocGFyc2VQb3N0Zml4RXhwcmVzc2lvbik6CisgICAg
ICAgIChwYXJzZVVuYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChiaW5hcnlQcmVjZWRlbmNlKToK
KyAgICAgICAgKHBhcnNlQmluYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChwYXJzZUNvbmRpdGlv
bmFsRXhwcmVzc2lvbik6CisgICAgICAgIChwYXJzZUNvbmNpc2VCb2R5KToKKyAgICAgICAgKGNo
ZWNrUGF0dGVyblBhcmFtKToKKyAgICAgICAgKHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0
KToKKyAgICAgICAgKHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24pOgorICAgICAgICAocGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbik6CisgICAgICAgIChwYXJzZUV4cHJlc3Npb24pOgorICAg
ICAgICAocGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSk6CisgICAgICAgIChwYXJzZVN0YXRlbWVudExp
c3QpOgorICAgICAgICAocGFyc2VCbG9jayk6CisgICAgICAgIChwYXJzZVZhcmlhYmxlSWRlbnRp
Zmllcik6CisgICAgICAgIChwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24pOgorICAgICAgICAocGFy
c2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCk6CisgICAgICAgIChwYXJzZVZhcmlhYmxlU3RhdGVt
ZW50KToKKyAgICAgICAgKHBhcnNlTGV4aWNhbEJpbmRpbmcpOgorICAgICAgICAocGFyc2VCaW5k
aW5nTGlzdCk6CisgICAgICAgIChwYXJzZUxleGljYWxEZWNsYXJhdGlvbik6CisgICAgICAgIChw
YXJzZVJlc3RFbGVtZW50KToKKyAgICAgICAgKHBhcnNlRW1wdHlTdGF0ZW1lbnQpOgorICAgICAg
ICAocGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KToKKyAgICAgICAgKHBhcnNlSWZTdGF0ZW1lbnQp
OgorICAgICAgICAocGFyc2VEb1doaWxlU3RhdGVtZW50KToKKyAgICAgICAgKHBhcnNlV2hpbGVT
dGF0ZW1lbnQpOgorICAgICAgICAocGFyc2VGb3JTdGF0ZW1lbnQpOgorICAgICAgICAocGFyc2VD
b250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChwYXJzZUJyZWFrU3RhdGVtZW50KToKKyAgICAg
ICAgKHBhcnNlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKHBhcnNlV2l0aFN0YXRlbWVudCk6
CisgICAgICAgIChwYXJzZVN3aXRjaENhc2UpOgorICAgICAgICAocGFyc2VTd2l0Y2hTdGF0ZW1l
bnQpOgorICAgICAgICAocGFyc2VUaHJvd1N0YXRlbWVudCk6CisgICAgICAgIChwYXJzZUNhdGNo
Q2xhdXNlKToKKyAgICAgICAgKHBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAgKHBhcnNlRGVi
dWdnZXJTdGF0ZW1lbnQpOgorICAgICAgICAocGFyc2VTdGF0ZW1lbnQpOgorICAgICAgICAocGFy
c2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKToKKyAgICAgICAgKHZhbGlkYXRlUGFyYW0pOgorICAg
ICAgICAocGFyc2VQYXJhbSk6CisgICAgICAgIChwYXJzZVBhcmFtcyk6CisgICAgICAgIChwYXJz
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOgorICAgICAgICAocGFyc2VGdW5jdGlvbkV4cHJlc3Npb24p
OgorICAgICAgICAocGFyc2VDbGFzc0JvZHkpOgorICAgICAgICAocGFyc2VDbGFzc0RlY2xhcmF0
aW9uKToKKyAgICAgICAgKHBhcnNlQ2xhc3NFeHByZXNzaW9uKToKKyAgICAgICAgKHBhcnNlTW9k
dWxlU3BlY2lmaWVyKToKKyAgICAgICAgKHBhcnNlRXhwb3J0U3BlY2lmaWVyKToKKyAgICAgICAg
KHBhcnNlRXhwb3J0TmFtZWREZWNsYXJhdGlvbik6CisgICAgICAgIChwYXJzZUV4cG9ydERlZmF1
bHREZWNsYXJhdGlvbik6CisgICAgICAgIChwYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uKToKKyAg
ICAgICAgKHBhcnNlRXhwb3J0RGVjbGFyYXRpb24pOgorICAgICAgICAocGFyc2VJbXBvcnRTcGVj
aWZpZXIpOgorICAgICAgICAocGFyc2VOYW1lZEltcG9ydHMpOgorICAgICAgICAocGFyc2VJbXBv
cnREZWZhdWx0U3BlY2lmaWVyKToKKyAgICAgICAgKHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lm
aWVyKToKKyAgICAgICAgKHBhcnNlSW1wb3J0RGVjbGFyYXRpb24pOgorICAgICAgICAocGFyc2VT
Y3JpcHRCb2R5KToKKyAgICAgICAgKHBhcnNlUHJvZ3JhbSk6CisgICAgICAgIChmaWx0ZXJUb2tl
bkxvY2F0aW9uKToKKyAgICAgICAgKHRva2VuaXplKToKKyAgICAgICAgKHBhcnNlKToKKyAgICAg
ICAgKGV4cG9ydHMuU3ludGF4KToKKyAgICAgICAgKFN0cmluZ01hcCk6IERlbGV0ZWQuCisgICAg
ICAgIChTdHJpbmdNYXAucHJvdG90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFN0cmluZ01hcC5w
cm90b3R5cGUuaGFzKTogRGVsZXRlZC4KKyAgICAgICAgKFN0cmluZ01hcC5wcm90b3R5cGUuZGVs
ZXRlKTogRGVsZXRlZC4KKyAgICAgICAgKGdldEVzY2FwZWRJZGVudGlmaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKHNjYW5UZW1wbGF0ZUVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAobG9va2Fo
ZWFkMik6IERlbGV0ZWQuCisgICAgICAgIChtYXJrZXJDcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAocHJvY2Vzc0NvbW1lbnQpOiBEZWxldGVkLgorICAgICAgICAobWFya2VyQXBwbHkpOiBEZWxl
dGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLnBvc3RQcm9jZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVBcnJheUV4cHJlc3Npb24pOiBEZWxl
dGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNz
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVCaW5hcnlF
eHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVC
bG9ja1N0YXRlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3Jl
YXRlQnJlYWtTdGF0ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRl
LmNyZWF0ZUNhbGxFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxl
Z2F0ZS5jcmVhdGVDYXRjaENsYXVzZSk6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVs
ZWdhdGUuY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFN5
bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudCk6IERlbGV0ZWQuCisgICAg
ICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQpOiBEZWxldGVk
LgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0ZUVtcHR5U3RhdGVtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVFeHByZXNzaW9u
U3RhdGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVG
b3JTdGF0ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0
ZUZvckluU3RhdGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5j
cmVhdGVGb3JPZlN0YXRlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdh
dGUuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhU
cmVlRGVsZWdhdGUuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVJZlN0YXRlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
IChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlTGFiZWxlZFN0YXRlbWVudCk6IERlbGV0ZWQuCisg
ICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbik6IERlbGV0ZWQu
CisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlTmV3RXhwcmVzc2lvbik6IERlbGV0
ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlT2JqZWN0RXhwcmVzc2lvbik6
IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlUG9zdGZpeEV4cHJl
c3Npb24pOiBEZWxldGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0ZVByb2dy
YW0pOiBEZWxldGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0ZVByb3BlcnR5
KTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0
ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0ZVNlcXVl
bmNlRXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3Jl
YXRlU3dpdGNoQ2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3Jl
YXRlU3dpdGNoU3RhdGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0
ZS5jcmVhdGVUaGlzRXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVs
ZWdhdGUuY3JlYXRlVGhyb3dTdGF0ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoU3ludGF4VHJl
ZURlbGVnYXRlLmNyZWF0ZVRyeVN0YXRlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhU
cmVlRGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFN5
bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0b3IpOiBEZWxl
dGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0ZVdoaWxlU3RhdGVtZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVXaXRoU3RhdGVtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVUZW1wbGF0ZUVs
ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0ZVRlbXBs
YXRlTGl0ZXJhbCk6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRl
U3ByZWFkRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3Jl
YXRlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRy
ZWVEZWxlZ2F0ZS5jcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlTWV0aG9kRGVmaW5pdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlQ2xhc3NCb2R5KTogRGVsZXRlZC4K
KyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVDbGFzc0V4cHJlc3Npb24pOiBEZWxl
dGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0ZUNsYXNzRGVjbGFyYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoU3ludGF4VHJlZURlbGVnYXRlLmNyZWF0ZU1vZHVsZVNwZWNp
Zmllcik6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlRXhwb3J0
U3BlY2lmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVF
eHBvcnRCYXRjaFNwZWNpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdh
dGUuY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChTeW50
YXhUcmVlRGVsZWdhdGUuY3JlYXRlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlSW1wb3J0U3BlY2lmaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVhdGVJbXBvcnREZWNs
YXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChTeW50YXhUcmVlRGVsZWdhdGUuY3JlYXRlWWll
bGRFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFN5bnRheFRyZWVEZWxlZ2F0ZS5jcmVh
dGVDb21wcmVoZW5zaW9uRXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChwZWVrTGluZVRl
cm1pbmF0b3IpOiBEZWxldGVkLgorICAgICAgICAodGhyb3dFcnJvclRvbGVyYW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKHRocm93VW5leHBlY3RlZCk6IERlbGV0ZWQuCisgICAgICAgIChpc0xlZnRI
YW5kU2lkZSk6IERlbGV0ZWQuCisgICAgICAgIChpc0Fzc2lnbmFibGVMZWZ0SGFuZFNpZGUpOiBE
ZWxldGVkLgorICAgICAgICAocGFyc2VBcnJheUluaXRpYWxpc2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKGdldEZpZWxkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChwYXJzZU9iamVjdEluaXRpYWxp
c2VyKTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lv
bik6IERlbGV0ZWQuCisgICAgICAgIChyZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0
ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0
ZXIpOiBEZWxldGVkLgorICAgICAgICAocGFyc2VDb25zdExldERlY2xhcmF0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKHBhcnNlRXhwb3J0QmF0Y2hTcGVjaWZpZXIpOiBEZWxldGVkLgorICAgICAg
ICAocGFyc2VFeHBvcnREZWNsYXJhdGlvbi5yZXdpbmQpOiBEZWxldGVkLgorICAgICAgICAocGFy
c2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNlWWllbGRF
eHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKHNwZWNpYWxNZXRob2QpOiBEZWxldGVkLgor
ICAgICAgICAocGFyc2VNZXRob2REZWZpbml0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNl
U291cmNlRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChwYXJzZVByb2dyYW1FbGVtZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKHBhcnNlUHJvZ3JhbUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKHBhdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKHVucGF0Y2gpOiBEZWxldGVkLgorICAgICAg
ICAoZXh0ZW5kKTogRGVsZXRlZC4KKwogMjAxNS0wOS0yMSAgTWF0dCBCYWtlciAgPG1hdHRiYWtl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcmVxdWVzdEFuaW1hdGlvbkZy
YW1lIGNvbnRpbnVlcyB0byBiZSBjYWxsZWQgYWZ0ZXIgc3RvcHBpbmcgdGhlIHRpbWVsaW5lIHJl
Y29yZGluZwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvRXNwcmltYS9MSUNFTlNFCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvTElDRU5TRQkocmV2aXNpb24gMTkwMDYxKQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9M
SUNFTlNFCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyICsxLDEzIEBACi1Db3B5cmlnaHQgKEMpIDIw
MTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+Ci1Db3B5cmlnaHQgKEMp
IDIwMTMgVGhhZGRlZSBUeWwgPHRoYWRkZWUudHlsQGdtYWlsLmNvbT4KLUNvcHlyaWdodCAoQykg
MjAxMyBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPgotQ29weXJpZ2h0IChDKSAyMDEy
IEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgotQ29weXJpZ2h0IChDKSAy
MDEyIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+Ci1Db3B5cmlnaHQgKEMpIDIwMTIg
Sm9vc3QtV2ltIEJvZWtlc3RlaWpuIDxqb29zdC13aW1AYm9la2VzdGVpam4ubmw+Ci1Db3B5cmln
aHQgKEMpIDIwMTIgS3JpcyBLb3dhbCA8a3Jpcy5rb3dhbEBjaXhhci5jb20+Ci1Db3B5cmlnaHQg
KEMpIDIwMTIgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgotQ29weXJpZ2h0
IChDKSAyMDEyIEFycGFkIEJvcnNvcyA8YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPgotQ29w
eXJpZ2h0IChDKSAyMDExIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgor
Q29weXJpZ2h0IChjKSBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiBhbmQgQ29udHJpYnV0b3JzLCBB
bGwgUmlnaHRzIFJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogCi0q
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCiAKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJbmRleDog
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9lc3By
aW1hLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qcwkocmV2aXNpb24gMTkwMDYxKQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9lc3ByaW1hLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzICsxLDUgQEAKIC8qCi0gIENvcHlyaWdodCAoQykgMjAx
MyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT4KLSAgQ29weXJpZ2h0IChD
KSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFkZGVlLnR5bEBnbWFpbC5jb20+Ci0gIENvcHlyaWdodCAo
QykgMjAxMiBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT4KLSAgQ29weXJp
Z2h0IChDKSAyMDEyIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+Ci0gIENvcHlyaWdo
dCAoQykgMjAxMiBKb29zdC1XaW0gQm9la2VzdGVpam4gPGpvb3N0LXdpbUBib2VrZXN0ZWlqbi5u
bD4KLSAgQ29weXJpZ2h0IChDKSAyMDEyIEtyaXMgS293YWwgPGtyaXMua293YWxAY2l4YXIuY29t
PgotICBDb3B5cmlnaHQgKEMpIDIwMTIgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPgotICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJwYWQgQm9yc29zIDxhcnBhZC5ib3Jzb3NAZ29v
Z2xlbWFpbC5jb20+Ci0gIENvcHlyaWdodCAoQykgMjAxMSBBcml5YSBIaWRheWF0IDxhcml5YS5o
aWRheWF0QGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChjKSBqUXVlcnkgRm91bmRhdGlvbiwgSW5j
LiBhbmQgQ29udHJpYnV0b3JzLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogCiAgIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKQEAgLTUxLDIxICs0MywyOSBAQAogICAgICAgICBUb2tlbk5h
bWUsCiAgICAgICAgIEZuRXhwclRva2VucywKICAgICAgICAgU3ludGF4LAotICAgICAgICBQcm9w
ZXJ0eUtpbmQsCisgICAgICAgIFBsYWNlSG9sZGVycywKICAgICAgICAgTWVzc2FnZXMsCiAgICAg
ICAgIFJlZ2V4LAotICAgICAgICBTeW50YXhUcmVlRGVsZWdhdGUsCi0gICAgICAgIENsYXNzUHJv
cGVydHlUeXBlLAogICAgICAgICBzb3VyY2UsCiAgICAgICAgIHN0cmljdCwKICAgICAgICAgaW5k
ZXgsCiAgICAgICAgIGxpbmVOdW1iZXIsCiAgICAgICAgIGxpbmVTdGFydCwKKyAgICAgICAgaGFz
TGluZVRlcm1pbmF0b3IsCisgICAgICAgIGxhc3RJbmRleCwKKyAgICAgICAgbGFzdExpbmVOdW1i
ZXIsCisgICAgICAgIGxhc3RMaW5lU3RhcnQsCisgICAgICAgIHN0YXJ0SW5kZXgsCisgICAgICAg
IHN0YXJ0TGluZU51bWJlciwKKyAgICAgICAgc3RhcnRMaW5lU3RhcnQsCisgICAgICAgIHNjYW5u
aW5nLAogICAgICAgICBsZW5ndGgsCi0gICAgICAgIGRlbGVnYXRlLAogICAgICAgICBsb29rYWhl
YWQsCiAgICAgICAgIHN0YXRlLAotICAgICAgICBleHRyYTsKKyAgICAgICAgZXh0cmEsCisgICAg
ICAgIGlzQmluZGluZ0VsZW1lbnQsCisgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCwKKyAgICAg
ICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOwogCiAgICAgVG9rZW4gPSB7CiAgICAg
ICAgIEJvb2xlYW5MaXRlcmFsOiAxLApAQCAtOTAsNiArOTAsNyBAQAogICAgIFRva2VuTmFtZVtU
b2tlbi5QdW5jdHVhdG9yXSA9ICdQdW5jdHVhdG9yJzsKICAgICBUb2tlbk5hbWVbVG9rZW4uU3Ry
aW5nTGl0ZXJhbF0gPSAnU3RyaW5nJzsKICAgICBUb2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJl
c3Npb25dID0gJ1JlZ3VsYXJFeHByZXNzaW9uJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uVGVtcGxh
dGVdID0gJ1RlbXBsYXRlJzsKIAogICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0
aG9zZSB0b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi4KICAgICBGbkV4cHJUb2tlbnMgPSBbJygnLCAn
eycsICdbJywgJ2luJywgJ3R5cGVvZicsICdpbnN0YW5jZW9mJywgJ25ldycsCkBAIC0xMDMsMzIg
KzEwNCwzMiBAQAogICAgICAgICAgICAgICAgICAgICAnPD0nLCAnPCcsICc+JywgJyE9JywgJyE9
PSddOwogCiAgICAgU3ludGF4ID0geworICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fz
c2lnbm1lbnRFeHByZXNzaW9uJywKKyAgICAgICAgQXNzaWdubWVudFBhdHRlcm46ICdBc3NpZ25t
ZW50UGF0dGVybicsCiAgICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbics
CiAgICAgICAgIEFycmF5UGF0dGVybjogJ0FycmF5UGF0dGVybicsCiAgICAgICAgIEFycm93RnVu
Y3Rpb25FeHByZXNzaW9uOiAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nLAotICAgICAgICBBc3Np
Z25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJywKLSAgICAgICAgQmluYXJ5
RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLAogICAgICAgICBCbG9ja1N0YXRlbWVudDog
J0Jsb2NrU3RhdGVtZW50JywKKyAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJl
c3Npb24nLAogICAgICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JywKICAgICAg
ICAgQ2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbicsCiAgICAgICAgIENhdGNoQ2xhdXNl
OiAnQ2F0Y2hDbGF1c2UnLAogICAgICAgICBDbGFzc0JvZHk6ICdDbGFzc0JvZHknLAogICAgICAg
ICBDbGFzc0RlY2xhcmF0aW9uOiAnQ2xhc3NEZWNsYXJhdGlvbicsCiAgICAgICAgIENsYXNzRXhw
cmVzc2lvbjogJ0NsYXNzRXhwcmVzc2lvbicsCi0gICAgICAgIENvbXByZWhlbnNpb25CbG9jazog
J0NvbXByZWhlbnNpb25CbG9jaycsCi0gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiAn
Q29tcHJlaGVuc2lvbkV4cHJlc3Npb24nLAogICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246
ICdDb25kaXRpb25hbEV4cHJlc3Npb24nLAogICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0Nv
bnRpbnVlU3RhdGVtZW50JywKLSAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1Z2dlclN0
YXRlbWVudCcsCiAgICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JywK
KyAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1Z2dlclN0YXRlbWVudCcsCiAgICAgICAg
IEVtcHR5U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLAotICAgICAgICBFeHBvcnREZWNsYXJh
dGlvbjogJ0V4cG9ydERlY2xhcmF0aW9uJywKLSAgICAgICAgRXhwb3J0QmF0Y2hTcGVjaWZpZXI6
ICdFeHBvcnRCYXRjaFNwZWNpZmllcicsCisgICAgICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiAn
RXhwb3J0QWxsRGVjbGFyYXRpb24nLAorICAgICAgICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246
ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nLAorICAgICAgICBFeHBvcnROYW1lZERlY2xhcmF0
aW9uOiAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicsCiAgICAgICAgIEV4cG9ydFNwZWNpZmllcjog
J0V4cG9ydFNwZWNpZmllcicsCiAgICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHByZXNz
aW9uU3RhdGVtZW50JywKLSAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcs
Ci0gICAgICAgIEZvck9mU3RhdGVtZW50OiAnRm9yT2ZTdGF0ZW1lbnQnLAogICAgICAgICBGb3JT
dGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLAorICAgICAgICBGb3JPZlN0YXRlbWVudDogJ0Zvck9m
U3RhdGVtZW50JywKKyAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsCiAg
ICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKICAgICAg
ICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywKICAgICAgICAgSWRl
bnRpZmllcjogJ0lkZW50aWZpZXInLApAQCAtMTM3LDIwICsxMzgsMjIgQEAKICAgICAgICAgSW1w
b3J0RGVmYXVsdFNwZWNpZmllcjogJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInLAogICAgICAgICBJ
bXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInLAogICAg
ICAgICBJbXBvcnRTcGVjaWZpZXI6ICdJbXBvcnRTcGVjaWZpZXInLAotICAgICAgICBMYWJlbGVk
U3RhdGVtZW50OiAnTGFiZWxlZFN0YXRlbWVudCcsCiAgICAgICAgIExpdGVyYWw6ICdMaXRlcmFs
JywKKyAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAogICAgICAg
ICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHByZXNzaW9uJywKICAgICAgICAgTWVtYmVy
RXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLAorICAgICAgICBNZXRhUHJvcGVydHk6ICdN
ZXRhUHJvcGVydHknLAogICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlv
bicsCi0gICAgICAgIE1vZHVsZVNwZWNpZmllcjogJ01vZHVsZVNwZWNpZmllcicsCiAgICAgICAg
IE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKICAgICAgICAgT2JqZWN0RXhwcmVzc2lv
bjogJ09iamVjdEV4cHJlc3Npb24nLAogICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2JqZWN0UGF0
dGVybicsCiAgICAgICAgIFByb2dyYW06ICdQcm9ncmFtJywKICAgICAgICAgUHJvcGVydHk6ICdQ
cm9wZXJ0eScsCisgICAgICAgIFJlc3RFbGVtZW50OiAnUmVzdEVsZW1lbnQnLAogICAgICAgICBS
ZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLAogICAgICAgICBTZXF1ZW5jZUV4cHJl
c3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLAogICAgICAgICBTcHJlYWRFbGVtZW50OiAnU3By
ZWFkRWxlbWVudCcsCisgICAgICAgIFN1cGVyOiAnU3VwZXInLAogICAgICAgICBTd2l0Y2hDYXNl
OiAnU3dpdGNoQ2FzZScsCiAgICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVu
dCcsCiAgICAgICAgIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogJ1RhZ2dlZFRlbXBsYXRlRXhw
cmVzc2lvbicsCkBAIC0xNjgsMTUgKzE3MSw4IEBACiAgICAgICAgIFlpZWxkRXhwcmVzc2lvbjog
J1lpZWxkRXhwcmVzc2lvbicKICAgICB9OwogCi0gICAgUHJvcGVydHlLaW5kID0gewotICAgICAg
ICBEYXRhOiAxLAotICAgICAgICBHZXQ6IDIsCi0gICAgICAgIFNldDogNAotICAgIH07Ci0KLSAg
ICBDbGFzc1Byb3BlcnR5VHlwZSA9IHsKLSAgICAgICAgJ3N0YXRpYyc6ICdzdGF0aWMnLAotICAg
ICAgICBwcm90b3R5cGU6ICdwcm90b3R5cGUnCisgICAgUGxhY2VIb2xkZXJzID0geworICAgICAg
ICBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyOiAnQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcicK
ICAgICB9OwogCiAgICAgLy8gRXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBW
OC4KQEAgLTE5Miw1NCArMTg4LDUwIEBACiAgICAgICAgIEludmFsaWRSZWdFeHA6ICdJbnZhbGlk
IHJlZ3VsYXIgZXhwcmVzc2lvbicsCiAgICAgICAgIFVudGVybWluYXRlZFJlZ0V4cDogJ0ludmFs
aWQgcmVndWxhciBleHByZXNzaW9uOiBtaXNzaW5nIC8nLAogICAgICAgICBJbnZhbGlkTEhTSW5B
c3NpZ25tZW50OiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBhc3NpZ25tZW50JywKLSAgICAg
ICAgSW52YWxpZExIU0luRm9ybWFsc0xpc3Q6ICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZv
cm1hbHMgbGlzdCcsCiAgICAgICAgIEludmFsaWRMSFNJbkZvckluOiAnSW52YWxpZCBsZWZ0LWhh
bmQgc2lkZSBpbiBmb3ItaW4nLAorICAgICAgICBJbnZhbGlkTEhTSW5Gb3JMb29wOiAnSW52YWxp
ZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItbG9vcCcsCiAgICAgICAgIE11bHRpcGxlRGVmYXVsdHNJ
blN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVu
dCcsCiAgICAgICAgIE5vQ2F0Y2hPckZpbmFsbHk6ICdNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkg
YWZ0ZXIgdHJ5JywKICAgICAgICAgVW5rbm93bkxhYmVsOiAnVW5kZWZpbmVkIGxhYmVsIFwnJTBc
JycsCiAgICAgICAgIFJlZGVjbGFyYXRpb246ICclMCBcJyUxXCcgaGFzIGFscmVhZHkgYmVlbiBk
ZWNsYXJlZCcsCiAgICAgICAgIElsbGVnYWxDb250aW51ZTogJ0lsbGVnYWwgY29udGludWUgc3Rh
dGVtZW50JywKICAgICAgICAgSWxsZWdhbEJyZWFrOiAnSWxsZWdhbCBicmVhayBzdGF0ZW1lbnQn
LAotICAgICAgICBJbGxlZ2FsRHVwbGljYXRlQ2xhc3NQcm9wZXJ0eTogJ0lsbGVnYWwgZHVwbGlj
YXRlIHByb3BlcnR5IGluIGNsYXNzIGRlZmluaXRpb24nLAotICAgICAgICBJbGxlZ2FsQ2xhc3ND
b25zdHJ1Y3RvclByb3BlcnR5OiAnSWxsZWdhbCBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBpbiBjbGFz
cyBkZWZpbml0aW9uJywKICAgICAgICAgSWxsZWdhbFJldHVybjogJ0lsbGVnYWwgcmV0dXJuIHN0
YXRlbWVudCcsCi0gICAgICAgIElsbGVnYWxZaWVsZDogJ0lsbGVnYWwgeWllbGQgZXhwcmVzc2lv
bicsCi0gICAgICAgIElsbGVnYWxTcHJlYWQ6ICdJbGxlZ2FsIHNwcmVhZCBlbGVtZW50JywKICAg
ICAgICAgU3RyaWN0TW9kZVdpdGg6ICdTdHJpY3QgbW9kZSBjb2RlIG1heSBub3QgaW5jbHVkZSBh
IHdpdGggc3RhdGVtZW50JywKICAgICAgICAgU3RyaWN0Q2F0Y2hWYXJpYWJsZTogJ0NhdGNoIHZh
cmlhYmxlIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAogICAg
ICAgICBTdHJpY3RWYXJOYW1lOiAnVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJn
dW1lbnRzIGluIHN0cmljdCBtb2RlJywKICAgICAgICAgU3RyaWN0UGFyYW1OYW1lOiAnUGFyYW1l
dGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUn
LAogICAgICAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3QgbW9kZSBmdW5jdGlvbiBtYXkgbm90
IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsCi0gICAgICAgIFBhcmFtZXRlckFmdGVy
UmVzdFBhcmFtZXRlcjogJ1Jlc3QgcGFyYW1ldGVyIG11c3QgYmUgZmluYWwgcGFyYW1ldGVyIG9m
IGFuIGFyZ3VtZW50IGxpc3QnLAotICAgICAgICBEZWZhdWx0UmVzdFBhcmFtZXRlcjogJ1Jlc3Qg
cGFyYW1ldGVyIGNhbiBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUnLAotICAgICAgICBFbGVtZW50
QWZ0ZXJTcHJlYWRFbGVtZW50OiAnU3ByZWFkIG11c3QgYmUgdGhlIGZpbmFsIGVsZW1lbnQgb2Yg
YW4gZWxlbWVudCBsaXN0JywKLSAgICAgICAgT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcjog
J0ludmFsaWQgcmVzdCBwYXJhbWV0ZXInLAotICAgICAgICBPYmplY3RQYXR0ZXJuQXNTcHJlYWQ6
ICdJbnZhbGlkIHNwcmVhZCBhcmd1bWVudCcsCiAgICAgICAgIFN0cmljdEZ1bmN0aW9uTmFtZTog
J0Z1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9k
ZScsCiAgICAgICAgIFN0cmljdE9jdGFsTGl0ZXJhbDogJ09jdGFsIGxpdGVyYWxzIGFyZSBub3Qg
YWxsb3dlZCBpbiBzdHJpY3QgbW9kZS4nLAogICAgICAgICBTdHJpY3REZWxldGU6ICdEZWxldGUg
b2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZS4nLAotICAgICAgICBT
dHJpY3REdXBsaWNhdGVQcm9wZXJ0eTogJ0R1cGxpY2F0ZSBkYXRhIHByb3BlcnR5IGluIG9iamVj
dCBsaXRlcmFsIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKLSAgICAgICAgQWNjZXNzb3JE
YXRhUHJvcGVydHk6ICdPYmplY3QgbGl0ZXJhbCBtYXkgbm90IGhhdmUgZGF0YSBhbmQgYWNjZXNz
b3IgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lJywKLSAgICAgICAgQWNjZXNzb3JHZXRTZXQ6
ICdPYmplY3QgbGl0ZXJhbCBtYXkgbm90IGhhdmUgbXVsdGlwbGUgZ2V0L3NldCBhY2Nlc3NvcnMg
d2l0aCB0aGUgc2FtZSBuYW1lJywKICAgICAgICAgU3RyaWN0TEhTQXNzaWdubWVudDogJ0Fzc2ln
bm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUn
LAogICAgICAgICBTdHJpY3RMSFNQb3N0Zml4OiAnUG9zdGZpeCBpbmNyZW1lbnQvZGVjcmVtZW50
IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJywK
ICAgICAgICAgU3RyaWN0TEhTUHJlZml4OiAnUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5
IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAogICAg
ICAgICBTdHJpY3RSZXNlcnZlZFdvcmQ6ICdVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4g
c3RyaWN0IG1vZGUnLAotICAgICAgICBNaXNzaW5nRnJvbUNsYXVzZTogJ01pc3NpbmcgZnJvbSBj
bGF1c2UnLAotICAgICAgICBOb0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2U6ICdNaXNzaW5nIGFzIGFm
dGVyIGltcG9ydCAqJywKLSAgICAgICAgSW52YWxpZE1vZHVsZVNwZWNpZmllcjogJ0ludmFsaWQg
bW9kdWxlIHNwZWNpZmllcicsCi0gICAgICAgIElsbGVnYWxJbXBvcnREZWNsYXJhdGlvbjogJ0ls
bGVnYWwgaW1wb3J0IGRlY2xhcmF0aW9uJywKLSAgICAgICAgSWxsZWdhbEV4cG9ydERlY2xhcmF0
aW9uOiAnSWxsZWdhbCBleHBvcnQgZGVjbGFyYXRpb24nLAotICAgICAgICBOb1VuaW50aWFsaXpl
ZENvbnN0OiAnQ29uc3QgbXVzdCBiZSBpbml0aWFsaXplZCcsCi0gICAgICAgIENvbXByZWhlbnNp
b25SZXF1aXJlc0Jsb2NrOiAnQ29tcHJlaGVuc2lvbiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJs
b2NrJywKLSAgICAgICAgQ29tcHJlaGVuc2lvbkVycm9yOiAnQ29tcHJlaGVuc2lvbiBFcnJvcics
Ci0gICAgICAgIEVhY2hOb3RBbGxvd2VkOiAnRWFjaCBpcyBub3Qgc3VwcG9ydGVkJworICAgICAg
ICBUZW1wbGF0ZU9jdGFsTGl0ZXJhbDogJ09jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBp
biB0ZW1wbGF0ZSBzdHJpbmdzLicsCisgICAgICAgIFBhcmFtZXRlckFmdGVyUmVzdFBhcmFtZXRl
cjogJ1Jlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyJywKKyAgICAg
ICAgRGVmYXVsdFJlc3RQYXJhbWV0ZXI6ICdVbmV4cGVjdGVkIHRva2VuID0nLAorICAgICAgICBP
YmplY3RQYXR0ZXJuQXNSZXN0UGFyYW1ldGVyOiAnVW5leHBlY3RlZCB0b2tlbiB7JywKKyAgICAg
ICAgRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eTogJ0R1cGxpY2F0ZSBfX3Byb3RvX18gZmllbGRzIGFy
ZSBub3QgYWxsb3dlZCBpbiBvYmplY3QgbGl0ZXJhbHMnLAorICAgICAgICBDb25zdHJ1Y3RvclNw
ZWNpYWxNZXRob2Q6ICdDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yJywK
KyAgICAgICAgRHVwbGljYXRlQ29uc3RydWN0b3I6ICdBIGNsYXNzIG1heSBvbmx5IGhhdmUgb25l
IGNvbnN0cnVjdG9yJywKKyAgICAgICAgU3RhdGljUHJvdG90eXBlOiAnQ2xhc3NlcyBtYXkgbm90
IGhhdmUgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZScsCisgICAgICAgIE1pc3NpbmdG
cm9tQ2xhdXNlOiAnVW5leHBlY3RlZCB0b2tlbicsCisgICAgICAgIE5vQXNBZnRlckltcG9ydE5h
bWVzcGFjZTogJ1VuZXhwZWN0ZWQgdG9rZW4nLAorICAgICAgICBJbnZhbGlkTW9kdWxlU3BlY2lm
aWVyOiAnVW5leHBlY3RlZCB0b2tlbicsCisgICAgICAgIElsbGVnYWxJbXBvcnREZWNsYXJhdGlv
bjogJ1VuZXhwZWN0ZWQgdG9rZW4nLAorICAgICAgICBJbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb246
ICdVbmV4cGVjdGVkIHRva2VuJywKKyAgICAgICAgRHVwbGljYXRlQmluZGluZzogJ0R1cGxpY2F0
ZSBiaW5kaW5nICUwJwogICAgIH07CiAKLSAgICAvLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11
bmljb2RlLXJlZ2V4LnB5LgorICAgIC8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLXVuaWNvZGUt
cmVnZXguanMuCiAgICAgUmVnZXggPSB7Ci0gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0
OiBuZXcgUmVnRXhwKCdbXHhhYVx4YjVceGJhXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1cdTAyYzFc
dTAyYzYtXHUwMmQxXHUwMmUwLVx1MDJlNFx1MDJlY1x1MDJlZVx1MDM3MC1cdTAzNzRcdTAzNzZc
dTAzNzdcdTAzN2EtXHUwMzdkXHUwMzg2XHUwMzg4LVx1MDM4YVx1MDM4Y1x1MDM4ZS1cdTAzYTFc
dTAzYTMtXHUwM2Y1XHUwM2Y3LVx1MDQ4MVx1MDQ4YS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5
XHUwNTYxLVx1MDU4N1x1MDVkMC1cdTA1ZWFcdTA1ZjAtXHUwNWYyXHUwNjIwLVx1MDY0YVx1MDY2
ZVx1MDY2Zlx1MDY3MS1cdTA2ZDNcdTA2ZDVcdTA2ZTVcdTA2ZTZcdTA2ZWVcdTA2ZWZcdTA2ZmEt
XHUwNmZjXHUwNmZmXHUwNzEwXHUwNzEyLVx1MDcyZlx1MDc0ZC1cdTA3YTVcdTA3YjFcdTA3Y2Et
XHUwN2VhXHUwN2Y0XHUwN2Y1XHUwN2ZhXHUwODAwLVx1MDgxNVx1MDgxYVx1MDgyNFx1MDgyOFx1
MDg0MC1cdTA4NThcdTA4YTBcdTA4YTItXHUwOGFjXHUwOTA0LVx1MDkzOVx1MDkzZFx1MDk1MFx1
MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XHUwOTc5LVx1MDk3Zlx1MDk4NS1cdTA5OGNcdTA5OGZc
dTA5OTBcdTA5OTMtXHUwOWE4XHUwOWFhLVx1MDliMFx1MDliMlx1MDliNi1cdTA5YjlcdTA5YmRc
dTA5Y2VcdTA5ZGNcdTA5ZGRcdTA5ZGYtXHUwOWUxXHUwOWYwXHUwOWYxXHUwYTA1LVx1MGEwYVx1
MGEwZlx1MGExMFx1MGExMy1cdTBhMjhcdTBhMmEtXHUwYTMwXHUwYTMyXHUwYTMzXHUwYTM1XHUw
YTM2XHUwYTM4XHUwYTM5XHUwYTU5LVx1MGE1Y1x1MGE1ZVx1MGE3Mi1cdTBhNzRcdTBhODUtXHUw
YThkXHUwYThmLVx1MGE5MVx1MGE5My1cdTBhYThcdTBhYWEtXHUwYWIwXHUwYWIyXHUwYWIzXHUw
YWI1LVx1MGFiOVx1MGFiZFx1MGFkMFx1MGFlMFx1MGFlMVx1MGIwNS1cdTBiMGNcdTBiMGZcdTBi
MTBcdTBiMTMtXHUwYjI4XHUwYjJhLVx1MGIzMFx1MGIzMlx1MGIzM1x1MGIzNS1cdTBiMzlcdTBi
M2RcdTBiNWNcdTBiNWRcdTBiNWYtXHUwYjYxXHUwYjcxXHUwYjgzXHUwYjg1LVx1MGI4YVx1MGI4
ZS1cdTBiOTBcdTBiOTItXHUwYjk1XHUwYjk5XHUwYjlhXHUwYjljXHUwYjllXHUwYjlmXHUwYmEz
XHUwYmE0XHUwYmE4LVx1MGJhYVx1MGJhZS1cdTBiYjlcdTBiZDBcdTBjMDUtXHUwYzBjXHUwYzBl
LVx1MGMxMFx1MGMxMi1cdTBjMjhcdTBjMmEtXHUwYzMzXHUwYzM1LVx1MGMzOVx1MGMzZFx1MGM1
OFx1MGM1OVx1MGM2MFx1MGM2MVx1MGM4NS1cdTBjOGNcdTBjOGUtXHUwYzkwXHUwYzkyLVx1MGNh
OFx1MGNhYS1cdTBjYjNcdTBjYjUtXHUwY2I5XHUwY2JkXHUwY2RlXHUwY2UwXHUwY2UxXHUwY2Yx
XHUwY2YyXHUwZDA1LVx1MGQwY1x1MGQwZS1cdTBkMTBcdTBkMTItXHUwZDNhXHUwZDNkXHUwZDRl
XHUwZDYwXHUwZDYxXHUwZDdhLVx1MGQ3Zlx1MGQ4NS1cdTBkOTZcdTBkOWEtXHUwZGIxXHUwZGIz
LVx1MGRiYlx1MGRiZFx1MGRjMC1cdTBkYzZcdTBlMDEtXHUwZTMwXHUwZTMyXHUwZTMzXHUwZTQw
LVx1MGU0Nlx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGU4YVx1MGU4ZFx1MGU5NC1c
dTBlOTdcdTBlOTktXHUwZTlmXHUwZWExLVx1MGVhM1x1MGVhNVx1MGVhN1x1MGVhYVx1MGVhYlx1
MGVhZC1cdTBlYjBcdTBlYjJcdTBlYjNcdTBlYmRcdTBlYzAtXHUwZWM0XHUwZWM2XHUwZWRjLVx1
MGVkZlx1MGYwMFx1MGY0MC1cdTBmNDdcdTBmNDktXHUwZjZjXHUwZjg4LVx1MGY4Y1x1MTAwMC1c
dTEwMmFcdTEwM2ZcdTEwNTAtXHUxMDU1XHUxMDVhLVx1MTA1ZFx1MTA2MVx1MTA2NVx1MTA2Nlx1
MTA2ZS1cdTEwNzBcdTEwNzUtXHUxMDgxXHUxMDhlXHUxMGEwLVx1MTBjNVx1MTBjN1x1MTBjZFx1
MTBkMC1cdTEwZmFcdTEwZmMtXHUxMjQ4XHUxMjRhLVx1MTI0ZFx1MTI1MC1cdTEyNTZcdTEyNThc
dTEyNWEtXHUxMjVkXHUxMjYwLVx1MTI4OFx1MTI4YS1cdTEyOGRcdTEyOTAtXHUxMmIwXHUxMmIy
LVx1MTJiNVx1MTJiOC1cdTEyYmVcdTEyYzBcdTEyYzItXHUxMmM1XHUxMmM4LVx1MTJkNlx1MTJk
OC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1YVx1MTM4MC1cdTEzOGZcdTEzYTAtXHUx
M2Y0XHUxNDAxLVx1MTY2Y1x1MTY2Zi1cdTE2N2ZcdTE2ODEtXHUxNjlhXHUxNmEwLVx1MTZlYVx1
MTZlZS1cdTE2ZjBcdTE3MDAtXHUxNzBjXHUxNzBlLVx1MTcxMVx1MTcyMC1cdTE3MzFcdTE3NDAt
XHUxNzUxXHUxNzYwLVx1MTc2Y1x1MTc2ZS1cdTE3NzBcdTE3ODAtXHUxN2IzXHUxN2Q3XHUxN2Rj
XHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4YThcdTE4YWFcdTE4YjAtXHUxOGY1XHUxOTAwLVx1MTkx
Y1x1MTk1MC1cdTE5NmRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlhYlx1MTljMS1cdTE5YzdcdTFh
MDAtXHUxYTE2XHUxYTIwLVx1MWE1NFx1MWFhN1x1MWIwNS1cdTFiMzNcdTFiNDUtXHUxYjRiXHUx
YjgzLVx1MWJhMFx1MWJhZVx1MWJhZlx1MWJiYS1cdTFiZTVcdTFjMDAtXHUxYzIzXHUxYzRkLVx1
MWM0Zlx1MWM1YS1cdTFjN2RcdTFjZTktXHUxY2VjXHUxY2VlLVx1MWNmMVx1MWNmNVx1MWNmNlx1
MWQwMC1cdTFkYmZcdTFlMDAtXHUxZjE1XHUxZjE4LVx1MWYxZFx1MWYyMC1cdTFmNDVcdTFmNDgt
XHUxZjRkXHUxZjUwLVx1MWY1N1x1MWY1OVx1MWY1Ylx1MWY1ZFx1MWY1Zi1cdTFmN2RcdTFmODAt
XHUxZmI0XHUxZmI2LVx1MWZiY1x1MWZiZVx1MWZjMi1cdTFmYzRcdTFmYzYtXHUxZmNjXHUxZmQw
LVx1MWZkM1x1MWZkNi1cdTFmZGJcdTFmZTAtXHUxZmVjXHUxZmYyLVx1MWZmNFx1MWZmNi1cdTFm
ZmNcdTIwNzFcdTIwN2ZcdTIwOTAtXHUyMDljXHUyMTAyXHUyMTA3XHUyMTBhLVx1MjExM1x1MjEx
NVx1MjExOS1cdTIxMWRcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMmEtXHUyMTJkXHUyMTJmLVx1MjEz
OVx1MjEzYy1cdTIxM2ZcdTIxNDUtXHUyMTQ5XHUyMTRlXHUyMTYwLVx1MjE4OFx1MmMwMC1cdTJj
MmVcdTJjMzAtXHUyYzVlXHUyYzYwLVx1MmNlNFx1MmNlYi1cdTJjZWVcdTJjZjJcdTJjZjNcdTJk
MDAtXHUyZDI1XHUyZDI3XHUyZDJkXHUyZDMwLVx1MmQ2N1x1MmQ2Zlx1MmQ4MC1cdTJkOTZcdTJk
YTAtXHUyZGE2XHUyZGE4LVx1MmRhZVx1MmRiMC1cdTJkYjZcdTJkYjgtXHUyZGJlXHUyZGMwLVx1
MmRjNlx1MmRjOC1cdTJkY2VcdTJkZDAtXHUyZGQ2XHUyZGQ4LVx1MmRkZVx1MmUyZlx1MzAwNS1c
dTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM2NcdTMwNDEtXHUzMDk2
XHUzMDlkLVx1MzA5Zlx1MzBhMS1cdTMwZmFcdTMwZmMtXHUzMGZmXHUzMTA1LVx1MzEyZFx1MzEz
MS1cdTMxOGVcdTMxYTAtXHUzMWJhXHUzMWYwLVx1MzFmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5
ZmNjXHVhMDAwLVx1YTQ4Y1x1YTRkMC1cdWE0ZmRcdWE1MDAtXHVhNjBjXHVhNjEwLVx1YTYxZlx1
YTYyYVx1YTYyYlx1YTY0MC1cdWE2NmVcdWE2N2YtXHVhNjk3XHVhNmEwLVx1YTZlZlx1YTcxNy1c
dWE3MWZcdWE3MjItXHVhNzg4XHVhNzhiLVx1YTc4ZVx1YTc5MC1cdWE3OTNcdWE3YTAtXHVhN2Fh
XHVhN2Y4LVx1YTgwMVx1YTgwMy1cdWE4MDVcdWE4MDctXHVhODBhXHVhODBjLVx1YTgyMlx1YTg0
MC1cdWE4NzNcdWE4ODItXHVhOGIzXHVhOGYyLVx1YThmN1x1YThmYlx1YTkwYS1cdWE5MjVcdWE5
MzAtXHVhOTQ2XHVhOTYwLVx1YTk3Y1x1YTk4NC1cdWE5YjJcdWE5Y2ZcdWFhMDAtXHVhYTI4XHVh
YTQwLVx1YWE0Mlx1YWE0NC1cdWFhNGJcdWFhNjAtXHVhYTc2XHVhYTdhXHVhYTgwLVx1YWFhZlx1
YWFiMVx1YWFiNVx1YWFiNlx1YWFiOS1cdWFhYmRcdWFhYzBcdWFhYzJcdWFhZGItXHVhYWRkXHVh
YWUwLVx1YWFlYVx1YWFmMi1cdWFhZjRcdWFiMDEtXHVhYjA2XHVhYjA5LVx1YWIwZVx1YWIxMS1c
dWFiMTZcdWFiMjAtXHVhYjI2XHVhYjI4LVx1YWIyZVx1YWJjMC1cdWFiZTJcdWFjMDAtXHVkN2Ez
XHVkN2IwLVx1ZDdjNlx1ZDdjYi1cdWQ3ZmJcdWY5MDAtXHVmYTZkXHVmYTcwLVx1ZmFkOVx1ZmIw
MC1cdWZiMDZcdWZiMTMtXHVmYjE3XHVmYjFkXHVmYjFmLVx1ZmIyOFx1ZmIyYS1cdWZiMzZcdWZi
MzgtXHVmYjNjXHVmYjNlXHVmYjQwXHVmYjQxXHVmYjQzXHVmYjQ0XHVmYjQ2LVx1ZmJiMVx1ZmJk
My1cdWZkM2RcdWZkNTAtXHVmZDhmXHVmZDkyLVx1ZmRjN1x1ZmRmMC1cdWZkZmJcdWZlNzAtXHVm
ZTc0XHVmZTc2LVx1ZmVmY1x1ZmYyMS1cdWZmM2FcdWZmNDEtXHVmZjVhXHVmZjY2LVx1ZmZiZVx1
ZmZjMi1cdWZmYzdcdWZmY2EtXHVmZmNmXHVmZmQyLVx1ZmZkN1x1ZmZkYS1cdWZmZGNdJyksCi0g
ICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoJ1tceGFhXHhiNVx4YmFc
eGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx1MDJjMVx1MDJjNi1cdTAyZDFcdTAyZTAtXHUwMmU0XHUw
MmVjXHUwMmVlXHUwMzAwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3YS1cdTAzN2RcdTAzODZcdTAz
ODgtXHUwMzhhXHUwMzhjXHUwMzhlLVx1MDNhMVx1MDNhMy1cdTAzZjVcdTAzZjctXHUwNDgxXHUw
NDgzLVx1MDQ4N1x1MDQ4YS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1
MDU5MS1cdTA1YmRcdTA1YmZcdTA1YzFcdTA1YzJcdTA1YzRcdTA1YzVcdTA1YzdcdTA1ZDAtXHUw
NWVhXHUwNWYwLVx1MDVmMlx1MDYxMC1cdTA2MWFcdTA2MjAtXHUwNjY5XHUwNjZlLVx1MDZkM1x1
MDZkNS1cdTA2ZGNcdTA2ZGYtXHUwNmU4XHUwNmVhLVx1MDZmY1x1MDZmZlx1MDcxMC1cdTA3NGFc
dTA3NGQtXHUwN2IxXHUwN2MwLVx1MDdmNVx1MDdmYVx1MDgwMC1cdTA4MmRcdTA4NDAtXHUwODVi
XHUwOGEwXHUwOGEyLVx1MDhhY1x1MDhlNC1cdTA4ZmVcdTA5MDAtXHUwOTYzXHUwOTY2LVx1MDk2
Zlx1MDk3MS1cdTA5NzdcdTA5NzktXHUwOTdmXHUwOTgxLVx1MDk4M1x1MDk4NS1cdTA5OGNcdTA5
OGZcdTA5OTBcdTA5OTMtXHUwOWE4XHUwOWFhLVx1MDliMFx1MDliMlx1MDliNi1cdTA5YjlcdTA5
YmMtXHUwOWM0XHUwOWM3XHUwOWM4XHUwOWNiLVx1MDljZVx1MDlkN1x1MDlkY1x1MDlkZFx1MDlk
Zi1cdTA5ZTNcdTA5ZTYtXHUwOWYxXHUwYTAxLVx1MGEwM1x1MGEwNS1cdTBhMGFcdTBhMGZcdTBh
MTBcdTBhMTMtXHUwYTI4XHUwYTJhLVx1MGEzMFx1MGEzMlx1MGEzM1x1MGEzNVx1MGEzNlx1MGEz
OFx1MGEzOVx1MGEzY1x1MGEzZS1cdTBhNDJcdTBhNDdcdTBhNDhcdTBhNGItXHUwYTRkXHUwYTUx
XHUwYTU5LVx1MGE1Y1x1MGE1ZVx1MGE2Ni1cdTBhNzVcdTBhODEtXHUwYTgzXHUwYTg1LVx1MGE4
ZFx1MGE4Zi1cdTBhOTFcdTBhOTMtXHUwYWE4XHUwYWFhLVx1MGFiMFx1MGFiMlx1MGFiM1x1MGFi
NS1cdTBhYjlcdTBhYmMtXHUwYWM1XHUwYWM3LVx1MGFjOVx1MGFjYi1cdTBhY2RcdTBhZDBcdTBh
ZTAtXHUwYWUzXHUwYWU2LVx1MGFlZlx1MGIwMS1cdTBiMDNcdTBiMDUtXHUwYjBjXHUwYjBmXHUw
YjEwXHUwYjEzLVx1MGIyOFx1MGIyYS1cdTBiMzBcdTBiMzJcdTBiMzNcdTBiMzUtXHUwYjM5XHUw
YjNjLVx1MGI0NFx1MGI0N1x1MGI0OFx1MGI0Yi1cdTBiNGRcdTBiNTZcdTBiNTdcdTBiNWNcdTBi
NWRcdTBiNWYtXHUwYjYzXHUwYjY2LVx1MGI2Zlx1MGI3MVx1MGI4Mlx1MGI4M1x1MGI4NS1cdTBi
OGFcdTBiOGUtXHUwYjkwXHUwYjkyLVx1MGI5NVx1MGI5OVx1MGI5YVx1MGI5Y1x1MGI5ZVx1MGI5
Zlx1MGJhM1x1MGJhNFx1MGJhOC1cdTBiYWFcdTBiYWUtXHUwYmI5XHUwYmJlLVx1MGJjMlx1MGJj
Ni1cdTBiYzhcdTBiY2EtXHUwYmNkXHUwYmQwXHUwYmQ3XHUwYmU2LVx1MGJlZlx1MGMwMS1cdTBj
MDNcdTBjMDUtXHUwYzBjXHUwYzBlLVx1MGMxMFx1MGMxMi1cdTBjMjhcdTBjMmEtXHUwYzMzXHUw
YzM1LVx1MGMzOVx1MGMzZC1cdTBjNDRcdTBjNDYtXHUwYzQ4XHUwYzRhLVx1MGM0ZFx1MGM1NVx1
MGM1Nlx1MGM1OFx1MGM1OVx1MGM2MC1cdTBjNjNcdTBjNjYtXHUwYzZmXHUwYzgyXHUwYzgzXHUw
Yzg1LVx1MGM4Y1x1MGM4ZS1cdTBjOTBcdTBjOTItXHUwY2E4XHUwY2FhLVx1MGNiM1x1MGNiNS1c
dTBjYjlcdTBjYmMtXHUwY2M0XHUwY2M2LVx1MGNjOFx1MGNjYS1cdTBjY2RcdTBjZDVcdTBjZDZc
dTBjZGVcdTBjZTAtXHUwY2UzXHUwY2U2LVx1MGNlZlx1MGNmMVx1MGNmMlx1MGQwMlx1MGQwM1x1
MGQwNS1cdTBkMGNcdTBkMGUtXHUwZDEwXHUwZDEyLVx1MGQzYVx1MGQzZC1cdTBkNDRcdTBkNDYt
XHUwZDQ4XHUwZDRhLVx1MGQ0ZVx1MGQ1N1x1MGQ2MC1cdTBkNjNcdTBkNjYtXHUwZDZmXHUwZDdh
LVx1MGQ3Zlx1MGQ4Mlx1MGQ4M1x1MGQ4NS1cdTBkOTZcdTBkOWEtXHUwZGIxXHUwZGIzLVx1MGRi
Ylx1MGRiZFx1MGRjMC1cdTBkYzZcdTBkY2FcdTBkY2YtXHUwZGQ0XHUwZGQ2XHUwZGQ4LVx1MGRk
Zlx1MGRmMlx1MGRmM1x1MGUwMS1cdTBlM2FcdTBlNDAtXHUwZTRlXHUwZTUwLVx1MGU1OVx1MGU4
MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGU4YVx1MGU4ZFx1MGU5NC1cdTBlOTdcdTBlOTkt
XHUwZTlmXHUwZWExLVx1MGVhM1x1MGVhNVx1MGVhN1x1MGVhYVx1MGVhYlx1MGVhZC1cdTBlYjlc
dTBlYmItXHUwZWJkXHUwZWMwLVx1MGVjNFx1MGVjNlx1MGVjOC1cdTBlY2RcdTBlZDAtXHUwZWQ5
XHUwZWRjLVx1MGVkZlx1MGYwMFx1MGYxOFx1MGYxOVx1MGYyMC1cdTBmMjlcdTBmMzVcdTBmMzdc
dTBmMzlcdTBmM2UtXHUwZjQ3XHUwZjQ5LVx1MGY2Y1x1MGY3MS1cdTBmODRcdTBmODYtXHUwZjk3
XHUwZjk5LVx1MGZiY1x1MGZjNlx1MTAwMC1cdTEwNDlcdTEwNTAtXHUxMDlkXHUxMGEwLVx1MTBj
NVx1MTBjN1x1MTBjZFx1MTBkMC1cdTEwZmFcdTEwZmMtXHUxMjQ4XHUxMjRhLVx1MTI0ZFx1MTI1
MC1cdTEyNTZcdTEyNThcdTEyNWEtXHUxMjVkXHUxMjYwLVx1MTI4OFx1MTI4YS1cdTEyOGRcdTEy
OTAtXHUxMmIwXHUxMmIyLVx1MTJiNVx1MTJiOC1cdTEyYmVcdTEyYzBcdTEyYzItXHUxMmM1XHUx
MmM4LVx1MTJkNlx1MTJkOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1YVx1MTM1ZC1c
dTEzNWZcdTEzODAtXHUxMzhmXHUxM2EwLVx1MTNmNFx1MTQwMS1cdTE2NmNcdTE2NmYtXHUxNjdm
XHUxNjgxLVx1MTY5YVx1MTZhMC1cdTE2ZWFcdTE2ZWUtXHUxNmYwXHUxNzAwLVx1MTcwY1x1MTcw
ZS1cdTE3MTRcdTE3MjAtXHUxNzM0XHUxNzQwLVx1MTc1M1x1MTc2MC1cdTE3NmNcdTE3NmUtXHUx
NzcwXHUxNzcyXHUxNzczXHUxNzgwLVx1MTdkM1x1MTdkN1x1MTdkY1x1MTdkZFx1MTdlMC1cdTE3
ZTlcdTE4MGItXHUxODBkXHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOGFhXHUx
OGIwLVx1MThmNVx1MTkwMC1cdTE5MWNcdTE5MjAtXHUxOTJiXHUxOTMwLVx1MTkzYlx1MTk0Ni1c
dTE5NmRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlhYlx1MTliMC1cdTE5YzlcdTE5ZDAtXHUxOWQ5
XHUxYTAwLVx1MWExYlx1MWEyMC1cdTFhNWVcdTFhNjAtXHUxYTdjXHUxYTdmLVx1MWE4OVx1MWE5
MC1cdTFhOTlcdTFhYTdcdTFiMDAtXHUxYjRiXHUxYjUwLVx1MWI1OVx1MWI2Yi1cdTFiNzNcdTFi
ODAtXHUxYmYzXHUxYzAwLVx1MWMzN1x1MWM0MC1cdTFjNDlcdTFjNGQtXHUxYzdkXHUxY2QwLVx1
MWNkMlx1MWNkNC1cdTFjZjZcdTFkMDAtXHUxZGU2XHUxZGZjLVx1MWYxNVx1MWYxOC1cdTFmMWRc
dTFmMjAtXHUxZjQ1XHUxZjQ4LVx1MWY0ZFx1MWY1MC1cdTFmNTdcdTFmNTlcdTFmNWJcdTFmNWRc
dTFmNWYtXHUxZjdkXHUxZjgwLVx1MWZiNFx1MWZiNi1cdTFmYmNcdTFmYmVcdTFmYzItXHUxZmM0
XHUxZmM2LVx1MWZjY1x1MWZkMC1cdTFmZDNcdTFmZDYtXHUxZmRiXHUxZmUwLVx1MWZlY1x1MWZm
Mi1cdTFmZjRcdTFmZjYtXHUxZmZjXHUyMDBjXHUyMDBkXHUyMDNmXHUyMDQwXHUyMDU0XHUyMDcx
XHUyMDdmXHUyMDkwLVx1MjA5Y1x1MjBkMC1cdTIwZGNcdTIwZTFcdTIwZTUtXHUyMGYwXHUyMTAy
XHUyMTA3XHUyMTBhLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMWRcdTIxMjRcdTIxMjZcdTIxMjhc
dTIxMmEtXHUyMTJkXHUyMTJmLVx1MjEzOVx1MjEzYy1cdTIxM2ZcdTIxNDUtXHUyMTQ5XHUyMTRl
XHUyMTYwLVx1MjE4OFx1MmMwMC1cdTJjMmVcdTJjMzAtXHUyYzVlXHUyYzYwLVx1MmNlNFx1MmNl
Yi1cdTJjZjNcdTJkMDAtXHUyZDI1XHUyZDI3XHUyZDJkXHUyZDMwLVx1MmQ2N1x1MmQ2Zlx1MmQ3
Zi1cdTJkOTZcdTJkYTAtXHUyZGE2XHUyZGE4LVx1MmRhZVx1MmRiMC1cdTJkYjZcdTJkYjgtXHUy
ZGJlXHUyZGMwLVx1MmRjNlx1MmRjOC1cdTJkY2VcdTJkZDAtXHUyZGQ2XHUyZGQ4LVx1MmRkZVx1
MmRlMC1cdTJkZmZcdTJlMmZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyZlx1MzAzMS1cdTMwMzVc
dTMwMzgtXHUzMDNjXHUzMDQxLVx1MzA5Nlx1MzA5OVx1MzA5YVx1MzA5ZC1cdTMwOWZcdTMwYTEt
XHUzMGZhXHUzMGZjLVx1MzBmZlx1MzEwNS1cdTMxMmRcdTMxMzEtXHUzMThlXHUzMWEwLVx1MzFi
YVx1MzFmMC1cdTMxZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YTAwMC1cdWE0OGNcdWE0
ZDAtXHVhNGZkXHVhNTAwLVx1YTYwY1x1YTYxMC1cdWE2MmJcdWE2NDAtXHVhNjZmXHVhNjc0LVx1
YTY3ZFx1YTY3Zi1cdWE2OTdcdWE2OWYtXHVhNmYxXHVhNzE3LVx1YTcxZlx1YTcyMi1cdWE3ODhc
dWE3OGItXHVhNzhlXHVhNzkwLVx1YTc5M1x1YTdhMC1cdWE3YWFcdWE3ZjgtXHVhODI3XHVhODQw
LVx1YTg3M1x1YTg4MC1cdWE4YzRcdWE4ZDAtXHVhOGQ5XHVhOGUwLVx1YThmN1x1YThmYlx1YTkw
MC1cdWE5MmRcdWE5MzAtXHVhOTUzXHVhOTYwLVx1YTk3Y1x1YTk4MC1cdWE5YzBcdWE5Y2YtXHVh
OWQ5XHVhYTAwLVx1YWEzNlx1YWE0MC1cdWFhNGRcdWFhNTAtXHVhYTU5XHVhYTYwLVx1YWE3Nlx1
YWE3YVx1YWE3Ylx1YWE4MC1cdWFhYzJcdWFhZGItXHVhYWRkXHVhYWUwLVx1YWFlZlx1YWFmMi1c
dWFhZjZcdWFiMDEtXHVhYjA2XHVhYjA5LVx1YWIwZVx1YWIxMS1cdWFiMTZcdWFiMjAtXHVhYjI2
XHVhYjI4LVx1YWIyZVx1YWJjMC1cdWFiZWFcdWFiZWNcdWFiZWRcdWFiZjAtXHVhYmY5XHVhYzAw
LVx1ZDdhM1x1ZDdiMC1cdWQ3YzZcdWQ3Y2ItXHVkN2ZiXHVmOTAwLVx1ZmE2ZFx1ZmE3MC1cdWZh
ZDlcdWZiMDAtXHVmYjA2XHVmYjEzLVx1ZmIxN1x1ZmIxZC1cdWZiMjhcdWZiMmEtXHVmYjM2XHVm
YjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0MFx1ZmI0MVx1ZmI0M1x1ZmI0NFx1ZmI0Ni1cdWZiYjFcdWZi
ZDMtXHVmZDNkXHVmZDUwLVx1ZmQ4Zlx1ZmQ5Mi1cdWZkYzdcdWZkZjAtXHVmZGZiXHVmZTAwLVx1
ZmUwZlx1ZmUyMC1cdWZlMjZcdWZlMzNcdWZlMzRcdWZlNGQtXHVmZTRmXHVmZTcwLVx1ZmU3NFx1
ZmU3Ni1cdWZlZmNcdWZmMTAtXHVmZjE5XHVmZjIxLVx1ZmYzYVx1ZmYzZlx1ZmY0MS1cdWZmNWFc
dWZmNjYtXHVmZmJlXHVmZmMyLVx1ZmZjN1x1ZmZjYS1cdWZmY2ZcdWZmZDItXHVmZmQ3XHVmZmRh
LVx1ZmZkY10nKQorICAgICAgICAvLyBFQ01BU2NyaXB0IDYvVW5pY29kZSB2Ny4wLjAgTm9uQXNj
aWlJZGVudGlmaWVyU3RhcnQ6CisgICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiAvW1x4
QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJF
MC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3
RFx1MDM3Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNG
NVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1
ODdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2
NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZG
Rlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdG
NFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4
XHUwOEEwLVx1MDhCMlx1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcx
LVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlC
MFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUx
XHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEt
XHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTU5LVx1MEE1Q1x1
MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThc
dTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1
MEFFMVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1
MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUw
QjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUw
QjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBC
QjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUw
QzM5XHUwQzNEXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBD
OTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBD
RTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBE
M0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5
QS1cdTBEQjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBF
MzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThB
XHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3
XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRc
dTBFQzZcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgt
XHUwRjhDXHUxMDAwLVx1MTAyQVx1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYx
XHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwQTAtXHUxMEM1
XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUw
LVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5
MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEy
QzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1
MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFc
dTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXHUxNzIw
LVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3
QjNcdTE3RDdcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4
RjVcdTE5MDAtXHUxOTFFXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUx
OUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1
MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXHUxQkJBLVx1MUJFNVx1MUMwMC1c
dTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0Yx
XHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIw
LVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVG
LVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZD
Ni1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUx
RkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIx
MEEtXHUyMTEzXHUyMTE1XHUyMTE4LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIx
MzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUy
QzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUy
RDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUy
REEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1c
dTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTMwMDUtXHUzMDA3
XHUzMDIxLVx1MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5
Qi1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUz
MThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1
QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFc
dUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFG
XHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBN0FEXHVBN0IwXHVBN0IxXHVBN0Y3
LVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4
NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQlx1QTkwQS1cdUE5MjVcdUE5MzAtXHVB
OTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUE5RTAtXHVBOUU0XHVBOUU2LVx1
QTlFRlx1QTlGQS1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJc
dUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1c
dUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRc
dUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4
LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjVGXHVBQjY0XHVBQjY1XHVBQkMwLVx1QUJF
Mlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZB
NzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVG
QjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZC
NDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1
RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFc
dUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRB
LVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1
REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQ0MC1c
dURENzRcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REYwMC1cdURGMUZcdURGMzAtXHVERjRB
XHVERjUwLVx1REY3NVx1REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRlx1REZE
MS1cdURGRDVdfFx1RDgwMVtcdURDMDAtXHVEQzlEXHVERDAwLVx1REQyN1x1REQzMC1cdURENjNc
dURFMDAtXHVERjM2XHVERjQwLVx1REY1NVx1REY2MC1cdURGNjddfFx1RDgwMltcdURDMDAtXHVE
QzA1XHVEQzA4XHVEQzBBLVx1REMzNVx1REMzN1x1REMzOFx1REMzQ1x1REMzRi1cdURDNTVcdURD
NjAtXHVEQzc2XHVEQzgwLVx1REM5RVx1REQwMC1cdUREMTVcdUREMjAtXHVERDM5XHVERDgwLVx1
RERCN1x1RERCRVx1RERCRlx1REUwMFx1REUxMC1cdURFMTNcdURFMTUtXHVERTE3XHVERTE5LVx1
REUzM1x1REU2MC1cdURFN0NcdURFODAtXHVERTlDXHVERUMwLVx1REVDN1x1REVDOS1cdURFRTRc
dURGMDAtXHVERjM1XHVERjQwLVx1REY1NVx1REY2MC1cdURGNzJcdURGODAtXHVERjkxXXxcdUQ4
MDNbXHVEQzAwLVx1REM0OF18XHVEODA0W1x1REMwMy1cdURDMzdcdURDODMtXHVEQ0FGXHVEQ0Qw
LVx1RENFOFx1REQwMy1cdUREMjZcdURENTAtXHVERDcyXHVERDc2XHVERDgzLVx1RERCMlx1RERD
MS1cdUREQzRcdUREREFcdURFMDAtXHVERTExXHVERTEzLVx1REUyQlx1REVCMC1cdURFREVcdURG
MDUtXHVERjBDXHVERjBGXHVERjEwXHVERjEzLVx1REYyOFx1REYyQS1cdURGMzBcdURGMzJcdURG
MzNcdURGMzUtXHVERjM5XHVERjNEXHVERjVELVx1REY2MV18XHVEODA1W1x1REM4MC1cdURDQUZc
dURDQzRcdURDQzVcdURDQzdcdUREODAtXHVEREFFXHVERTAwLVx1REUyRlx1REU0NFx1REU4MC1c
dURFQUFdfFx1RDgwNltcdURDQTAtXHVEQ0RGXHVEQ0ZGXHVERUMwLVx1REVGOF18XHVEODA4W1x1
REMwMC1cdURGOThdfFx1RDgwOVtcdURDMDAtXHVEQzZFXXxbXHVEODBDXHVEODQwLVx1RDg2OFx1
RDg2QS1cdUQ4NkNdW1x1REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJFXXxcdUQ4MUFb
XHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFRDAtXHVERUVEXHVERjAwLVx1REYyRlx1REY0
MC1cdURGNDNcdURGNjMtXHVERjc3XHVERjdELVx1REY4Rl18XHVEODFCW1x1REYwMC1cdURGNDRc
dURGNTBcdURGOTMtXHVERjlGXXxcdUQ4MkNbXHVEQzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1
REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OV18XHVEODM1W1x1REMw
MC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5
LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQw
Ny1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVE
RDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERUE1XHVERUE4LVx1
REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRc
dURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFB
LVx1REZDMlx1REZDNC1cdURGQ0JdfFx1RDgzQVtcdURDMDAtXHVEQ0M0XXxcdUQ4M0JbXHVERTAw
LVx1REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMy
XHVERTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1c
dURFNEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURF
NjFcdURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURF
NzktXHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVE
RUE1LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZG
Rl18XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMx
RF18XHVEODdFW1x1REMwMC1cdURFMURdLywKKworICAgICAgICAvLyBFQ01BU2NyaXB0IDYvVW5p
Y29kZSB2Ny4wLjAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDoKKyAgICAgICAgTm9uQXNjaWlJZGVu
dGlmaWVyUGFydDogL1tceEFBXHhCNVx4QjdceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAy
QzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDMwMC1cdTAzNzRcdTAz
NzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzdGXHUwMzg2LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAz
QTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OEEtXHUwNTJGXHUw
NTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMxXHUw
NUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MTAtXHUw
NjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRDXHUwNkRGLVx1MDZFOFx1
MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdCMVx1MDdDMC1cdTA3RjVc
dTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMC1cdTA4QjJcdTA4RTQtXHUwOTYz
XHUwOTY2LVx1MDk2Rlx1MDk3MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkz
LVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlD
N1x1MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2
LVx1MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEy
OFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0Nc
dTBBM0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNc
dTBBNUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkx
XHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJD
LVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFF
Ni1cdTBBRUZcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBC
MjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBC
NDdcdTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2
M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5
MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRc
dTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNB
LVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDAtXHUwQzAzXHUwQzA1LVx1MEMw
Q1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzOVx1MEMzRC1cdTBDNDRcdTBD
NDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NVx1MEM1Nlx1MEM1OFx1MEM1OVx1MEM2MC1cdTBD
NjNcdTBDNjYtXHUwQzZGXHUwQzgxLVx1MEM4M1x1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUw
QzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JDLVx1MENDNFx1MENDNi1c
dTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1MENFM1x1MENFNi1c
dTBDRUZcdTBDRjFcdTBDRjJcdTBEMDEtXHUwRDAzXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBc
dTBEMTItXHUwRDNBXHUwRDNELVx1MEQ0NFx1MEQ0Ni1cdTBENDhcdTBENEEtXHUwRDRFXHUwRDU3
XHUwRDYwLVx1MEQ2M1x1MEQ2Ni1cdTBENkZcdTBEN0EtXHUwRDdGXHUwRDgyXHUwRDgzXHUwRDg1
LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MERD
QVx1MERDRi1cdTBERDRcdTBERDZcdTBERDgtXHUwRERGXHUwREU2LVx1MERFRlx1MERGMlx1MERG
M1x1MEUwMS1cdTBFM0FcdTBFNDAtXHUwRTRFXHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4
NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUEx
LVx1MEVBM1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjlcdTBFQkItXHUwRUJE
XHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVDOC1cdTBFQ0RcdTBFRDAtXHUwRUQ5XHUwRURDLVx1MEVE
Rlx1MEYwMFx1MEYxOFx1MEYxOVx1MEYyMC1cdTBGMjlcdTBGMzVcdTBGMzdcdTBGMzlcdTBGM0Ut
XHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY3MS1cdTBGODRcdTBGODYtXHUwRjk3XHUwRjk5LVx1MEZC
Q1x1MEZDNlx1MTAwMC1cdTEwNDlcdTEwNTAtXHUxMDlEXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBD
RFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEy
NThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUx
MkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1
MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM1RC1cdTEzNUZcdTEzNjkt
XHUxMzcxXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3
Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MENcdTE3
MEUtXHUxNzE0XHUxNzIwLVx1MTczNFx1MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZDXHUxNzZFLVx1
MTc3MFx1MTc3Mlx1MTc3M1x1MTc4MC1cdTE3RDNcdTE3RDdcdTE3RENcdTE3RERcdTE3RTAtXHUx
N0U5XHUxODBCLVx1MTgwRFx1MTgxMC1cdTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBQVx1
MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTIwLVx1MTkyQlx1MTkzMC1cdTE5M0JcdTE5NDYt
XHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxOUQwLVx1MTlE
QVx1MUEwMC1cdTFBMUJcdTFBMjAtXHUxQTVFXHUxQTYwLVx1MUE3Q1x1MUE3Ri1cdTFBODlcdTFB
OTAtXHUxQTk5XHUxQUE3XHUxQUIwLVx1MUFCRFx1MUIwMC1cdTFCNEJcdTFCNTAtXHUxQjU5XHUx
QjZCLVx1MUI3M1x1MUI4MC1cdTFCRjNcdTFDMDAtXHUxQzM3XHUxQzQwLVx1MUM0OVx1MUM0RC1c
dTFDN0RcdTFDRDAtXHUxQ0QyXHUxQ0Q0LVx1MUNGNlx1MUNGOFx1MUNGOVx1MUQwMC1cdTFERjVc
dTFERkMtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUw
LVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2
LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZE
Ni1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwMENcdTIw
MERcdTIwM0ZcdTIwNDBcdTIwNTRcdTIwNzFcdTIwN0ZcdTIwOTAtXHUyMDlDXHUyMEQwLVx1MjBE
Q1x1MjBFMVx1MjBFNS1cdTIwRjBcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE4
LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1
LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2
MC1cdTJDRTRcdTJDRUItXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJE
NjdcdTJENkZcdTJEN0YtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUy
REI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1
MkREOC1cdTJEREVcdTJERTAtXHUyREZGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMkZcdTMwMzEt
XHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZcdTMwOTktXHUzMDlGXHUzMEExLVx1MzBG
QVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMx
RjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVBNDhDXHVBNEQwLVx1
QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2Rlx1QTY3NC1cdUE2N0Rc
dUE2N0YtXHVBNjlEXHVBNjlGLVx1QTZGMVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhC
LVx1QTc4RVx1QTc5MC1cdUE3QURcdUE3QjBcdUE3QjFcdUE3RjctXHVBODI3XHVBODQwLVx1QTg3
M1x1QTg4MC1cdUE4QzRcdUE4RDAtXHVBOEQ5XHVBOEUwLVx1QThGN1x1QThGQlx1QTkwMC1cdUE5
MkRcdUE5MzAtXHVBOTUzXHVBOTYwLVx1QTk3Q1x1QTk4MC1cdUE5QzBcdUE5Q0YtXHVBOUQ5XHVB
OUUwLVx1QTlGRVx1QUEwMC1cdUFBMzZcdUFBNDAtXHVBQTREXHVBQTUwLVx1QUE1OVx1QUE2MC1c
dUFBNzZcdUFBN0EtXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUZcdUFBRjItXHVBQUY2
XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIy
OC1cdUFCMkVcdUFCMzAtXHVBQjVBXHVBQjVDLVx1QUI1Rlx1QUI2NFx1QUI2NVx1QUJDMC1cdUFC
RUFcdUFCRUNcdUFCRURcdUFCRjAtXHVBQkY5XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3
Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1
RkIxN1x1RkIxRC1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1
RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1
RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTAwLVx1RkUwRlx1RkUyMC1cdUZFMkRcdUZFMzNc
dUZFMzRcdUZFNEQtXHVGRTRGXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMTAtXHVGRjE5
XHVGRjIxLVx1RkYzQVx1RkYzRlx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZD
N1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1c
dURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERc
dURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQ0MC1cdURENzRcdURERkRcdURFODAtXHVERTlD
XHVERUEwLVx1REVEMFx1REVFMFx1REYwMC1cdURGMUZcdURGMzAtXHVERjRBXHVERjUwLVx1REY3
QVx1REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRlx1REZEMS1cdURGRDVdfFx1
RDgwMVtcdURDMDAtXHVEQzlEXHVEQ0EwLVx1RENBOVx1REQwMC1cdUREMjdcdUREMzAtXHVERDYz
XHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XXxcdUQ4MDJbXHVEQzAwLVx1
REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVE
QzYwLVx1REM3Nlx1REM4MC1cdURDOUVcdUREMDAtXHVERDE1XHVERDIwLVx1REQzOVx1REQ4MC1c
dUREQjdcdUREQkVcdUREQkZcdURFMDAtXHVERTAzXHVERTA1XHVERTA2XHVERTBDLVx1REUxM1x1
REUxNS1cdURFMTdcdURFMTktXHVERTMzXHVERTM4LVx1REUzQVx1REUzRlx1REU2MC1cdURFN0Nc
dURFODAtXHVERTlDXHVERUMwLVx1REVDN1x1REVDOS1cdURFRTZcdURGMDAtXHVERjM1XHVERjQw
LVx1REY1NVx1REY2MC1cdURGNzJcdURGODAtXHVERjkxXXxcdUQ4MDNbXHVEQzAwLVx1REM0OF18
XHVEODA0W1x1REMwMC1cdURDNDZcdURDNjYtXHVEQzZGXHVEQzdGLVx1RENCQVx1RENEMC1cdURD
RThcdURDRjAtXHVEQ0Y5XHVERDAwLVx1REQzNFx1REQzNi1cdUREM0ZcdURENTAtXHVERDczXHVE
RDc2XHVERDgwLVx1RERDNFx1REREMC1cdUREREFcdURFMDAtXHVERTExXHVERTEzLVx1REUzN1x1
REVCMC1cdURFRUFcdURFRjAtXHVERUY5XHVERjAxLVx1REYwM1x1REYwNS1cdURGMENcdURGMEZc
dURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlc
dURGM0MtXHVERjQ0XHVERjQ3XHVERjQ4XHVERjRCLVx1REY0RFx1REY1N1x1REY1RC1cdURGNjNc
dURGNjYtXHVERjZDXHVERjcwLVx1REY3NF18XHVEODA1W1x1REM4MC1cdURDQzVcdURDQzdcdURD
RDAtXHVEQ0Q5XHVERDgwLVx1RERCNVx1RERCOC1cdUREQzBcdURFMDAtXHVERTQwXHVERTQ0XHVE
RTUwLVx1REU1OVx1REU4MC1cdURFQjdcdURFQzAtXHVERUM5XXxcdUQ4MDZbXHVEQ0EwLVx1RENF
OVx1RENGRlx1REVDMC1cdURFRjhdfFx1RDgwOFtcdURDMDAtXHVERjk4XXxcdUQ4MDlbXHVEQzAw
LVx1REM2RV18W1x1RDgwQ1x1RDg0MC1cdUQ4NjhcdUQ4NkEtXHVEODZDXVtcdURDMDAtXHVERkZG
XXxcdUQ4MERbXHVEQzAwLVx1REMyRV18XHVEODFBW1x1REMwMC1cdURFMzhcdURFNDAtXHVERTVF
XHVERTYwLVx1REU2OVx1REVEMC1cdURFRURcdURFRjAtXHVERUY0XHVERjAwLVx1REYzNlx1REY0
MC1cdURGNDNcdURGNTAtXHVERjU5XHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltc
dURGMDAtXHVERjQ0XHVERjUwLVx1REY3RVx1REY4Ri1cdURGOUZdfFx1RDgyQ1tcdURDMDBcdURD
MDFdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAt
XHVEQzk5XHVEQzlEXHVEQzlFXXxcdUQ4MzRbXHVERDY1LVx1REQ2OVx1REQ2RC1cdURENzJcdURE
N0ItXHVERDgyXHVERDg1LVx1REQ4Qlx1RERBQS1cdUREQURcdURFNDItXHVERTQ0XXxcdUQ4MzVb
XHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZcdURDQTJcdURDQTVcdURDQTZc
dURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1
XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQz
Qi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1REQ1MFx1REQ1Mi1cdURFQTVcdURF
QTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1
REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1REY4OFx1REY4QS1cdURGQThc
dURGQUEtXHVERkMyXHVERkM0LVx1REZDQlx1REZDRS1cdURGRkZdfFx1RDgzQVtcdURDMDAtXHVE
Q0M0XHVEQ0QwLVx1RENENl18XHVEODNCW1x1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIx
XHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURFM0Jc
dURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQtXHVERTRGXHVERTUxXHVERTUyXHVERTU0XHVE
RTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2
QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURF
ODlcdURFOEItXHVERTlCXHVERUExLVx1REVBM1x1REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxc
dUQ4NjlbXHVEQzAwLVx1REVENlx1REYwMC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVERjM0XHVE
RjQwLVx1REZGRl18XHVEODZFW1x1REMwMC1cdURDMURdfFx1RDg3RVtcdURDMDAtXHVERTFEXXxc
dURCNDBbXHVERDAwLVx1RERFRl0vCiAgICAgfTsKIAogICAgIC8vIEVuc3VyZSB0aGUgY29uZGl0
aW9uIGlzIHRydWUsIG90aGVyd2lzZSB0aHJvdyBhbiBlcnJvci4KQEAgLTI1NCwzMyArMjQ2LDgg
QEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGZ1bmN0aW9uIFN0cmluZ01hcCgpIHsKLSAgICAg
ICAgdGhpcy4kZGF0YSA9IHt9OwotICAgIH0KLQotICAgIFN0cmluZ01hcC5wcm90b3R5cGUuZ2V0
ID0gZnVuY3Rpb24gKGtleSkgewotICAgICAgICBrZXkgPSAnJCcgKyBrZXk7Ci0gICAgICAgIHJl
dHVybiB0aGlzLiRkYXRhW2tleV07Ci0gICAgfTsKLQotICAgIFN0cmluZ01hcC5wcm90b3R5cGUu
c2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKLSAgICAgICAga2V5ID0gJyQnICsga2V5Owot
ICAgICAgICB0aGlzLiRkYXRhW2tleV0gPSB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgfTsKLQotICAgIFN0cmluZ01hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkgewot
ICAgICAgICBrZXkgPSAnJCcgKyBrZXk7Ci0gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5LmNhbGwodGhpcy4kZGF0YSwga2V5KTsKLSAgICB9OwotCi0gICAgU3Ry
aW5nTWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICAgIGtleSA9
ICckJyArIGtleTsKLSAgICAgICAgcmV0dXJuIGRlbGV0ZSB0aGlzLiRkYXRhW2tleV07Ci0gICAg
fTsKLQogICAgIGZ1bmN0aW9uIGlzRGVjaW1hbERpZ2l0KGNoKSB7Ci0gICAgICAgIHJldHVybiAo
Y2ggPj0gNDggJiYgY2ggPD0gNTcpOyAgIC8vIDAuLjkKKyAgICAgICAgcmV0dXJuIChjaCA+PSAw
eDMwICYmIGNoIDw9IDB4MzkpOyAgIC8vIDAuLjkKICAgICB9CiAKICAgICBmdW5jdGlvbiBpc0hl
eERpZ2l0KGNoKSB7CkBAIC0yOTEsNTEgKzI1OCw3MyBAQAogICAgICAgICByZXR1cm4gJzAxMjM0
NTY3Jy5pbmRleE9mKGNoKSA+PSAwOwogICAgIH0KIAorICAgIGZ1bmN0aW9uIG9jdGFsVG9EZWNp
bWFsKGNoKSB7CisgICAgICAgIC8vIFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UKKyAg
ICAgICAgdmFyIG9jdGFsID0gKGNoICE9PSAnMCcpLCBjb2RlID0gJzAxMjM0NTY3Jy5pbmRleE9m
KGNoKTsKKworICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNPY3RhbERpZ2l0KHNvdXJj
ZVtpbmRleF0pKSB7CisgICAgICAgICAgICBvY3RhbCA9IHRydWU7CisgICAgICAgICAgICBjb2Rl
ID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2luZGV4KytdKTsKKworICAg
ICAgICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0cmluZyBzdGFydHMK
KyAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgMworICAgICAgICAgICAgaWYgKCcwMTIzJy5p
bmRleE9mKGNoKSA+PSAwICYmCisgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgbGVuZ3RoICYm
CisgICAgICAgICAgICAgICAgICAgIGlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAg
ICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihzb3VyY2Vb
aW5kZXgrK10pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIGNvZGU6IGNvZGUsCisgICAgICAgICAgICBvY3RhbDogb2N0YWwKKyAgICAg
ICAgfTsKKyAgICB9CiAKLSAgICAvLyA3LjIgV2hpdGUgU3BhY2UKKyAgICAvLyBFQ01BLTI2MiAx
MS4yIFdoaXRlIFNwYWNlCiAKICAgICBmdW5jdGlvbiBpc1doaXRlU3BhY2UoY2gpIHsKLSAgICAg
ICAgcmV0dXJuIChjaCA9PT0gMzIpIHx8ICAvLyBzcGFjZQotICAgICAgICAgICAgKGNoID09PSA5
KSB8fCAgICAgIC8vIHRhYgotICAgICAgICAgICAgKGNoID09PSAweEIpIHx8Ci0gICAgICAgICAg
ICAoY2ggPT09IDB4QykgfHwKLSAgICAgICAgICAgIChjaCA9PT0gMHhBMCkgfHwKLSAgICAgICAg
ICAgIChjaCA+PSAweDE2ODAgJiYgJ1x1MTY4MFx1MTgwRVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAw
M1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1
MzAwMFx1RkVGRicuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkgPiAwKTsKKyAgICAg
ICAgcmV0dXJuIChjaCA9PT0gMHgyMCkgfHwgKGNoID09PSAweDA5KSB8fCAoY2ggPT09IDB4MEIp
IHx8IChjaCA9PT0gMHgwQykgfHwgKGNoID09PSAweEEwKSB8fAorICAgICAgICAgICAgKGNoID49
IDB4MTY4MCAmJiBbMHgxNjgwLCAweDE4MEUsIDB4MjAwMCwgMHgyMDAxLCAweDIwMDIsIDB4MjAw
MywgMHgyMDA0LCAweDIwMDUsIDB4MjAwNiwgMHgyMDA3LCAweDIwMDgsIDB4MjAwOSwgMHgyMDBB
LCAweDIwMkYsIDB4MjA1RiwgMHgzMDAwLCAweEZFRkZdLmluZGV4T2YoY2gpID49IDApOwogICAg
IH0KIAotICAgIC8vIDcuMyBMaW5lIFRlcm1pbmF0b3JzCisgICAgLy8gRUNNQS0yNjIgMTEuMyBM
aW5lIFRlcm1pbmF0b3JzCiAKICAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7Ci0g
ICAgICAgIHJldHVybiAoY2ggPT09IDEwKSB8fCAoY2ggPT09IDEzKSB8fCAoY2ggPT09IDB4MjAy
OCkgfHwgKGNoID09PSAweDIwMjkpOworICAgICAgICByZXR1cm4gKGNoID09PSAweDBBKSB8fCAo
Y2ggPT09IDB4MEQpIHx8IChjaCA9PT0gMHgyMDI4KSB8fCAoY2ggPT09IDB4MjAyOSk7CiAgICAg
fQogCi0gICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzCisgICAgLy8g
RUNNQS0yNjIgMTEuNiBJZGVudGlmaWVyIE5hbWVzIGFuZCBJZGVudGlmaWVycworCisgICAgZnVu
Y3Rpb24gZnJvbUNvZGVQb2ludChjcCkgeworICAgICAgICByZXR1cm4gKGNwIDwgMHgxMDAwMCkg
PyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKSA6CisgICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJD
b2RlKDB4RDgwMCArICgoY3AgLSAweDEwMDAwKSA+PiAxMCkpICsKKyAgICAgICAgICAgIFN0cmlu
Zy5mcm9tQ2hhckNvZGUoMHhEQzAwICsgKChjcCAtIDB4MTAwMDApICYgMTAyMykpOworICAgIH0K
IAogICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNoKSB7Ci0gICAgICAgIHJldHVybiAo
Y2ggPT09IDM2KSB8fCAoY2ggPT09IDk1KSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJz
Y29yZSkKLSAgICAgICAgICAgIChjaCA+PSA2NSAmJiBjaCA8PSA5MCkgfHwgICAgICAgICAvLyBB
Li5aCi0gICAgICAgICAgICAoY2ggPj0gOTcgJiYgY2ggPD0gMTIyKSB8fCAgICAgICAgLy8gYS4u
egotICAgICAgICAgICAgKGNoID09PSA5MikgfHwgICAgICAgICAgICAgICAgICAgIC8vIFwgKGJh
Y2tzbGFzaCkKLSAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVu
dGlmaWVyU3RhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpOworICAgICAgICByZXR1
cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAkIChkb2xsYXIpIGFuZCBf
ICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSkgfHwg
ICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8
fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAg
ICAgICAgICAgICAgLy8gXCAoYmFja3NsYXNoKQorICAgICAgICAgICAgKChjaCA+PSAweDgwKSAm
JiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KGZyb21Db2RlUG9pbnQoY2gpKSk7
CiAgICAgfQogCiAgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydChjaCkgewotICAgICAgICBy
ZXR1cm4gKGNoID09PSAzNikgfHwgKGNoID09PSA5NSkgfHwgIC8vICQgKGRvbGxhcikgYW5kIF8g
KHVuZGVyc2NvcmUpCi0gICAgICAgICAgICAoY2ggPj0gNjUgJiYgY2ggPD0gOTApIHx8ICAgICAg
ICAgLy8gQS4uWgotICAgICAgICAgICAgKGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgICAgICAg
IC8vIGEuLnoKLSAgICAgICAgICAgIChjaCA+PSA0OCAmJiBjaCA8PSA1NykgfHwgICAgICAgICAv
LyAwLi45Ci0gICAgICAgICAgICAoY2ggPT09IDkyKSB8fCAgICAgICAgICAgICAgICAgICAgLy8g
XCAoYmFja3NsYXNoKQotICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2Np
aUlkZW50aWZpZXJQYXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTsKKyAgICAgICAg
cmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBh
bmQgXyAodW5kZXJzY29yZSkKKyAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEp
IHx8ICAgICAgICAgLy8gQS4uWgorICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3
QSkgfHwgICAgICAgICAvLyBhLi56CisgICAgICAgICAgICAoY2ggPj0gMHgzMCAmJiBjaCA8PSAw
eDM5KSB8fCAgICAgICAgIC8vIDAuLjkKKyAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAg
ICAgICAgICAgICAgICAgICAgLy8gXCAoYmFja3NsYXNoKQorICAgICAgICAgICAgKChjaCA+PSAw
eDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJQYXJ0LnRlc3QoZnJvbUNvZGVQb2ludChj
aCkpKTsKICAgICB9CiAKLSAgICAvLyA3LjYuMS4yIEZ1dHVyZSBSZXNlcnZlZCBXb3JkcworICAg
IC8vIEVDTUEtMjYyIDExLjYuMi4yIEZ1dHVyZSBSZXNlcnZlZCBXb3JkcwogCiAgICAgZnVuY3Rp
b24gaXNGdXR1cmVSZXNlcnZlZFdvcmQoaWQpIHsKICAgICAgICAgc3dpdGNoIChpZCkgewotICAg
ICAgICBjYXNlICdjbGFzcyc6CiAgICAgICAgIGNhc2UgJ2VudW0nOgogICAgICAgICBjYXNlICdl
eHBvcnQnOgotICAgICAgICBjYXNlICdleHRlbmRzJzoKICAgICAgICAgY2FzZSAnaW1wb3J0JzoK
ICAgICAgICAgY2FzZSAnc3VwZXInOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjUs
MTYgKzM1NCwxMiBAQAogICAgICAgICByZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2Fy
Z3VtZW50cyc7CiAgICAgfQogCi0gICAgLy8gNy42LjEuMSBLZXl3b3JkcworICAgIC8vIEVDTUEt
MjYyIDExLjYuMi4xIEtleXdvcmRzCiAKICAgICBmdW5jdGlvbiBpc0tleXdvcmQoaWQpIHsKLSAg
ICAgICAgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQpKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQogCiAgICAgICAgIC8vICdjb25zdCcgaXMg
c3BlY2lhbGl6ZWQgYXMgS2V5d29yZCBpbiBWOC4KLSAgICAgICAgLy8gJ3lpZWxkJyBpcyBvbmx5
IHRyZWF0ZWQgYXMgYSBrZXl3b3JkIGluIHN0cmljdCBtb2RlLgotICAgICAgICAvLyAnbGV0JyBp
cyBmb3IgY29tcGF0aWJsaXR5IHdpdGggU3BpZGVyTW9ua2V5IGFuZCBFUy5uZXh0LgorICAgICAg
ICAvLyAneWllbGQnIGFuZCAnbGV0JyBhcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBTcGlkZXJN
b25rZXkgYW5kIEVTLm5leHQuCiAgICAgICAgIC8vIFNvbWUgb3RoZXJzIGFyZSBmcm9tIGZ1dHVy
ZSByZXNlcnZlZCB3b3Jkcy4KIAogICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkgewpAQCAtMzg4
LDcgKzM3Myw3IEBACiAgICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9PT0g
J3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7CiAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAg
IHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09PSAn
Y2F0Y2gnKSB8fAotICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAn
Y29uc3QnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAn
Y29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8CiAgICAgICAgICAgICAgICAgKGlkID09PSAn
Y2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpOwogICAgICAgICBjYXNlIDY6CiAgICAgICAgICAg
ICByZXR1cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09
PSAnZGVsZXRlJykgfHwKQEAgLTQwNCwxOSArMzg5LDEzIEBACiAgICAgICAgIH0KICAgICB9CiAK
LSAgICAvLyA3LjQgQ29tbWVudHMKKyAgICAvLyBFQ01BLTI2MiAxMS40IENvbW1lbnRzCiAKICAg
ICBmdW5jdGlvbiBhZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsb2MpIHsKICAg
ICAgICAgdmFyIGNvbW1lbnQ7CisKICAgICAgICAgYXNzZXJ0KHR5cGVvZiBzdGFydCA9PT0gJ251
bWJlcicsICdDb21tZW50IG11c3QgaGF2ZSB2YWxpZCBwb3NpdGlvbicpOwogCi0gICAgICAgIC8v
IEJlY2F1c2UgdGhlIHdheSB0aGUgYWN0dWFsIHRva2VuIGlzIHNjYW5uZWQsIG9mdGVuIHRoZSBj
b21tZW50cwotICAgICAgICAvLyAoaWYgYW55KSBhcmUgc2tpcHBlZCB0d2ljZSBkdXJpbmcgdGhl
IGxleGljYWwgYW5hbHlzaXMuCi0gICAgICAgIC8vIFRodXMsIHdlIG5lZWQgdG8gc2tpcCBhZGRp
bmcgYSBjb21tZW50IGlmIHRoZSBjb21tZW50IGFycmF5IGFscmVhZHkKLSAgICAgICAgLy8gaGFu
ZGxlZCBpdC4KLSAgICAgICAgaWYgKHN0YXRlLmxhc3RDb21tZW50U3RhcnQgPj0gc3RhcnQpIHsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgICBzdGF0ZS5sYXN0Q29tbWVu
dFN0YXJ0ID0gc3RhcnQ7CiAKICAgICAgICAgY29tbWVudCA9IHsKQEAgLTQzNiwxNCArNDE1LDE0
IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmdW5jdGlvbiBza2lwU2luZ2xlTGluZUNvbW1l
bnQoKSB7CisgICAgZnVuY3Rpb24gc2tpcFNpbmdsZUxpbmVDb21tZW50KG9mZnNldCkgewogICAg
ICAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7CiAKLSAgICAgICAgc3RhcnQgPSBpbmRl
eCAtIDI7CisgICAgICAgIHN0YXJ0ID0gaW5kZXggLSBvZmZzZXQ7CiAgICAgICAgIGxvYyA9IHsK
ICAgICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwK
LSAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMgorICAgICAgICAg
ICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSBvZmZzZXQKICAgICAgICAgICAgIH0K
ICAgICAgICAgfTsKIApAQCAtNDUxLDggKzQzMCw5IEBACiAgICAgICAgICAgICBjaCA9IHNvdXJj
ZS5jaGFyQ29kZUF0KGluZGV4KTsKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgICAgICBp
ZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICBoYXNMaW5lVGVybWlu
YXRvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAyLCBpbmRleCAt
IDEpOworICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsg
b2Zmc2V0LCBpbmRleCAtIDEpOwogICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0gewogICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAxCkBAIC00NjksNyArNDQ5LDcgQEAK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChleHRyYS5jb21tZW50cykgewotICAgICAgICAgICAg
Y29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIDIsIGluZGV4KTsKKyAgICAgICAgICAgIGNv
bW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGluZGV4KTsKICAgICAgICAgICAg
IGxvYy5lbmQgPSB7CiAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKICAgICAgICAg
ICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CkBAIC00OTQsMTggKzQ3NCwxNiBAQAog
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgICAgIGNoID0gc291cmNl
LmNoYXJDb2RlQXQoaW5kZXgpOwogICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAxMyAmJiBzb3VyY2UuY2hhckNvZGVBdChp
bmRleCArIDEpID09PSAxMCkgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiBz
b3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDBBKSB7CiAgICAgICAgICAgICAgICAg
ICAgICsraW5kZXg7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhhc0xpbmVU
ZXJtaW5hdG9yID0gdHJ1ZTsKICAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7CiAgICAgICAg
ICAgICAgICAgKytpbmRleDsKICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKLSAg
ICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSA0MikgewotICAg
ICAgICAgICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRoICcqLycgKGNoYXIgIzQyLCBj
aGFyICM0NykuCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsg
MSkgPT09IDQ3KSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7CisgICAg
ICAgICAgICAgICAgLy8gQmxvY2sgY29tbWVudCBlbmRzIHdpdGggJyovJy4KKyAgICAgICAgICAg
ICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRikgewogICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICAgICAgICAgICAgICArK2luZGV4OwogICAg
ICAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKQEAgLTUyNCwzNyArNTAyLDcw
IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIC8vIFJhbiBvZmYg
dGhlIGVuZCBvZiB0aGUgZmlsZSAtIHRoZSB3aG9sZSB0aGluZyBpcyBhIGNvbW1lbnQKKyAgICAg
ICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7CisgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAg
ICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRl
eCAtIGxpbmVTdGFydAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGNvbW1lbnQgPSBzb3Vy
Y2Uuc2xpY2Uoc3RhcnQgKyAyLCBpbmRleCk7CisgICAgICAgICAgICBhZGRDb21tZW50KCdCbG9j
aycsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTsKKyAgICAgICAgfQorICAgICAgICB0b2xl
cmF0ZVVuZXhwZWN0ZWRUb2tlbigpOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIHNraXBDb21tZW50
KCkgewotICAgICAgICB2YXIgY2g7CisgICAgICAgIHZhciBjaCwgc3RhcnQ7CisgICAgICAgIGhh
c0xpbmVUZXJtaW5hdG9yID0gZmFsc2U7CiAKKyAgICAgICAgc3RhcnQgPSAoaW5kZXggPT09IDAp
OwogICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgICAgIGNoID0gc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwogCiAgICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlKGNo
KSkgewogICAgICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
TGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgaGFzTGluZVRlcm1pbmF0b3Ig
PSB0cnVlOwogICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKGNo
ID09PSAxMyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDEwKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgw
QSkgewogICAgICAgICAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7CiAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0g
aW5kZXg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSA0NykgeyAvLyA0NyBpcyAnLycK
KyAgICAgICAgICAgICAgICBzdGFydCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNo
ID09PSAweDJGKSB7IC8vIFUrMDAyRiBpcyAnLycKICAgICAgICAgICAgICAgICBjaCA9IHNvdXJj
ZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSA0Nykg
eworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikgewogICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OwogICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAg
ICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGNoID09PSA0MikgeyAgLy8gNDIgaXMgJyonCisgICAgICAgICAgICAgICAgICAgIHNraXBTaW5n
bGVMaW5lQ29tbWVudCgyKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsgIC8vIFUrMDAyQSBpcyAnKicK
ICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsKICAgICAgICAgICAgICAgICAgICAgc2tpcE11bHRpTGluZUNvbW1lbnQoKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGNoID09PSAweDJEKSB7IC8v
IFUrMDAyRCBpcyAnLScKKyAgICAgICAgICAgICAgICAvLyBVKzAwM0UgaXMgJz4nCisgICAgICAg
ICAgICAgICAgaWYgKChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDJEKSAmJiAo
c291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAyKSA9PT0gMHgzRSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gJy0tPicgaXMgYSBzaW5nbGUtbGluZSBjb21tZW50CisgICAgICAgICAgICAgICAg
ICAgIGluZGV4ICs9IDM7CisgICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVu
dCgzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDND
KSB7IC8vIFUrMDAzQyBpcyAnPCcKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlLnNsaWNlKGlu
ZGV4ICsgMSwgaW5kZXggKyA0KSA9PT0gJyEtLScpIHsKKyAgICAgICAgICAgICAgICAgICAgKytp
bmRleDsgLy8gYDxgCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAhYAorICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWAKKyAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsgLy8gYC1gCisgICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCg0KTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQpAQCAtNTc3LDE0ICs1ODgsMTQgQEAKICAgICB9CiAKICAgICBm
dW5jdGlvbiBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpIHsKLSAgICAgICAgdmFyIGNoLCBj
b2RlLCBjdTEsIGN1MjsKKyAgICAgICAgdmFyIGNoLCBjb2RlOwogCiAgICAgICAgIGNoID0gc291
cmNlW2luZGV4XTsKICAgICAgICAgY29kZSA9IDA7CiAKICAgICAgICAgLy8gQXQgbGVhc3QsIG9u
ZSBoZXggZGlnaXQgaXMgcmVxdWlyZWQuCiAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7Ci0gICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FM
Jyk7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICB9CiAKICAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CkBAIC01OTYsNTUgKzYwNyw3OCBAQAogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKGNvZGUgPiAweDEwRkZGRiB8fCBjaCAhPT0gJ30nKSB7Ci0g
ICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExF
R0FMJyk7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gVVRGLTE2IEVuY29kaW5nCi0gICAgICAgIGlmIChjb2RlIDw9IDB4RkZGRikg
ewotICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAgICAg
IHJldHVybiBmcm9tQ29kZVBvaW50KGNvZGUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvZGVQ
b2ludEF0KGkpIHsKKyAgICAgICAgdmFyIGNwLCBmaXJzdCwgc2Vjb25kOworCisgICAgICAgIGNw
ID0gc291cmNlLmNoYXJDb2RlQXQoaSk7CisgICAgICAgIGlmIChjcCA+PSAweEQ4MDAgJiYgY3Ag
PD0gMHhEQkZGKSB7CisgICAgICAgICAgICBzZWNvbmQgPSBzb3VyY2UuY2hhckNvZGVBdChpICsg
MSk7CisgICAgICAgICAgICBpZiAoc2Vjb25kID49IDB4REMwMCAmJiBzZWNvbmQgPD0gMHhERkZG
KSB7CisgICAgICAgICAgICAgICAgZmlyc3QgPSBjcDsKKyAgICAgICAgICAgICAgICBjcCA9IChm
aXJzdCAtIDB4RDgwMCkgKiAweDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgY3UxID0gKChjb2RlIC0gMHgxMDAwMCkgPj4g
MTApICsgMHhEODAwOwotICAgICAgICBjdTIgPSAoKGNvZGUgLSAweDEwMDAwKSAmIDEwMjMpICsg
MHhEQzAwOwotICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjdTEsIGN1Mik7CisK
KyAgICAgICAgcmV0dXJuIGNwOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIGdldEVzY2FwZWRJZGVu
dGlmaWVyKCkgewotICAgICAgICB2YXIgY2gsIGlkOworICAgIGZ1bmN0aW9uIGdldENvbXBsZXhJ
ZGVudGlmaWVyKCkgeworICAgICAgICB2YXIgY3AsIGNoLCBpZDsKIAotICAgICAgICBjaCA9IHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4KyspOwotICAgICAgICBpZCA9IFN0cmluZy5mcm9tQ2hhckNv
ZGUoY2gpOworICAgICAgICBjcCA9IGNvZGVQb2ludEF0KGluZGV4KTsKKyAgICAgICAgaWQgPSBm
cm9tQ29kZVBvaW50KGNwKTsKKyAgICAgICAgaW5kZXggKz0gaWQubGVuZ3RoOwogCi0gICAgICAg
IC8vICdcdScgKGNoYXIgIzkyLCBjaGFyICMxMTcpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0
ZXIuCi0gICAgICAgIGlmIChjaCA9PT0gOTIpIHsKLSAgICAgICAgICAgIGlmIChzb3VyY2UuY2hh
ckNvZGVBdChpbmRleCkgIT09IDExNykgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgLy8gJ1x1JyAo
VSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgIGlm
IChjcCA9PT0gMHg1QykgeworICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
KSAhPT0gMHg3NSkgeworICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgY2ggPSBzY2Fu
SGV4RXNjYXBlKCd1Jyk7Ci0gICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFp
c0lkZW50aWZpZXJTdGFydChjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgIHRo
cm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAg
ICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAneycpIHsKKyAgICAgICAgICAgICAgICArK2lu
ZGV4OworICAgICAgICAgICAgICAgIGNoID0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBl
KCd1Jyk7CisgICAgICAgICAgICAgICAgY3AgPSBjaC5jaGFyQ29kZUF0KDApOworICAgICAgICAg
ICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcgfHwgIWlzSWRlbnRpZmllclN0YXJ0KGNwKSkg
eworICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlkID0gY2g7CiAgICAgICAgIH0K
IAogICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGNoID0gc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwotICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJQYXJ0
KGNoKSkgeworICAgICAgICAgICAgY3AgPSBjb2RlUG9pbnRBdChpbmRleCk7CisgICAgICAgICAg
ICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY3ApKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgaWQgKz0gU3Ry
aW5nLmZyb21DaGFyQ29kZShjaCk7CisgICAgICAgICAgICBjaCA9IGZyb21Db2RlUG9pbnQoY3Ap
OworICAgICAgICAgICAgaWQgKz0gY2g7CisgICAgICAgICAgICBpbmRleCArPSBjaC5sZW5ndGg7
CiAKLSAgICAgICAgICAgIC8vICdcdScgKGNoYXIgIzkyLCBjaGFyICMxMTcpIGRlbm90ZXMgYW4g
ZXNjYXBlZCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBpZiAoY2ggPT09IDkyKSB7CisgICAgICAg
ICAgICAvLyAnXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rl
ci4KKyAgICAgICAgICAgIGlmIChjcCA9PT0gMHg1QykgewogICAgICAgICAgICAgICAgIGlkID0g
aWQuc3Vic3RyKDAsIGlkLmxlbmd0aCAtIDEpOwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uu
Y2hhckNvZGVBdChpbmRleCkgIT09IDExNykgewotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAg
ICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkgeworICAgICAgICAg
ICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2Fw
ZSgndScpOwotICAgICAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcgfHwgIWlzSWRl
bnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAneycpIHsKKyAgICAgICAgICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBzY2FuVW5pY29kZUNvZGVQb2lu
dEVzY2FwZSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAgICAgICAgICAgICAgICAgICBjcCA9IGNoLmNo
YXJDb2RlQXQoMCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcg
fHwgIWlzSWRlbnRpZmllclBhcnQoY3ApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
d1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGlkICs9IGNoOwogICAgICAgICAgICAgfQpAQCAtNjU5LDEw
ICs2OTMsMTQgQEAKICAgICAgICAgc3RhcnQgPSBpbmRleCsrOwogICAgICAgICB3aGlsZSAoaW5k
ZXggPCBsZW5ndGgpIHsKICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgp
OwotICAgICAgICAgICAgaWYgKGNoID09PSA5MikgewotICAgICAgICAgICAgICAgIC8vIEJsYWNr
c2xhc2ggKGNoYXIgIzkyKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS4KKyAgICAgICAg
ICAgIGlmIChjaCA9PT0gMHg1QykgeworICAgICAgICAgICAgICAgIC8vIEJsYWNrc2xhc2ggKFUr
MDA1QykgbWFya3MgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuCiAgICAgICAgICAgICAgICAgaW5k
ZXggPSBzdGFydDsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RXNjYXBlZElkZW50aWZpZXIo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcGxleElkZW50aWZpZXIoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gMHhEODAwICYmIGNoIDwgMHhERkZGKSB7CisgICAgICAg
ICAgICAgICAgLy8gTmVlZCB0byBoYW5kbGUgc3Vycm9nYXRlIHBhaXJzLgorICAgICAgICAgICAg
ICAgIGluZGV4ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBsZXhJZGVu
dGlmaWVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyUGFy
dChjaCkpIHsKICAgICAgICAgICAgICAgICArK2luZGV4OwpAQCAtNjc5LDggKzcxNyw4IEBACiAK
ICAgICAgICAgc3RhcnQgPSBpbmRleDsKIAotICAgICAgICAvLyBCYWNrc2xhc2ggKGNoYXIgIzky
KSBzdGFydHMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCi0gICAgICAgIGlkID0gKHNvdXJjZS5jaGFy
Q29kZUF0KGluZGV4KSA9PT0gOTIpID8gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSA6IGdldElkZW50
aWZpZXIoKTsKKyAgICAgICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVk
IGNoYXJhY3Rlci4KKyAgICAgICAgaWQgPSAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAw
eDVDKSA/IGdldENvbXBsZXhJZGVudGlmaWVyKCkgOiBnZXRJZGVudGlmaWVyKCk7CiAKICAgICAg
ICAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFj
dGVyLgogICAgICAgICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlkZW50aWZpZXIuCkBAIC03MDEs
MjE1ICs3MzksMTEzIEBACiAgICAgICAgICAgICB2YWx1ZTogaWQsCiAgICAgICAgICAgICBsaW5l
TnVtYmVyOiBsaW5lTnVtYmVyLAogICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0g
ICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgICAgIHN0YXJ0OiBzdGFy
dCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKICAgICAgICAgfTsKICAgICB9CiAKIAotICAgIC8v
IDcuNyBQdW5jdHVhdG9ycworICAgIC8vIEVDTUEtMjYyIDExLjcgUHVuY3R1YXRvcnMKIAogICAg
IGZ1bmN0aW9uIHNjYW5QdW5jdHVhdG9yKCkgewotICAgICAgICB2YXIgc3RhcnQgPSBpbmRleCwK
LSAgICAgICAgICAgIGNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCksCi0gICAgICAgICAg
ICBjb2RlMiwKLSAgICAgICAgICAgIGNoMSA9IHNvdXJjZVtpbmRleF0sCi0gICAgICAgICAgICBj
aDIsCi0gICAgICAgICAgICBjaDMsCi0gICAgICAgICAgICBjaDQ7CisgICAgICAgIHZhciB0b2tl
biwgc3RyOworCisgICAgICAgIHRva2VuID0geworICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVu
Y3R1YXRvciwKKyAgICAgICAgICAgIHZhbHVlOiAnJywKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAg
ICAgIHN0YXJ0OiBpbmRleCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKIAot
ICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgICAgLy8gQ2hlY2sgZm9yIG1vc3QgY29tbW9u
IHNpbmdsZS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuCi0gICAgICAgIGNhc2UgNDA6ICAgLy8gKCBv
cGVuIGJyYWNrZXQKLSAgICAgICAgY2FzZSA0MTogICAvLyApIGNsb3NlIGJyYWNrZXQKLSAgICAg
ICAgY2FzZSA1OTogICAvLyA7IHNlbWljb2xvbgotICAgICAgICBjYXNlIDQ0OiAgIC8vICwgY29t
bWEKLSAgICAgICAgY2FzZSAxMjM6ICAvLyB7IG9wZW4gY3VybHkgYnJhY2UKLSAgICAgICAgY2Fz
ZSAxMjU6ICAvLyB9IGNsb3NlIGN1cmx5IGJyYWNlCi0gICAgICAgIGNhc2UgOTE6ICAgLy8gWwot
ICAgICAgICBjYXNlIDkzOiAgIC8vIF0KLSAgICAgICAgY2FzZSA1ODogICAvLyA6Ci0gICAgICAg
IGNhc2UgNjM6ICAgLy8gPwotICAgICAgICBjYXNlIDEyNjogIC8vIH4KLSAgICAgICAgICAgICsr
aW5kZXg7CisgICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIHN3aXRjaCAoc3Ry
KSB7CisKKyAgICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUp
IHsKLSAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gNDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMTIzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4
dHJhLm9wZW5DdXJseVRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSBleHRyYS50b2tlbnMu
bGVuZ3RoOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJp
bmcuZnJvbUNoYXJDb2RlKGNvZGUpLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVO
dW1iZXIsCi0gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAg
ICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCi0gICAgICAgICAgICB9OwotCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBjb2RlMiA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7
Ci0KLSAgICAgICAgICAgIC8vICc9JyAoY2hhciAjNjEpIG1hcmtzIGFuIGFzc2lnbm1lbnQgb3Ig
Y29tcGFyaXNvbiBvcGVyYXRvci4KLSAgICAgICAgICAgIGlmIChjb2RlMiA9PT0gNjEpIHsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDM3OiAg
Ly8gJQotICAgICAgICAgICAgICAgIGNhc2UgMzg6ICAvLyAmCi0gICAgICAgICAgICAgICAgY2Fz
ZSA0MjogIC8vICo6Ci0gICAgICAgICAgICAgICAgY2FzZSA0MzogIC8vICsKLSAgICAgICAgICAg
ICAgICBjYXNlIDQ1OiAgLy8gLQotICAgICAgICAgICAgICAgIGNhc2UgNDc6ICAvLyAvCi0gICAg
ICAgICAgICAgICAgY2FzZSA2MDogIC8vIDwKLSAgICAgICAgICAgICAgICBjYXNlIDYyOiAgLy8g
PgotICAgICAgICAgICAgICAgIGNhc2UgOTQ6ICAvLyBeCi0gICAgICAgICAgICAgICAgY2FzZSAx
MjQ6IC8vIHwKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0
dWF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5nLmZyb21DaGFyQ29k
ZShjb2RlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTIpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFy
dCwgaW5kZXhdCi0gICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBjYXNl
IDMzOiAvLyAhCi0gICAgICAgICAgICAgICAgY2FzZSA2MTogLy8gPQotICAgICAgICAgICAgICAg
ICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICAgICAgICAgIC8vICE9PSBhbmQgPT09Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDYxKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5j
dHVhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS5zbGljZShzdGFy
dCwgaW5kZXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCi0gICAgICAgICAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgIGlm
IChleHRyYS50b2tlbml6ZSkgeworICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2Vu
ID0gZXh0cmEudG9rZW5zLmxlbmd0aDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRl
LmN1cmx5U3RhY2sucHVzaCgneycpOworICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUGVlayBtb3JlIGNoYXJhY3RlcnMuCiAK
LSAgICAgICAgY2gyID0gc291cmNlW2luZGV4ICsgMV07Ci0gICAgICAgIGNoMyA9IHNvdXJjZVtp
bmRleCArIDJdOwotICAgICAgICBjaDQgPSBzb3VyY2VbaW5kZXggKyAzXTsKLQotICAgICAgICAv
LyA0LWNoYXJhY3RlciBwdW5jdHVhdG9yOiA+Pj49Ci0KLSAgICAgICAgaWYgKGNoMSA9PT0gJz4n
ICYmIGNoMiA9PT0gJz4nICYmIGNoMyA9PT0gJz4nKSB7Ci0gICAgICAgICAgICBpZiAoY2g0ID09
PSAnPScpIHsKLSAgICAgICAgICAgICAgICBpbmRleCArPSA0OwotICAgICAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCi0gICAg
ICAgICAgICAgICAgICAgIHZhbHVlOiAnPj4+PScsCi0gICAgICAgICAgICAgICAgICAgIGxpbmVO
dW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0
YXJ0LAotICAgICAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KLSAgICAgICAg
ICAgICAgICB9OworICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgICAgICsraW5kZXg7CisgICAg
ICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJy4nICYmIHNvdXJjZVtpbmRleCArIDFdID09
PSAnLicpIHsKKyAgICAgICAgICAgICAgICAvLyBTcHJlYWQgb3BlcmF0b3I6IC4uLgorICAgICAg
ICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICAgICAgc3RyID0gJy4uLic7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAzLWNoYXJhY3RlciBwdW5jdHVhdG9y
czogPT09ICE9PSA+Pj4gPDw9ID4+PQotCi0gICAgICAgIGlmIChjaDEgPT09ICc+JyAmJiBjaDIg
PT09ICc+JyAmJiBjaDMgPT09ICc+JykgewotICAgICAgICAgICAgaW5kZXggKz0gMzsKLSAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwK
LSAgICAgICAgICAgICAgICB2YWx1ZTogJz4+PicsCi0gICAgICAgICAgICAgICAgbGluZU51bWJl
cjogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAg
ICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KLSAgICAgICAgICAgIH07Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoY2gxID09PSAnPCcgJiYgY2gyID09PSAnPCcgJiYgY2gzID09
PSAnPScpIHsKLSAgICAgICAgICAgIGluZGV4ICs9IDM7Ci0gICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCi0gICAgICAgICAgICAgICAg
dmFsdWU6ICc8PD0nLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0g
ICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgcmFu
Z2U6IFtzdGFydCwgaW5kZXhdCi0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGNoMSA9PT0gJz4nICYmIGNoMiA9PT0gJz4nICYmIGNoMyA9PT0gJz0nKSB7Ci0gICAgICAg
ICAgICBpbmRleCArPSAzOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0
eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAgICAgICAgICAgIHZhbHVlOiAnPj49JywKLSAg
ICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxp
bmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4
XQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgaWYgKGNoMSA9PT0gJy4nICYmIGNoMiA9PT0gJy4nICYmIGNoMyA9PT0gJy4nKSB7Ci0gICAg
ICAgICAgICBpbmRleCArPSAzOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAg
ICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAgICAgICAgICAgIHZhbHVlOiAnLi4uJywK
LSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAg
IGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGlu
ZGV4XQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQorICAgICAgICBjYXNlICd9JzoKKyAgICAg
ICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnBvcCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJyknOgorICAgICAgICBjYXNlICc7JzoKKyAg
ICAgICAgY2FzZSAnLCc6CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICBjYXNlICddJzoKKyAg
ICAgICAgY2FzZSAnOic6CisgICAgICAgIGNhc2UgJz8nOgorICAgICAgICBjYXNlICd+JzoKKyAg
ICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAvLyBPdGhl
ciAyLWNoYXJhY3RlciBwdW5jdHVhdG9yczogKysgLS0gPDwgPj4gJiYgfHwKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIC8vIDQtY2hhcmFjdGVyIHB1bmN0dWF0b3IuCisgICAgICAgICAg
ICBzdHIgPSBzb3VyY2Uuc3Vic3RyKGluZGV4LCA0KTsKKyAgICAgICAgICAgIGlmIChzdHIgPT09
ICc+Pj49JykgeworICAgICAgICAgICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICB9IGVs
c2UgewogCi0gICAgICAgIGlmIChjaDEgPT09IGNoMiAmJiAoJystPD4mfCcuaW5kZXhPZihjaDEp
ID49IDApKSB7Ci0gICAgICAgICAgICBpbmRleCArPSAyOwotICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAgICAgICAgICAg
IHZhbHVlOiBjaDEgKyBjaDIsCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJl
ciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAg
ICByYW5nZTogW3N0YXJ0LCBpbmRleF0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAvLyAzLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKyAgICAgICAgICAgICAgICBz
dHIgPSBzdHIuc3Vic3RyKDAsIDMpOworICAgICAgICAgICAgICAgIGlmIChzdHIgPT09ICc9PT0n
IHx8IHN0ciA9PT0gJyE9PScgfHwgc3RyID09PSAnPj4+JyB8fAorICAgICAgICAgICAgICAgICAg
ICBzdHIgPT09ICc8PD0nIHx8IHN0ciA9PT0gJz4+PScpIHsKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXggKz0gMzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIGlmIChjaDEg
PT09ICc9JyAmJiBjaDIgPT09ICc+JykgewotICAgICAgICAgICAgaW5kZXggKz0gMjsKLSAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwK
LSAgICAgICAgICAgICAgICB2YWx1ZTogJz0+JywKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAg
ICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQotICAgICAgICAgICAgfTsKLSAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAvLyAyLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKyAg
ICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCAyKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0ciA9PT0gJyYmJyB8fCBzdHIgPT09ICd8fCcgfHwgc3RyID09PSAnPT0nIHx8
IHN0ciA9PT0gJyE9JyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnKz0nIHx8
IHN0ciA9PT0gJy09JyB8fCBzdHIgPT09ICcqPScgfHwgc3RyID09PSAnLz0nIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdHIgPT09ICcrKycgfHwgc3RyID09PSAnLS0nIHx8IHN0ciA9PT0g
Jzw8JyB8fCBzdHIgPT09ICc+PicgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0g
JyY9JyB8fCBzdHIgPT09ICd8PScgfHwgc3RyID09PSAnXj0nIHx8IHN0ciA9PT0gJyU9JyB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnPD0nIHx8IHN0ciA9PT0gJz49JyB8fCBz
dHIgPT09ICc9PicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgaWYgKCc8Pj0hKy0qJSZ8Xi8nLmlu
ZGV4T2YoY2gxKSA+PSAwKSB7Ci0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAgICAg
ICAgICAgIHZhbHVlOiBjaDEsCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJl
ciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAg
ICByYW5nZTogW3N0YXJ0LCBpbmRleF0KLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAxLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ciA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzw+
PSErLSolJnxeLycuaW5kZXhPZihzdHIpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKGNoMSA9PT0gJy4nKSB7Ci0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICAg
ICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAg
ICAgICAgICAgICAgIHZhbHVlOiBjaDEsCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGlu
ZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAg
ICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KLSAgICAgICAgICAgIH07CisgICAgICAgIGlm
IChpbmRleCA9PT0gdG9rZW4uc3RhcnQpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRv
a2VuKCk7CiAgICAgICAgIH0KIAotICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4
cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIHRva2VuLmVuZCA9IGluZGV4OworICAg
ICAgICB0b2tlbi52YWx1ZSA9IHN0cjsKKyAgICAgICAgcmV0dXJuIHRva2VuOwogICAgIH0KIAot
ICAgIC8vIDcuOC4zIE51bWVyaWMgTGl0ZXJhbHMKKyAgICAvLyBFQ01BLTI2MiAxMS44LjMgTnVt
ZXJpYyBMaXRlcmFscwogCiAgICAgZnVuY3Rpb24gc2NhbkhleExpdGVyYWwoc3RhcnQpIHsKICAg
ICAgICAgdmFyIG51bWJlciA9ICcnOwpAQCAtOTIyLDExICs4NTgsMTEgQEAKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChudW1iZXIubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAg
ICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzSWRl
bnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKLSAgICAgICAgICAgIHRo
cm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAg
ICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1
cm4gewpAQCAtOTM0LDcgKzg3MCw4IEBACiAgICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQoJzB4
JyArIG51bWJlciwgMTYpLAogICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKICAg
ICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgcmFuZ2U6IFtzdGFy
dCwgaW5kZXhdCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGlu
ZGV4CiAgICAgICAgIH07CiAgICAgfQogCkBAIC05NTMsMTQgKzg5MCwxNCBAQAogCiAgICAgICAg
IGlmIChudW1iZXIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAvLyBvbmx5IDBiIG9yIDBC
Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJ
TExFR0FMJyk7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgICAgICBjaCA9IHNvdXJj
ZS5jaGFyQ29kZUF0KGluZGV4KTsKICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNl
ICovCiAgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY2gpIHx8IGlzRGVjaW1hbERp
Z2l0KGNoKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhw
ZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRU
b2tlbigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTk2OSw3ICs5MDYsOCBAQAog
ICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgMiksCiAgICAgICAgICAgICBsaW5l
TnVtYmVyOiBsaW5lTnVtYmVyLAogICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0g
ICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgICAgIHN0YXJ0OiBzdGFy
dCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKICAgICAgICAgfTsKICAgICB9CiAKQEAgLTk5NCwx
MSArOTMyLDExIEBACiAKICAgICAgICAgaWYgKCFvY3RhbCAmJiBudW1iZXIubGVuZ3RoID09PSAw
KSB7CiAgICAgICAgICAgICAvLyBvbmx5IDBvIG9yIDBPCi0gICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICB0
aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzSWRlbnRp
ZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkgfHwgaXNEZWNpbWFsRGlnaXQoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgdGhyb3dVbmV4
cGVjdGVkVG9rZW4oKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB7CkBAIC0xMDA3LDEw
ICs5NDUsMjkgQEAKICAgICAgICAgICAgIG9jdGFsOiBvY3RhbCwKICAgICAgICAgICAgIGxpbmVO
dW1iZXI6IGxpbmVOdW1iZXIsCiAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAg
ICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0
LAorICAgICAgICAgICAgZW5kOiBpbmRleAogICAgICAgICB9OwogICAgIH0KIAorICAgIGZ1bmN0
aW9uIGlzSW1wbGljaXRPY3RhbExpdGVyYWwoKSB7CisgICAgICAgIHZhciBpLCBjaDsKKworICAg
ICAgICAvLyBJbXBsaWNpdCBvY3RhbCwgdW5sZXNzIHRoZXJlIGlzIGEgbm9uLW9jdGFsIGRpZ2l0
LgorICAgICAgICAvLyAoQW5uZXggQi4xLjEgb24gTnVtZXJpYyBMaXRlcmFscykKKyAgICAgICAg
Zm9yIChpID0gaW5kZXggKyAxOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGNoID0g
c291cmNlW2ldOworICAgICAgICAgICAgaWYgKGNoID09PSAnOCcgfHwgY2ggPT09ICc5Jykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICghaXNPY3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CiAgICAgZnVuY3Rpb24gc2Nhbk51bWVyaWNMaXRlcmFsKCkgewogICAgICAgICB2YXIgbnVtYmVy
LCBzdGFydCwgY2g7CiAKQEAgLTEwMzcsMTIgKzk5NCwxNCBAQAogICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkJpbmFyeUxpdGVyYWwo
c3RhcnQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdv
JyB8fCBjaCA9PT0gJ08nIHx8IGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09ICdvJyB8fCBjaCA9PT0gJ08nKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIC8vIGRlY2ltYWwgbnVtYmVyIHN0YXJ0cyB3aXRoICcwJyBzdWNoIGFzICcwOScg
aXMgaWxsZWdhbC4KLSAgICAgICAgICAgICAgICBpZiAoY2ggJiYgaXNEZWNpbWFsRGlnaXQoY2gu
Y2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworCisgICAgICAgICAgICAgICAgaWYg
KGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW1wbGljaXRP
Y3RhbExpdGVyYWwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5PY3Rh
bExpdGVyYWwoY2gsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMTA3MiwxMiArMTAzMSwxMiBAQAogICAgICAgICAg
ICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIHRocm93
VW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgewotICAgICAg
ICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcp
OworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHJldHVybiB7CkBAIC0xMDg1LDE0ICsxMDQ0LDE1IEBACiAgICAgICAgICAgICB2YWx1ZTog
cGFyc2VGbG9hdChudW1iZXIpLAogICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwK
ICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgcmFuZ2U6IFtz
dGFydCwgaW5kZXhdCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6
IGluZGV4CiAgICAgICAgIH07CiAgICAgfQogCi0gICAgLy8gNy44LjQgU3RyaW5nIExpdGVyYWxz
CisgICAgLy8gRUNNQS0yNjIgMTEuOC40IFN0cmluZyBMaXRlcmFscwogCiAgICAgZnVuY3Rpb24g
c2NhblN0cmluZ0xpdGVyYWwoKSB7Ci0gICAgICAgIHZhciBzdHIgPSAnJywgcXVvdGUsIHN0YXJ0
LCBjaCwgY29kZSwgdW5lc2NhcGVkLCByZXN0b3JlLCBvY3RhbCA9IGZhbHNlOworICAgICAgICB2
YXIgc3RyID0gJycsIHF1b3RlLCBzdGFydCwgY2gsIHVuZXNjYXBlZCwgb2N0VG9EZWMsIG9jdGFs
ID0gZmFsc2U7CiAKICAgICAgICAgcXVvdGUgPSBzb3VyY2VbaW5kZXhdOwogICAgICAgICBhc3Nl
cnQoKHF1b3RlID09PSAnXCcnIHx8IHF1b3RlID09PSAnIicpLApAQCAtMTExMSwzMSArMTA3MSwy
OCBAQAogICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOwogICAgICAgICAgICAg
ICAgIGlmICghY2ggfHwgIWlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAgICAgICAgICAgICBjYXNl
ICduJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXG4nOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOgotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyICs9ICdccic7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdHIgKz0gJ1x0JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBjYXNlICd1JzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHIgKz0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9
IGluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhF
c2NhcGUoY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleCA9IHJlc3RvcmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVuZXNjYXBlZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB0aHJvd1VuZXhwZWN0ZWRU
b2tlbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgKz0gdW5lc2NhcGVkOwogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J24nOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcbic7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ciArPSAnXHQnOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ2InOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdc
Yic7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExNDUsMzAgKzExMDIsMTgg
QEAKICAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gJ1x4MEInOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJzgnOgorICAgICAgICAgICAgICAgICAgICBjYXNlICc5JzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2RlID0gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvY3RhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9jdFRvRGVjID0gb2N0YWxUb0RlY2ltYWwoY2gpOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNPY3RhbERp
Z2l0KHNvdXJjZVtpbmRleF0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9j
dGFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUg
KiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0
cmluZyBzdGFydHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCAwLCAx
LCAyLCAzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnMDEyMycuaW5kZXhP
ZihjaCkgPj0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4IDwgbGVuZ3RoICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2lu
ZGV4KytdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gU3Ry
aW5nLmZyb21DaGFyQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3Rh
bCA9IG9jdFRvRGVjLm9jdGFsIHx8IG9jdGFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG9jdFRvRGVjLmNvZGUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0g
Y2g7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTg5LDM2ICsxMTM0LDQzIEBACiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAocXVvdGUgIT09ICcnKSB7Ci0gICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAg
ICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJu
IHsKICAgICAgICAgICAgIHR5cGU6IFRva2VuLlN0cmluZ0xpdGVyYWwsCiAgICAgICAgICAgICB2
YWx1ZTogc3RyLAogICAgICAgICAgICAgb2N0YWw6IG9jdGFsLAotICAgICAgICAgICAgbGluZU51
bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAg
ICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBz
dGFydExpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IHN0YXJ0TGluZVN0YXJ0LAor
ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAogICAgICAg
ICB9OwogICAgIH0KIAorICAgIC8vIEVDTUEtMjYyIDExLjguNiBUZW1wbGF0ZSBMaXRlcmFsIExl
eGljYWwgQ29tcG9uZW50cworCiAgICAgZnVuY3Rpb24gc2NhblRlbXBsYXRlKCkgewotICAgICAg
ICB2YXIgY29va2VkID0gJycsIGNoLCBzdGFydCwgdGVybWluYXRlZCwgdGFpbCwgcmVzdG9yZSwg
dW5lc2NhcGVkLCBjb2RlLCBvY3RhbDsKKyAgICAgICAgdmFyIGNvb2tlZCA9ICcnLCBjaCwgc3Rh
cnQsIHJhd09mZnNldCwgdGVybWluYXRlZCwgaGVhZCwgdGFpbCwgcmVzdG9yZSwgdW5lc2NhcGVk
OwogCiAgICAgICAgIHRlcm1pbmF0ZWQgPSBmYWxzZTsKICAgICAgICAgdGFpbCA9IGZhbHNlOwog
ICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICBoZWFkID0gKHNvdXJjZVtpbmRleF0gPT09
ICdgJyk7CisgICAgICAgIHJhd09mZnNldCA9IDI7CiAKICAgICAgICAgKytpbmRleDsKIAogICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgICAgIGNoID0gc291cmNlW2lu
ZGV4KytdOwogICAgICAgICAgICAgaWYgKGNoID09PSAnYCcpIHsKKyAgICAgICAgICAgICAgICBy
YXdPZmZzZXQgPSAxOwogICAgICAgICAgICAgICAgIHRhaWwgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIHRlcm1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfSBlbHNlIGlmIChjaCA9PT0gJyQnKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVtp
bmRleF0gPT09ICd7JykgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnB1
c2goJyR7Jyk7CiAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgICAgICAgICAg
ICAgIHRlcm1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEy
NjQsMjggKzEyMTYsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNP
Y3RhbERpZ2l0KGNoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAnMDEy
MzQ1NjcnLmluZGV4T2YoY2gpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXDAg
aXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjb2RlICE9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFs
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc09jdGFsRGlnaXQoc291cmNlW2lu
ZGV4XSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0YWwgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1
NjcnLmluZGV4T2Yoc291cmNlW2luZGV4KytdKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIDAsIDEsIDIsIDMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCcwMTIzJy5pbmRleE9mKGNoKSA+PSAwICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGgg
JiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09jdGFsRGlnaXQo
c291cmNlW2luZGV4XSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
ZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09ICcwJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlY2lt
YWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElsbGVnYWw6IFwwMSBcMDIgYW5kIHNvIG9uCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVy
YWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb29rZWQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXNPY3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElsbGVnYWw6IFwxIFwyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcihNZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEzMTEsNzAgKzEyNTAsNzAgQEAKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICghdGVybWluYXRlZCkgewotICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAg
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaGVhZCkg
eworICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wb3AoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHJldHVybiB7CiAgICAgICAgICAgICB0eXBlOiBUb2tlbi5UZW1wbGF0ZSwKICAgICAgICAg
ICAgIHZhbHVlOiB7CiAgICAgICAgICAgICAgICAgY29va2VkOiBjb29rZWQsCi0gICAgICAgICAg
ICAgICAgcmF3OiBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAxLCBpbmRleCAtICgodGFpbCkgPyAxIDog
MikpCisgICAgICAgICAgICAgICAgcmF3OiBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAxLCBpbmRleCAt
IHJhd09mZnNldCkKICAgICAgICAgICAgIH0sCisgICAgICAgICAgICBoZWFkOiBoZWFkLAogICAg
ICAgICAgICAgdGFpbDogdGFpbCwKLSAgICAgICAgICAgIG9jdGFsOiBvY3RhbCwKICAgICAgICAg
ICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCiAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVT
dGFydCwKLSAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICAgICAgc3Rh
cnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAogICAgICAgICB9OwogICAgIH0KIAot
ICAgIGZ1bmN0aW9uIHNjYW5UZW1wbGF0ZUVsZW1lbnQob3B0aW9uKSB7Ci0gICAgICAgIHZhciBz
dGFydHNXaXRoLCB0ZW1wbGF0ZTsKLQotICAgICAgICBsb29rYWhlYWQgPSBudWxsOwotICAgICAg
ICBza2lwQ29tbWVudCgpOwotCi0gICAgICAgIHN0YXJ0c1dpdGggPSAob3B0aW9uLmhlYWQpID8g
J2AnIDogJ30nOwotCi0gICAgICAgIGlmIChzb3VyY2VbaW5kZXhdICE9PSBzdGFydHNXaXRoKSB7
Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJ
TExFR0FMJyk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZSA9IHNjYW5UZW1wbGF0ZSgp
OwotCi0gICAgICAgIHBlZWsoKTsKLQotICAgICAgICByZXR1cm4gdGVtcGxhdGU7Ci0gICAgfQor
ICAgIC8vIEVDTUEtMjYyIDExLjguNSBSZWd1bGFyIEV4cHJlc3Npb24gTGl0ZXJhbHMKIAogICAg
IGZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHsKLSAgICAgICAgdmFyIHRtcCA9
IHBhdHRlcm4sCi0gICAgICAgICAgICB2YWx1ZTsKKyAgICAgICAgLy8gVGhlIEJNUCBjaGFyYWN0
ZXIgdG8gdXNlIGFzIGEgcmVwbGFjZW1lbnQgZm9yIGFzdHJhbCBzeW1ib2xzIHdoZW4KKyAgICAg
ICAgLy8gdHJhbnNsYXRpbmcgYW4gRVM2ICJ1Ii1mbGFnZ2VkIHBhdHRlcm4gdG8gYW4gRVM1LWNv
bXBhdGlibGUKKyAgICAgICAgLy8gYXBwcm94aW1hdGlvbi4KKyAgICAgICAgLy8gTm90ZTogcmVw
bGFjaW5nIHdpdGggJ1x1RkZGRicgZW5hYmxlcyBmYWxzZSBwb3NpdGl2ZXMgaW4gdW5saWtlbHkK
KyAgICAgICAgLy8gc2NlbmFyaW9zLiBGb3IgZXhhbXBsZSwgYFtcdXsxMDQ0Zn0tXHV7MTA0NDB9
XWAgaXMgYW4gaW52YWxpZAorICAgICAgICAvLyBwYXR0ZXJuIHRoYXQgd291bGQgbm90IGJlIGRl
dGVjdGVkIGJ5IHRoaXMgc3Vic3RpdHV0aW9uLgorICAgICAgICB2YXIgYXN0cmFsU3Vic3RpdHV0
ZSA9ICdcdUZGRkYnLAorICAgICAgICAgICAgdG1wID0gcGF0dGVybjsKIAogICAgICAgICBpZiAo
ZmxhZ3MuaW5kZXhPZigndScpID49IDApIHsKLSAgICAgICAgICAgIC8vIFJlcGxhY2UgZWFjaCBh
c3RyYWwgc3ltYm9sIGFuZCBldmVyeSBVbmljb2RlIGNvZGUgcG9pbnQKLSAgICAgICAgICAgIC8v
IGVzY2FwZSBzZXF1ZW5jZSB3aXRoIGEgc2luZ2xlIEFTQ0lJIHN5bWJvbCB0byBhdm9pZCB0aHJv
d2luZyBvbgotICAgICAgICAgICAgLy8gcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGFyZSBvbmx5
IHZhbGlkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlCi0gICAgICAgICAgICAvLyBgL3VgIGZsYWcu
Ci0gICAgICAgICAgICAvLyBOb3RlOiByZXBsYWNpbmcgd2l0aCB0aGUgQVNDSUkgc3ltYm9sIGB4
YCBtaWdodCBjYXVzZSBmYWxzZQotICAgICAgICAgICAgLy8gbmVnYXRpdmVzIGluIHVubGlrZWx5
IHNjZW5hcmlvcy4gRm9yIGV4YW1wbGUsIGBbXHV7NjF9LWJdYCBpcyBhCi0gICAgICAgICAgICAv
LyBwZXJmZWN0bHkgdmFsaWQgcGF0dGVybiB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gYFthLWJdYCwg
YnV0IGl0Ci0gICAgICAgICAgICAvLyB3b3VsZCBiZSByZXBsYWNlZCBieSBgW3gtYl1gIHdoaWNo
IHRocm93cyBhbiBlcnJvci4KICAgICAgICAgICAgIHRtcCA9IHRtcAotICAgICAgICAgICAgICAg
IC5yZXBsYWNlKC9cXHVceyhbMC05YS1mQS1GXSspXH0vZywgZnVuY3Rpb24gKCQwLCAkMSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoJDEsIDE2KSA8PSAweDEwRkZGRikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd4JzsKKyAgICAgICAgICAgICAgICAvLyBS
ZXBsYWNlIGV2ZXJ5IFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlIHdpdGggdGhlIGVxdWl2YWxlbnQK
KyAgICAgICAgICAgICAgICAvLyBCTVAgY2hhcmFjdGVyIG9yIGEgY29uc3RhbnQgQVNDSUkgY29k
ZSBwb2ludCBpbiB0aGUgY2FzZSBvZgorICAgICAgICAgICAgICAgIC8vIGFzdHJhbCBzeW1ib2xz
LiAoU2VlIHRoZSBhYm92ZSBub3RlIG9uIGBhc3RyYWxTdWJzdGl0dXRlYAorICAgICAgICAgICAg
ICAgIC8vIGZvciBtb3JlIGluZm9ybWF0aW9uLikKKyAgICAgICAgICAgICAgICAucmVwbGFjZSgv
XFx1XHsoWzAtOWEtZkEtRl0rKVx9fFxcdShbYS1mQS1GMC05XXs0fSkvZywgZnVuY3Rpb24gKCQw
LCAkMSwgJDIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IHBhcnNlSW50
KCQxIHx8ICQyLCAxNik7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPiAweDEw
RkZGRikgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obnVs
bCwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweEZGRkYpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuSW52YWxpZFJlZ0V4cCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhc3RyYWxTdWJz
dGl0dXRlOwogICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tc
dUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLCAneCcpOworICAgICAgICAgICAgICAgIC8v
IFJlcGxhY2UgZWFjaCBwYWlyZWQgc3Vycm9nYXRlIHdpdGggYSBzaW5nbGUgQVNDSUkgc3ltYm9s
IHRvCisgICAgICAgICAgICAgICAgLy8gYXZvaWQgdGhyb3dpbmcgb24gcmVndWxhciBleHByZXNz
aW9ucyB0aGF0IGFyZSBvbmx5IHZhbGlkIGluCisgICAgICAgICAgICAgICAgLy8gY29tYmluYXRp
b24gd2l0aCB0aGUgInUiIGZsYWcuCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoCisgICAgICAg
ICAgICAgICAgICAgIC9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZywKKyAgICAgICAg
ICAgICAgICAgICAgYXN0cmFsU3Vic3RpdHV0ZQorICAgICAgICAgICAgICAgICk7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBGaXJzdCwgZGV0ZWN0IGludmFsaWQgcmVndWxhciBleHByZXNzaW9u
cy4KICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhbHVlID0gbmV3IFJlZ0V4cCh0bXApOwor
ICAgICAgICAgICAgUmVnRXhwKHRtcCk7CiAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRSZWdFeHApOworICAgICAgICAgICAg
dGhyb3dVbmV4cGVjdGVkVG9rZW4obnVsbCwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBSZXR1cm4gYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IGZv
ciB0aGlzIHBhdHRlcm4tZmxhZyBwYWlyLCBvcgpAQCAtMTQwMywxMSArMTM0MiwxMSBAQAogICAg
ICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOwogICAgICAgICAgICAgICAgIC8vIEVD
TUEtMjYyIDcuOC41CiAgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hh
ckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVj
dGVkVG9rZW4obnVsbCwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgc3RyICs9IGNoOwogICAgICAgICAgICAgfSBlbHNlIGlm
IChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0gICAgICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgICAg
ICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihudWxsLCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdF
eHApOwogICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc01hcmtlcikgewogICAgICAgICAgICAg
ICAgIGlmIChjaCA9PT0gJ10nKSB7CiAgICAgICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0g
ZmFsc2U7CkBAIC0xNDIzLDcgKzEzNjIsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF0
ZXJtaW5hdGVkKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbnRlcm1p
bmF0ZWRSZWdFeHApOworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obnVsbCwgTWVz
c2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEV4Y2x1
ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guCkBAIC0xNDYyLDEwICsxNDAxLDEwIEBACiAg
ICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArPSAndSc7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHIgKz0gJ1xcdSc7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJ
TExFR0FMJyk7CisgICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdc
XCc7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgICAgICB0b2xlcmF0
ZVVuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7CkBAIC0xNDgxLDYgKzE0MjAsNyBAQAog
CiAgICAgZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHsKICAgICAgICAgdmFyIHN0YXJ0LCBib2R5LCBm
bGFncywgdmFsdWU7CisgICAgICAgIHNjYW5uaW5nID0gdHJ1ZTsKIAogICAgICAgICBsb29rYWhl
YWQgPSBudWxsOwogICAgICAgICBza2lwQ29tbWVudCgpOwpAQCAtMTQ4OSw3ICsxNDI5LDcgQEAK
ICAgICAgICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7CiAgICAgICAgIGZsYWdzID0gc2NhblJl
Z0V4cEZsYWdzKCk7CiAgICAgICAgIHZhbHVlID0gdGVzdFJlZ0V4cChib2R5LnZhbHVlLCBmbGFn
cy52YWx1ZSk7Ci0KKyAgICAgICAgc2Nhbm5pbmcgPSBmYWxzZTsKICAgICAgICAgaWYgKGV4dHJh
LnRva2VuaXplKSB7CiAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgIHR5cGU6
IFRva2VuLlJlZ3VsYXJFeHByZXNzaW9uLApAQCAtMTUwMCw3ICsxNDQwLDggQEAKICAgICAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCiAgICAg
ICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgcmFuZ2U6
IFtzdGFydCwgaW5kZXhdCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAg
ICAgICAgIGVuZDogaW5kZXgKICAgICAgICAgICAgIH07CiAgICAgICAgIH0KIApAQCAtMTUxMSwz
OCArMTQ1Miw4NiBAQAogICAgICAgICAgICAgICAgIHBhdHRlcm46IGJvZHkudmFsdWUsCiAgICAg
ICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLnZhbHVlCiAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAg
ICAgICAgICBlbmQ6IGluZGV4CiAgICAgICAgIH07CiAgICAgfQogCi0gICAgZnVuY3Rpb24gaXNJ
ZGVudGlmaWVyTmFtZSh0b2tlbikgewotICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gVG9r
ZW4uSWRlbnRpZmllciB8fAotICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29y
ZCB8fAotICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwgfHwK
LSAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsOwotICAgIH0KKyAg
ICBmdW5jdGlvbiBjb2xsZWN0UmVnZXgoKSB7CisgICAgICAgIHZhciBwb3MsIGxvYywgcmVnZXgs
IHRva2VuOwogCi0gICAgZnVuY3Rpb24gYWR2YW5jZVNsYXNoKCkgewotICAgICAgICB2YXIgcHJl
dlRva2VuLAotICAgICAgICAgICAgY2hlY2tUb2tlbjsKLSAgICAgICAgLy8gVXNpbmcgdGhlIGZv
bGxvd2luZyBhbGdvcml0aG06Ci0gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxh
L3N3ZWV0LmpzL3dpa2kvZGVzaWduCi0gICAgICAgIHByZXZUb2tlbiA9IGV4dHJhLnRva2Vuc1tl
eHRyYS50b2tlbnMubGVuZ3RoIC0gMV07Ci0gICAgICAgIGlmICghcHJldlRva2VuKSB7Ci0gICAg
ICAgICAgICAvLyBOb3RoaW5nIGJlZm9yZSB0aGF0OiBpdCBjYW5ub3QgYmUgYSBkaXZpc2lvbi4K
LSAgICAgICAgICAgIHJldHVybiBzY2FuUmVnRXhwKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHByZXZUb2tlbi50eXBlID09PSAnUHVuY3R1YXRvcicpIHsKLSAgICAgICAgICAgIGlmIChwcmV2
VG9rZW4udmFsdWUgPT09ICcpJykgewotICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRy
YS50b2tlbnNbZXh0cmEub3BlblBhcmVuVG9rZW4gLSAxXTsKLSAgICAgICAgICAgICAgICBpZiAo
Y2hlY2tUb2tlbiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi50eXBlID09
PSAnS2V5d29yZCcgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja1Rva2VuLnZhbHVl
ID09PSAnaWYnIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9
PT0gJ3doaWxlJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUg
PT09ICdmb3InIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9
PT0gJ3dpdGgnKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblJlZ0V4cCgpOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKworICAgICAgICBwb3Mg
PSBpbmRleDsKKyAgICAgICAgbG9jID0geworICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAg
ICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXgg
LSBsaW5lU3RhcnQKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICByZWdleCA9
IHNjYW5SZWdFeHAoKTsKKworICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgbGluZTog
bGluZU51bWJlciwKKyAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAg
ICAgfTsKKworICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAgICAgICBpZiAo
IWV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICAvLyBQb3AgdGhlIHByZXZpb3VzIHRva2Vu
LCB3aGljaCBpcyBsaWtlbHkgJy8nIG9yICcvPScKKyAgICAgICAgICAgIGlmIChleHRyYS50b2tl
bnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHRva2VuID0gZXh0cmEudG9rZW5zW2V4
dHJhLnRva2Vucy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4ucmFuZ2Vb
MF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSAnUHVuY3R1YXRvcicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnLycgfHwgdG9rZW4udmFsdWUgPT09ICcvPScp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wb3AoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZXh0cmEudG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAgIHR5cGU6ICdSZWd1bGFy
RXhwcmVzc2lvbicsCisgICAgICAgICAgICAgICAgdmFsdWU6IHJlZ2V4LmxpdGVyYWwsCisgICAg
ICAgICAgICAgICAgcmVnZXg6IHJlZ2V4LnJlZ2V4LAorICAgICAgICAgICAgICAgIHJhbmdlOiBb
cG9zLCBpbmRleF0sCisgICAgICAgICAgICAgICAgbG9jOiBsb2MKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlZ2V4OworICAgIH0KKworICAgIGZ1bmN0aW9u
IGlzSWRlbnRpZmllck5hbWUodG9rZW4pIHsKKyAgICAgICAgcmV0dXJuIHRva2VuLnR5cGUgPT09
IFRva2VuLklkZW50aWZpZXIgfHwKKyAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLktl
eXdvcmQgfHwKKyAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFs
IHx8CisgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbDsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBhZHZhbmNlU2xhc2goKSB7CisgICAgICAgIHZhciBwcmV2VG9rZW4s
CisgICAgICAgICAgICBjaGVja1Rva2VuOworICAgICAgICAvLyBVc2luZyB0aGUgZm9sbG93aW5n
IGFsZ29yaXRobToKKyAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc3dlZXQu
anMvd2lraS9kZXNpZ24KKyAgICAgICAgcHJldlRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRv
a2Vucy5sZW5ndGggLSAxXTsKKyAgICAgICAgaWYgKCFwcmV2VG9rZW4pIHsKKyAgICAgICAgICAg
IC8vIE5vdGhpbmcgYmVmb3JlIHRoYXQ6IGl0IGNhbm5vdCBiZSBhIGRpdmlzaW9uLgorICAgICAg
ICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2
VG9rZW4udHlwZSA9PT0gJ1B1bmN0dWF0b3InKSB7CisgICAgICAgICAgICBpZiAocHJldlRva2Vu
LnZhbHVlID09PSAnXScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3Io
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICcp
JykgeworICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3Bl
blBhcmVuVG9rZW4gLSAxXTsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tUb2tlbiAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi50eXBlID09PSAnS2V5d29yZCcgJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgIChjaGVja1Rva2VuLnZhbHVlID09PSAnaWYnIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ3doaWxlJyB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICdmb3InIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ3dpdGgnKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJ30nKSB7CkBAIC0xNTYwLDcg
KzE1NDksNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbi4KICAgICAg
ICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlU
b2tlbiAtIDVdOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUmVnRXhwKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1
bmN0dWF0b3IoKTsKQEAgLTE1NzIsODE5ICsxNTYxLDkzOCBAQAogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgLy8gSXQgaXMgYSBkZWNsYXJhdGlvbi4KLSAgICAgICAgICAgICAgICByZXR1cm4gc2Nh
blJlZ0V4cCgpOworICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzY2FuUmVnRXhwKCk7CisgICAgICAgICAgICBy
ZXR1cm4gY29sbGVjdFJlZ2V4KCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByZXZUb2tlbi50
eXBlID09PSAnS2V5d29yZCcgJiYgcHJldlRva2VuLnZhbHVlICE9PSAndGhpcycpIHsKLSAgICAg
ICAgICAgIHJldHVybiBzY2FuUmVnRXhwKCk7CisgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJl
Z2V4KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CiAgICAg
fQogCiAgICAgZnVuY3Rpb24gYWR2YW5jZSgpIHsKLSAgICAgICAgdmFyIGNoOwotCi0gICAgICAg
IHNraXBDb21tZW50KCk7CisgICAgICAgIHZhciBjcCwgdG9rZW47CiAKICAgICAgICAgaWYgKGlu
ZGV4ID49IGxlbmd0aCkgewogICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICB0
eXBlOiBUb2tlbi5FT0YsCiAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwK
ICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICBy
YW5nZTogW2luZGV4LCBpbmRleF0KKyAgICAgICAgICAgICAgICBzdGFydDogaW5kZXgsCisgICAg
ICAgICAgICAgICAgZW5kOiBpbmRleAogICAgICAgICAgICAgfTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOworICAgICAgICBjcCA9IHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KTsKKworICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7
CisgICAgICAgICAgICB0b2tlbiA9IHNjYW5JZGVudGlmaWVyKCk7CisgICAgICAgICAgICBpZiAo
c3RyaWN0ICYmIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbi50eXBlID0gVG9rZW4uS2V5d29yZDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIFZlcnkgY29t
bW9uOiAoIGFuZCApIGFuZCA7Ci0gICAgICAgIGlmIChjaCA9PT0gNDAgfHwgY2ggPT09IDQxIHx8
IGNoID09PSA1OCkgeworICAgICAgICBpZiAoY3AgPT09IDB4MjggfHwgY3AgPT09IDB4MjkgfHwg
Y3AgPT09IDB4M0IpIHsKICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwogICAg
ICAgICB9CiAKLSAgICAgICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xlIHF1
b3RlICgjMzkpIG9yIGRvdWJsZSBxdW90ZSAoIzM0KS4KLSAgICAgICAgaWYgKGNoID09PSAzOSB8
fCBjaCA9PT0gMzQpIHsKKyAgICAgICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2lu
Z2xlIHF1b3RlIChVKzAwMjcpIG9yIGRvdWJsZSBxdW90ZSAoVSswMDIyKS4KKyAgICAgICAgaWYg
KGNwID09PSAweDI3IHx8IGNwID09PSAweDIyKSB7CiAgICAgICAgICAgICByZXR1cm4gc2NhblN0
cmluZ0xpdGVyYWwoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChjaCA9PT0gOTYpIHsKLSAg
ICAgICAgICAgIHJldHVybiBzY2FuVGVtcGxhdGUoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2NhbklkZW50aWZp
ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERvdCAoLikgY2hhciAjNDYgY2FuIGFsc28g
c3RhcnQgYSBmbG9hdGluZy1wb2ludCBudW1iZXIsIGhlbmNlIHRoZSBuZWVkCisgICAgICAgIC8v
IERvdCAoLikgVSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBo
ZW5jZSB0aGUgbmVlZAogICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuCi0g
ICAgICAgIGlmIChjaCA9PT0gNDYpIHsKKyAgICAgICAgaWYgKGNwID09PSAweDJFKSB7CiAgICAg
ICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkp
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAgaWYgKGlzRGVjaW1h
bERpZ2l0KGNwKSkgewogICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgLy8gU2xhc2ggKC8pIGNoYXIgIzQ3IGNhbiBhbHNvIHN0YXJ0
IGEgcmVnZXguCi0gICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gNDcpIHsKKyAg
ICAgICAgLy8gU2xhc2ggKC8pIFUrMDAyRiBjYW4gYWxzbyBzdGFydCBhIHJlZ2V4LgorICAgICAg
ICBpZiAoZXh0cmEudG9rZW5pemUgJiYgY3AgPT09IDB4MkYpIHsKICAgICAgICAgICAgIHJldHVy
biBhZHZhbmNlU2xhc2goKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIFRlbXBsYXRlIGxpdGVy
YWxzIHN0YXJ0IHdpdGggYCAoVSswMDYwKSBmb3IgdGVtcGxhdGUgaGVhZAorICAgICAgICAvLyBv
ciB9IChVKzAwN0QpIGZvciB0ZW1wbGF0ZSBtaWRkbGUgb3IgdGVtcGxhdGUgdGFpbC4KKyAgICAg
ICAgaWYgKGNwID09PSAweDYwIHx8IChjcCA9PT0gMHg3RCAmJiBzdGF0ZS5jdXJseVN0YWNrW3N0
YXRlLmN1cmx5U3RhY2subGVuZ3RoIC0gMV0gPT09ICckeycpKSB7CisgICAgICAgICAgICByZXR1
cm4gc2NhblRlbXBsYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQb3NzaWJsZSBpZGVu
dGlmaWVyIHN0YXJ0IGluIGEgc3Vycm9nYXRlIHBhaXIuCisgICAgICAgIGlmIChjcCA+PSAweEQ4
MDAgJiYgY3AgPCAweERGRkYpIHsKKyAgICAgICAgICAgIGNwID0gY29kZVBvaW50QXQoaW5kZXgp
OworICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNwKSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBzY2FuSWRlbnRpZmllcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
ICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CiAgICAgfQogCisgICAgZnVuY3Rpb24g
Y29sbGVjdFRva2VuKCkgeworICAgICAgICB2YXIgbG9jLCB0b2tlbiwgdmFsdWUsIGVudHJ5Owor
CisgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAg
bGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0
YXJ0CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdG9rZW4gPSBhZHZhbmNl
KCk7CisgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAor
ICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICB9OworCisgICAg
ICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHZhbHVlID0g
c291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpOworICAgICAgICAgICAgZW50cnkg
PSB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW5OYW1lW3Rva2VuLnR5cGVdLAorICAgICAg
ICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICByYW5nZTogW3Rva2VuLnN0
YXJ0LCB0b2tlbi5lbmRdLAorICAgICAgICAgICAgICAgIGxvYzogbG9jCisgICAgICAgICAgICB9
OworICAgICAgICAgICAgaWYgKHRva2VuLnJlZ2V4KSB7CisgICAgICAgICAgICAgICAgZW50cnku
cmVnZXggPSB7CisgICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IHRva2VuLnJlZ2V4LnBhdHRl
cm4sCisgICAgICAgICAgICAgICAgICAgIGZsYWdzOiB0b2tlbi5yZWdleC5mbGFncworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHRyYS50b2tlbnMucHVz
aChlbnRyeSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorCiAg
ICAgZnVuY3Rpb24gbGV4KCkgewogICAgICAgICB2YXIgdG9rZW47CisgICAgICAgIHNjYW5uaW5n
ID0gdHJ1ZTsKKworICAgICAgICBsYXN0SW5kZXggPSBpbmRleDsKKyAgICAgICAgbGFzdExpbmVO
dW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICBsYXN0TGluZVN0YXJ0ID0gbGluZVN0YXJ0Owor
CisgICAgICAgIHNraXBDb21tZW50KCk7CiAKICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0g
ICAgICAgIGluZGV4ID0gdG9rZW4ucmFuZ2VbMV07Ci0gICAgICAgIGxpbmVOdW1iZXIgPSB0b2tl
bi5saW5lTnVtYmVyOwotICAgICAgICBsaW5lU3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7Ci0KLSAg
ICAgICAgbG9va2FoZWFkID0gYWR2YW5jZSgpOwotCi0gICAgICAgIGluZGV4ID0gdG9rZW4ucmFu
Z2VbMV07Ci0gICAgICAgIGxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyOwotICAgICAgICBs
aW5lU3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7CiAKKyAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4
OworICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICBzdGFydExp
bmVTdGFydCA9IGxpbmVTdGFydDsKKworICAgICAgICBsb29rYWhlYWQgPSAodHlwZW9mIGV4dHJh
LnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7Cisg
ICAgICAgIHNjYW5uaW5nID0gZmFsc2U7CiAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICB9CiAK
ICAgICBmdW5jdGlvbiBwZWVrKCkgewotICAgICAgICB2YXIgcG9zLCBsaW5lLCBzdGFydDsKLQot
ICAgICAgICBwb3MgPSBpbmRleDsKLSAgICAgICAgbGluZSA9IGxpbmVOdW1iZXI7Ci0gICAgICAg
IHN0YXJ0ID0gbGluZVN0YXJ0OwotICAgICAgICBsb29rYWhlYWQgPSBhZHZhbmNlKCk7Ci0gICAg
ICAgIGluZGV4ID0gcG9zOwotICAgICAgICBsaW5lTnVtYmVyID0gbGluZTsKLSAgICAgICAgbGlu
ZVN0YXJ0ID0gc3RhcnQ7Ci0gICAgfQorICAgICAgICBzY2FubmluZyA9IHRydWU7CiAKLSAgICBm
dW5jdGlvbiBsb29rYWhlYWQyKCkgewotICAgICAgICB2YXIgYWR2LCBwb3MsIGxpbmUsIHN0YXJ0
LCByZXN1bHQ7Ci0KLSAgICAgICAgLy8gSWYgd2UgYXJlIGNvbGxlY3RpbmcgdGhlIHRva2Vucywg
ZG9uJ3QgZ3JhYiB0aGUgbmV4dCBvbmUgeWV0LgotICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUg
bmV4dCAqLwotICAgICAgICBhZHYgPSAodHlwZW9mIGV4dHJhLmFkdmFuY2UgPT09ICdmdW5jdGlv
bicpID8gZXh0cmEuYWR2YW5jZSA6IGFkdmFuY2U7CisgICAgICAgIHNraXBDb21tZW50KCk7CiAK
LSAgICAgICAgcG9zID0gaW5kZXg7Ci0gICAgICAgIGxpbmUgPSBsaW5lTnVtYmVyOwotICAgICAg
ICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAgICAgbGFzdEluZGV4ID0gaW5kZXg7CisgICAgICAg
IGxhc3RMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgbGFzdExpbmVTdGFydCA9IGxp
bmVTdGFydDsKIAotICAgICAgICAvLyBTY2FuIGZvciB0aGUgbmV4dCBpbW1lZGlhdGUgdG9rZW4u
Ci0gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLwotICAgICAgICBpZiAobG9va2FoZWFk
ID09PSBudWxsKSB7Ci0gICAgICAgICAgICBsb29rYWhlYWQgPSBhZHYoKTsKLSAgICAgICAgfQot
ICAgICAgICBpbmRleCA9IGxvb2thaGVhZC5yYW5nZVsxXTsKLSAgICAgICAgbGluZU51bWJlciA9
IGxvb2thaGVhZC5saW5lTnVtYmVyOwotICAgICAgICBsaW5lU3RhcnQgPSBsb29rYWhlYWQubGlu
ZVN0YXJ0OwotCi0gICAgICAgIC8vIEdyYWIgdGhlIHRva2VuIHJpZ2h0IGFmdGVyLgotICAgICAg
ICByZXN1bHQgPSBhZHYoKTsKLSAgICAgICAgaW5kZXggPSBwb3M7Ci0gICAgICAgIGxpbmVOdW1i
ZXIgPSBsaW5lOwotICAgICAgICBsaW5lU3RhcnQgPSBzdGFydDsKKyAgICAgICAgc3RhcnRJbmRl
eCA9IGluZGV4OworICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAg
ICBzdGFydExpbmVTdGFydCA9IGxpbmVTdGFydDsKIAotICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICBsb29rYWhlYWQgPSAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcp
ID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7CisgICAgICAgIHNjYW5uaW5nID0gZmFsc2U7
CiAgICAgfQogCi0gICAgZnVuY3Rpb24gbWFya2VyQ3JlYXRlKCkgewotICAgICAgICBpZiAoIWV4
dHJhLmxvYyAmJiAhZXh0cmEucmFuZ2UpIHsKLSAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7
Ci0gICAgICAgIH0KLSAgICAgICAgc2tpcENvbW1lbnQoKTsKLSAgICAgICAgcmV0dXJuIHtvZmZz
ZXQ6IGluZGV4LCBsaW5lOiBsaW5lTnVtYmVyLCBjb2w6IGluZGV4IC0gbGluZVN0YXJ0fTsKKyAg
ICBmdW5jdGlvbiBQb3NpdGlvbigpIHsKKyAgICAgICAgdGhpcy5saW5lID0gc3RhcnRMaW5lTnVt
YmVyOworICAgICAgICB0aGlzLmNvbHVtbiA9IHN0YXJ0SW5kZXggLSBzdGFydExpbmVTdGFydDsK
ICAgICB9CiAKLSAgICBmdW5jdGlvbiBwcm9jZXNzQ29tbWVudChub2RlKSB7Ci0gICAgICAgIHZh
ciBsYXN0Q2hpbGQsCi0gICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzLAotICAgICAgICAgICAg
Ym90dG9tUmlnaHQgPSBleHRyYS5ib3R0b21SaWdodFN0YWNrLAotICAgICAgICAgICAgbGFzdCA9
IGJvdHRvbVJpZ2h0W2JvdHRvbVJpZ2h0Lmxlbmd0aCAtIDFdOwotCi0gICAgICAgIGlmIChub2Rl
LnR5cGUgPT09IFN5bnRheC5Qcm9ncmFtKSB7Ci0gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25v
cmUgZWxzZSAqLwotICAgICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPiAwKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgaWYg
KGV4dHJhLnRyYWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkgewot
ICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBleHRyYS50cmFpbGluZ0NvbW1lbnRz
OwotICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5n
dGggPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KGxhc3QgJiYgbGFzdC50cmFpbGluZ0NvbW1lbnRzICYmIGxhc3QudHJhaWxpbmdDb21tZW50c1sw
XS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdKSB7Ci0gICAgICAgICAgICAgICAgdHJhaWxpbmdD
b21tZW50cyA9IGxhc3QudHJhaWxpbmdDb21tZW50czsKLSAgICAgICAgICAgICAgICBkZWxldGUg
bGFzdC50cmFpbGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgZnVu
Y3Rpb24gU291cmNlTG9jYXRpb24oKSB7CisgICAgICAgIHRoaXMuc3RhcnQgPSBuZXcgUG9zaXRp
b24oKTsKKyAgICAgICAgdGhpcy5lbmQgPSBudWxsOworICAgIH0KIAotICAgICAgICAvLyBFYXRp
bmcgdGhlIHN0YWNrLgotICAgICAgICBpZiAobGFzdCkgewotICAgICAgICAgICAgd2hpbGUgKGxh
c3QgJiYgbGFzdC5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzBdKSB7Ci0gICAgICAgICAgICAgICAg
bGFzdENoaWxkID0gbGFzdDsKLSAgICAgICAgICAgICAgICBsYXN0ID0gYm90dG9tUmlnaHQucG9w
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBmdW5jdGlvbiBXcmFwcGluZ1NvdXJj
ZUxvY2F0aW9uKHN0YXJ0VG9rZW4pIHsKKyAgICAgICAgdGhpcy5zdGFydCA9IHsKKyAgICAgICAg
ICAgIGxpbmU6IHN0YXJ0VG9rZW4ubGluZU51bWJlciwKKyAgICAgICAgICAgIGNvbHVtbjogc3Rh
cnRUb2tlbi5zdGFydCAtIHN0YXJ0VG9rZW4ubGluZVN0YXJ0CisgICAgICAgIH07CisgICAgICAg
IHRoaXMuZW5kID0gbnVsbDsKKyAgICB9CiAKLSAgICAgICAgaWYgKGxhc3RDaGlsZCkgewotICAg
ICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMgJiYgbGFzdENoaWxkLmxlYWRp
bmdDb21tZW50c1tsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFd
IDw9IG5vZGUucmFuZ2VbMF0pIHsKLSAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50
cyA9IGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGxh
c3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDAgJiYgZXh0cmEubGVhZGluZ0NvbW1l
bnRzW2V4dHJhLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJh
bmdlWzBdKSB7Ci0gICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGV4dHJhLmxlYWRp
bmdDb21tZW50czsKLSAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdOworICAg
IGZ1bmN0aW9uIE5vZGUoKSB7CisgICAgICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAg
ICAgdGhpcy5yYW5nZSA9IFtzdGFydEluZGV4LCAwXTsKICAgICAgICAgfQotCi0gICAgICAgIGlm
ICh0cmFpbGluZ0NvbW1lbnRzKSB7Ci0gICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMg
PSB0cmFpbGluZ0NvbW1lbnRzOworICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAg
ICB0aGlzLmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbigpOwogICAgICAgICB9Ci0KLSAgICAgICAg
Ym90dG9tUmlnaHQucHVzaChub2RlKTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBtYXJrZXJBcHBs
eShtYXJrZXIsIG5vZGUpIHsKKyAgICBmdW5jdGlvbiBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikg
ewogICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKLSAgICAgICAgICAgIG5vZGUucmFuZ2UgPSBb
bWFya2VyLm9mZnNldCwgaW5kZXhdOworICAgICAgICAgICAgdGhpcy5yYW5nZSA9IFtzdGFydFRv
a2VuLnN0YXJ0LCAwXTsKICAgICAgICAgfQogICAgICAgICBpZiAoZXh0cmEubG9jKSB7Ci0gICAg
ICAgICAgICBub2RlLmxvYyA9IHsKLSAgICAgICAgICAgICAgICBzdGFydDogewotICAgICAgICAg
ICAgICAgICAgICBsaW5lOiBtYXJrZXIubGluZSwKLSAgICAgICAgICAgICAgICAgICAgY29sdW1u
OiBtYXJrZXIuY29sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBlbmQ6IHsK
LSAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAg
ICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICBub2RlID0gZGVsZWdhdGUucG9zdFByb2Nlc3Mobm9kZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHsKLSAgICAgICAgICAg
IHByb2Nlc3NDb21tZW50KG5vZGUpOworICAgICAgICAgICAgdGhpcy5sb2MgPSBuZXcgV3JhcHBp
bmdTb3VyY2VMb2NhdGlvbihzdGFydFRva2VuKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAKLSAgICBTeW50YXhUcmVlRGVsZWdhdGUgPSB7CisgICAgV3JhcHBpbmdO
b2RlLnByb3RvdHlwZSA9IE5vZGUucHJvdG90eXBlID0gewogCi0gICAgICAgIG5hbWU6ICdTeW50
YXhUcmVlJywKLQotICAgICAgICBwb3N0UHJvY2VzczogZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAg
ICAgICAgIHJldHVybiBub2RlOwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUFycmF5RXhw
cmVzc2lvbjogZnVuY3Rpb24gKGVsZW1lbnRzKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5BcnJheUV4cHJlc3Npb24sCi0gICAgICAgICAgICAg
ICAgZWxlbWVudHM6IGVsZW1lbnRzCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAg
ICAgIGNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGxlZnQs
IHJpZ2h0KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3Bl
cmF0b3IsCi0gICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKLSAgICAgICAgICAgICAgICByaWdo
dDogcmlnaHQKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlQmlu
YXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgewotICAgICAg
ICAgICAgdmFyIHR5cGUgPSAob3BlcmF0b3IgPT09ICd8fCcgfHwgb3BlcmF0b3IgPT09ICcmJicp
ID8gU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9uIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5
bnRheC5CaW5hcnlFeHByZXNzaW9uOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICB0eXBlOiB0eXBlLAotICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKLSAg
ICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LAotICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdodAot
ICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKKyAgICAgICAgcHJvY2Vzc0NvbW1lbnQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBsYXN0Q2hpbGQsCisgICAgICAgICAgICAgICAgbGVh
ZGluZ0NvbW1lbnRzLAorICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMsCisgICAgICAg
ICAgICAgICAgYm90dG9tUmlnaHQgPSBleHRyYS5ib3R0b21SaWdodFN0YWNrLAorICAgICAgICAg
ICAgICAgIGksCisgICAgICAgICAgICAgICAgY29tbWVudCwKKyAgICAgICAgICAgICAgICBsYXN0
ID0gYm90dG9tUmlnaHRbYm90dG9tUmlnaHQubGVuZ3RoIC0gMV07CiAKLSAgICAgICAgY3JlYXRl
QmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5CbG9ja1N0YXRlbWVudCwKLSAgICAgICAgICAg
ICAgICBib2R5OiBib2R5Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNy
ZWF0ZUJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKLSAgICAgICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkJyZWFrU3RhdGVtZW50LAotICAgICAg
ICAgICAgICAgIGxhYmVsOiBsYWJlbAotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAg
ICAgICBjcmVhdGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgewotICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2FsbEV4cHJl
c3Npb24sCi0gICAgICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCi0gICAgICAgICAgICAgICAg
J2FyZ3VtZW50cyc6IGFyZ3MKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
Y3JlYXRlQ2F0Y2hDbGF1c2U6IGZ1bmN0aW9uIChwYXJhbSwgYm9keSkgewotICAgICAgICAgICAg
cmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2F0Y2hDbGF1c2UsCi0gICAg
ICAgICAgICAgICAgcGFyYW06IHBhcmFtLAotICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlQ29uZGl0aW9uYWxFeHBy
ZXNzaW9uOiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db25kaXRpb25hbEV4
cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKLSAgICAgICAgICAgICAgICBj
b25zZXF1ZW50OiBjb25zZXF1ZW50LAotICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJu
YXRlCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUNvbnRpbnVl
U3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50LAotICAgICAgICAgICAg
ICAgIGxhYmVsOiBsYWJlbAotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBj
cmVhdGVEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRGVidWdnZXJTdGF0ZW1lbnQKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlRG9XaGlsZVN0YXRlbWVudDog
ZnVuY3Rpb24gKGJvZHksIHRlc3QpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgYm9k
eTogYm9keSwKLSAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0Ci0gICAgICAgICAgICB9OwotICAg
ICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FbXB0eVN0
YXRlbWVudAotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVFeHBy
ZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbiAoZXhwcmVzc2lvbikgewotICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCwK
LSAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uCi0gICAgICAgICAgICB9Owot
ICAgICAgICB9LAorICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gU3ludGF4LlByb2dyYW0p
IHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5ib2R5Lmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAot
ICAgICAgICBjcmVhdGVGb3JTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChpbml0LCB0ZXN0LCB1cGRhdGUs
IGJvZHkpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LkZvclN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICBpbml0OiBpbml0LAotICAgICAgICAg
ICAgICAgIHRlc3Q6IHRlc3QsCi0gICAgICAgICAgICAgICAgdXBkYXRlOiB1cGRhdGUsCi0gICAg
ICAgICAgICAgICAgYm9keTogYm9keQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgZm9yIChpID0g
ZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAg
ICAgICAgICAgICAgICBjb21tZW50ID0gZXh0cmEudHJhaWxpbmdDb21tZW50c1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQucmFuZ2VbMF0gPj0gdGhpcy5yYW5nZVsxXSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cy51bnNoaWZ0KGNvbW1lbnQp
OworICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5zcGxpY2Uo
aSwgMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdCAmJiBsYXN0LnRyYWlsaW5nQ29tbWVudHMgJiYg
bGFzdC50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IHRoaXMucmFuZ2VbMV0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGxhc3QudHJhaWxpbmdDb21tZW50
czsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3QudHJhaWxpbmdDb21tZW50czsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgY3JlYXRlRm9ySW5TdGF0
ZW1lbnQ6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm9keSkgewotICAgICAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRm9ySW5TdGF0ZW1lbnQsCi0gICAgICAg
ICAgICAgICAgbGVmdDogbGVmdCwKLSAgICAgICAgICAgICAgICByaWdodDogcmlnaHQsCi0gICAg
ICAgICAgICAgICAgYm9keTogYm9keSwKLSAgICAgICAgICAgICAgICBlYWNoOiBmYWxzZQotICAg
ICAgICAgICAgfTsKLSAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2su
CisgICAgICAgICAgICB3aGlsZSAobGFzdCAmJiBsYXN0LnJhbmdlWzBdID49IHRoaXMucmFuZ2Vb
MF0pIHsKKyAgICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSBib3R0b21SaWdodC5wb3AoKTsKKyAg
ICAgICAgICAgICAgICBsYXN0ID0gYm90dG9tUmlnaHRbYm90dG9tUmlnaHQubGVuZ3RoIC0gMV07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobGFzdENoaWxkLmxlYWRpbmdDb21tZW50cykgeworICAgICAgICAgICAgICAg
ICAgICBsZWFkaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0g
bGFzdENoaWxkLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNb
aV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5yYW5nZVsxXSA8PSB0aGlz
LnJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGluZ0NvbW1lbnRz
LnVuc2hpZnQoY29tbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxk
LmxlYWRpbmdDb21tZW50cy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBjcmVhdGVGb3JPZlN0YXRlbWVudDog
ZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBib2R5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Gb3JPZlN0YXRlbWVudCwKLSAgICAgICAgICAgICAg
ICBsZWZ0OiBsZWZ0LAotICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdodCwKLSAgICAgICAgICAg
ICAgICBib2R5OiBib2R5Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAorICAgICAgICAgICAg
ICAgICAgICBpZiAoIWxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzID0gdW5kZWZpbmVkOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIGlmIChleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAg
ICAgIGxlYWRpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgICAgIGZvciAoaSA9IGV4dHJh
LmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAg
ICAgICAgICBjb21tZW50ID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzW2ldOworICAgICAgICAgICAg
ICAgICAgICBpZiAoY29tbWVudC5yYW5nZVsxXSA8PSB0aGlzLnJhbmdlWzBdKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMudW5zaGlmdChjb21tZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cy5zcGxpY2UoaSwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBwYXJhbXMs
IGRlZmF1bHRzLCBib2R5LCByZXN0LCBnZW5lcmF0b3IsIGV4cHJlc3Npb24pIHsKLSAgICAgICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uRGVjbGFy
YXRpb24sCi0gICAgICAgICAgICAgICAgaWQ6IGlkLAotICAgICAgICAgICAgICAgIHBhcmFtczog
cGFyYW1zLAotICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0cywKLSAgICAgICAgICAg
ICAgICBib2R5OiBib2R5LAotICAgICAgICAgICAgICAgIHJlc3Q6IHJlc3QsCi0gICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjog
ZXhwcmVzc2lvbgotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKIAotICAgICAgICBjcmVhdGVG
dW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSwg
cmVzdCwgZ2VuZXJhdG9yLCBleHByZXNzaW9uKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb24sCi0gICAgICAgICAg
ICAgICAgaWQ6IGlkLAotICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLAotICAgICAgICAg
ICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0cywKLSAgICAgICAgICAgICAgICBib2R5OiBib2R5LAot
ICAgICAgICAgICAgICAgIHJlc3Q6IHJlc3QsCi0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBn
ZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvbgotICAgICAg
ICAgICAgfTsKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGlmIChsZWFkaW5nQ29tbWVudHMgJiYg
bGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmxlYWRp
bmdDb21tZW50cyA9IGxlYWRpbmdDb21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0cmFpbGluZ0NvbW1lbnRzICYmIHRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgewor
ICAgICAgICAgICAgICAgIHRoaXMudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgY3JlYXRlSWRlbnRpZmllcjogZnVuY3Rpb24gKG5h
bWUpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
LklkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgbmFtZTogbmFtZQotICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIGJvdHRvbVJpZ2h0LnB1c2godGhpcyk7CiAgICAgICAgIH0sCiAKLSAgICAg
ICAgY3JlYXRlSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5h
dGUpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
LklmU3RhdGVtZW50LAotICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCi0gICAgICAgICAgICAg
ICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKLSAgICAgICAgICAgICAgICBhbHRlcm5hdGU6IGFs
dGVybmF0ZQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKKyAgICAgICAgZmluaXNoOiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLnJhbmdlWzFdID0gbGFzdEluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGV4dHJhLmxvYykgeworICAgICAgICAgICAgICAgIHRoaXMubG9jLmVuZCA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgbGluZTogbGFzdExpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAg
IGNvbHVtbjogbGFzdEluZGV4IC0gbGFzdExpbmVTdGFydAorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgaWYgKGV4dHJhLnNvdXJjZSkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLmxvYy5zb3VyY2UgPSBleHRyYS5zb3VyY2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQogCi0gICAgICAgIGNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJl
bCwgYm9keSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguTGFiZWxlZFN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsCi0g
ICAgICAgICAgICAgICAgYm9keTogYm9keQotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlm
IChleHRyYS5hdHRhY2hDb21tZW50KSB7CisgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ29t
bWVudCgpOworICAgICAgICAgICAgfQogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZUxpdGVy
YWw6IGZ1bmN0aW9uICh0b2tlbikgewotICAgICAgICAgICAgdmFyIG9iamVjdCA9IHsKLSAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguTGl0ZXJhbCwKLSAgICAgICAgICAgICAgICB2YWx1ZTog
dG9rZW4udmFsdWUsCi0gICAgICAgICAgICAgICAgcmF3OiBzb3VyY2Uuc2xpY2UodG9rZW4ucmFu
Z2VbMF0sIHRva2VuLnJhbmdlWzFdKQotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoQXJy
YXlFeHByZXNzaW9uOiBmdW5jdGlvbiAoZWxlbWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMudHlw
ZSA9IFN5bnRheC5BcnJheUV4cHJlc3Npb247CisgICAgICAgICAgICB0aGlzLmVsZW1lbnRzID0g
ZWxlbWVudHM7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgIH0sCisKKyAgICAgICAgZmluaXNoQXJyYXlQYXR0ZXJuOiBmdW5jdGlv
biAoZWxlbWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5BcnJheVBhdHRl
cm47CisgICAgICAgICAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVudHM7CisgICAgICAgICAgICB0
aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAg
ICAgICAgZmluaXNoQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChwYXJhbXMsIGRl
ZmF1bHRzLCBib2R5LCBleHByZXNzaW9uKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50
YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247CisgICAgICAgICAgICB0aGlzLmlkID0gbnVsbDsK
KyAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOworICAgICAgICAgICAgdGhpcy5kZWZh
dWx0cyA9IGRlZmF1bHRzOworICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICAgICAg
ICAgIHRoaXMuZ2VuZXJhdG9yID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24g
PSBleHByZXNzaW9uOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaEFzc2lnbm1lbnRFeHByZXNz
aW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7CisgICAgICAgICAgICB0aGlz
LnR5cGUgPSBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb247CisgICAgICAgICAgICB0aGlzLm9w
ZXJhdG9yID0gb3BlcmF0b3I7CisgICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OworICAgICAg
ICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0OworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaEFzc2ln
bm1lbnRQYXR0ZXJuOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgICAgIHRoaXMu
dHlwZSA9IFN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjsKKyAgICAgICAgICAgIHRoaXMubGVmdCA9
IGxlZnQ7CisgICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7CisgICAgICAgICAgICB0aGlz
LmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAgICAg
ICAgZmluaXNoQmluYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBsZWZ0LCByaWdo
dCkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9wZXJh
dG9yID09PSAnJiYnKSA/IFN5bnRheC5Mb2dpY2FsRXhwcmVzc2lvbiA6IFN5bnRheC5CaW5hcnlF
eHByZXNzaW9uOworICAgICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOworICAgICAg
ICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKKyAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDsK
KyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfSwKKworICAgICAgICBmaW5pc2hCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24gKGJvZHkp
IHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5CbG9ja1N0YXRlbWVudDsKKyAgICAg
ICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAgICAgICAgZmluaXNoQnJlYWtT
dGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3lu
dGF4LkJyZWFrU3RhdGVtZW50OworICAgICAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOworICAg
ICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICB9LAorCisgICAgICAgIGZpbmlzaENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiAoY2FsbGVlLCBh
cmdzKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQ2FsbEV4cHJlc3Npb247Cisg
ICAgICAgICAgICB0aGlzLmNhbGxlZSA9IGNhbGxlZTsKKyAgICAgICAgICAgIHRoaXMuYXJndW1l
bnRzID0gYXJnczsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5pc2hDYXRjaENsYXVzZTogZnVuY3Rp
b24gKHBhcmFtLCBib2R5KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQ2F0Y2hD
bGF1c2U7CisgICAgICAgICAgICB0aGlzLnBhcmFtID0gcGFyYW07CisgICAgICAgICAgICB0aGlz
LmJvZHkgPSBib2R5OworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaENsYXNzQm9keTogZnVuY3Rp
b24gKGJvZHkpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5DbGFzc0JvZHk7Cisg
ICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaENs
YXNzRGVjbGFyYXRpb246IGZ1bmN0aW9uIChpZCwgc3VwZXJDbGFzcywgYm9keSkgeworICAgICAg
ICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNsYXNzRGVjbGFyYXRpb247CisgICAgICAgICAgICB0
aGlzLmlkID0gaWQ7CisgICAgICAgICAgICB0aGlzLnN1cGVyQ2xhc3MgPSBzdXBlckNsYXNzOwor
ICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5pc2hD
bGFzc0V4cHJlc3Npb246IGZ1bmN0aW9uIChpZCwgc3VwZXJDbGFzcywgYm9keSkgeworICAgICAg
ICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNsYXNzRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHRo
aXMuaWQgPSBpZDsKKyAgICAgICAgICAgIHRoaXMuc3VwZXJDbGFzcyA9IHN1cGVyQ2xhc3M7Cisg
ICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaENv
bmRpdGlvbmFsRXhwcmVzc2lvbjogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0
ZSkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNvbmRpdGlvbmFsRXhwcmVzc2lv
bjsKKyAgICAgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7CisgICAgICAgICAgICB0aGlzLmNvbnNl
cXVlbnQgPSBjb25zZXF1ZW50OworICAgICAgICAgICAgdGhpcy5hbHRlcm5hdGUgPSBhbHRlcm5h
dGU7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgIH0sCisKKyAgICAgICAgZmluaXNoQ29udGludWVTdGF0ZW1lbnQ6IGZ1bmN0aW9u
IChsYWJlbCkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNvbnRpbnVlU3RhdGVt
ZW50OworICAgICAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOworICAgICAgICAgICAgdGhpcy5m
aW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAg
IGZpbmlzaERlYnVnZ2VyU3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlz
LnR5cGUgPSBTeW50YXguRGVidWdnZXJTdGF0ZW1lbnQ7CisgICAgICAgICAgICB0aGlzLmZpbmlz
aCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAgICAgICAgZmlu
aXNoRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gKGJvZHksIHRlc3QpIHsKKyAgICAgICAgICAg
IHRoaXMudHlwZSA9IFN5bnRheC5Eb1doaWxlU3RhdGVtZW50OworICAgICAgICAgICAgdGhpcy5i
b2R5ID0gYm9keTsKKyAgICAgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7CisgICAgICAgICAgICB0
aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAg
ICAgICAgZmluaXNoRW1wdHlTdGF0ZW1lbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRo
aXMudHlwZSA9IFN5bnRheC5FbXB0eVN0YXRlbWVudDsKKyAgICAgICAgICAgIHRoaXMuZmluaXNo
KCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5p
c2hFeHByZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbiAoZXhwcmVzc2lvbikgeworICAgICAgICAg
ICAgdGhpcy50eXBlID0gU3ludGF4LkV4cHJlc3Npb25TdGF0ZW1lbnQ7CisgICAgICAgICAgICB0
aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaEZv
clN0YXRlbWVudDogZnVuY3Rpb24gKGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgeworICAgICAg
ICAgICAgdGhpcy50eXBlID0gU3ludGF4LkZvclN0YXRlbWVudDsKKyAgICAgICAgICAgIHRoaXMu
aW5pdCA9IGluaXQ7CisgICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OworICAgICAgICAgICAg
dGhpcy51cGRhdGUgPSB1cGRhdGU7CisgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAg
ICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICB9LAorCisgICAgICAgIGZpbmlzaEZvck9mU3RhdGVtZW50OiBmdW5jdGlvbiAobGVmdCwgcmln
aHQsIGJvZHkpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Gb3JPZlN0YXRlbWVu
dDsKKyAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7CisgICAgICAgICAgICB0aGlzLnJpZ2h0
ID0gcmlnaHQ7CisgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAgICAgICAgICAgdGhp
cy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAg
ICAgIGZpbmlzaEZvckluU3RhdGVtZW50OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvZHkpIHsK
KyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Gb3JJblN0YXRlbWVudDsKKyAgICAgICAg
ICAgIHRoaXMubGVmdCA9IGxlZnQ7CisgICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7Cisg
ICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAgICAgICAgICAgdGhpcy5lYWNoID0gZmFs
c2U7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgIH0sCisKKyAgICAgICAgZmluaXNoRnVuY3Rpb25EZWNsYXJhdGlvbjogZnVuY3Rp
b24gKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5LCBnZW5lcmF0b3IpIHsKKyAgICAgICAgICAg
IHRoaXMudHlwZSA9IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAgICAgICAgdGhp
cy5pZCA9IGlkOworICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7CisgICAgICAgICAg
ICB0aGlzLmRlZmF1bHRzID0gZGVmYXVsdHM7CisgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5
OworICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgICAgICAgICB0
aGlzLmV4cHJlc3Npb24gPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5pc2hGdW5jdGlv
bkV4cHJlc3Npb246IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSwgZ2VuZXJh
dG9yKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9u
OworICAgICAgICAgICAgdGhpcy5pZCA9IGlkOworICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBw
YXJhbXM7CisgICAgICAgICAgICB0aGlzLmRlZmF1bHRzID0gZGVmYXVsdHM7CisgICAgICAgICAg
ICB0aGlzLmJvZHkgPSBib2R5OworICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0
b3I7CisgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTsKKyAgICAgICAgICAgIHRo
aXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAg
ICAgICBmaW5pc2hJZGVudGlmaWVyOiBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICAgICAgdGhp
cy50eXBlID0gU3ludGF4LklkZW50aWZpZXI7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1l
OworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaElmU3RhdGVtZW50OiBmdW5jdGlvbiAodGVzdCwg
Y29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXgu
SWZTdGF0ZW1lbnQ7CisgICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OworICAgICAgICAgICAg
dGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDsKKyAgICAgICAgICAgIHRoaXMuYWx0ZXJuYXRl
ID0gYWx0ZXJuYXRlOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaExhYmVsZWRTdGF0ZW1lbnQ6
IGZ1bmN0aW9uIChsYWJlbCwgYm9keSkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4
LkxhYmVsZWRTdGF0ZW1lbnQ7CisgICAgICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7CisgICAg
ICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaExpdGVy
YWw6IGZ1bmN0aW9uICh0b2tlbikgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4Lkxp
dGVyYWw7CisgICAgICAgICAgICB0aGlzLnZhbHVlID0gdG9rZW4udmFsdWU7CisgICAgICAgICAg
ICB0aGlzLnJhdyA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTsKICAgICAg
ICAgICAgIGlmICh0b2tlbi5yZWdleCkgewotICAgICAgICAgICAgICAgIG9iamVjdC5yZWdleCA9
IHRva2VuLnJlZ2V4OworICAgICAgICAgICAgICAgIHRoaXMucmVnZXggPSB0b2tlbi5yZWdleDsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB0
aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAg
ICAgICAgY3JlYXRlTWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFjY2Vzc29yLCBvYmplY3Qs
IHByb3BlcnR5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5NZW1iZXJFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIGNvbXB1dGVkOiBhY2Nl
c3NvciA9PT0gJ1snLAotICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LAotICAgICAgICAg
ICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eQotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNo
TWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFjY2Vzc29yLCBvYmplY3QsIHByb3BlcnR5KSB7
CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguTWVtYmVyRXhwcmVzc2lvbjsKKyAgICAg
ICAgICAgIHRoaXMuY29tcHV0ZWQgPSBhY2Nlc3NvciA9PT0gJ1snOworICAgICAgICAgICAgdGhp
cy5vYmplY3QgPSBvYmplY3Q7CisgICAgICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7
CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRlTmV3RXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxl
ZSwgYXJncykgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguTmV3RXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBjYWxsZWU6IGNhbGxlZSwKLSAg
ICAgICAgICAgICAgICAnYXJndW1lbnRzJzogYXJncwotICAgICAgICAgICAgfTsKKyAgICAgICAg
ZmluaXNoTWV0YVByb3BlcnR5OiBmdW5jdGlvbiAobWV0YSwgcHJvcGVydHkpIHsKKyAgICAgICAg
ICAgIHRoaXMudHlwZSA9IFN5bnRheC5NZXRhUHJvcGVydHk7CisgICAgICAgICAgICB0aGlzLm1l
dGEgPSBtZXRhOworICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworICAgICAg
ICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9
LAogCi0gICAgICAgIGNyZWF0ZU9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIChwcm9wZXJ0aWVz
KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5P
YmplY3RFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMK
LSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaE5ld0V4cHJlc3Npb246IGZ1bmN0aW9uIChj
YWxsZWUsIGFyZ3MpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5OZXdFeHByZXNz
aW9uOworICAgICAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7CisgICAgICAgICAgICB0aGlz
LmFyZ3VtZW50cyA9IGFyZ3M7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRlUG9zdGZpeEV4cHJl
c3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgYXJndW1lbnQpIHsKLSAgICAgICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVwZGF0ZUV4cHJlc3Npb24sCi0gICAg
ICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAotICAgICAgICAgICAgICAgIGFyZ3VtZW50
OiBhcmd1bWVudCwKLSAgICAgICAgICAgICAgICBwcmVmaXg6IGZhbHNlCi0gICAgICAgICAgICB9
OworICAgICAgICBmaW5pc2hPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbiAocHJvcGVydGllcykg
eworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb247CisgICAg
ICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworICAgICAgICAgICAgdGhpcy5m
aW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0gICAgICAg
IGNyZWF0ZVByb2dyYW06IGZ1bmN0aW9uIChib2R5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Qcm9ncmFtLAotICAgICAgICAgICAgICAgIGJv
ZHk6IGJvZHkKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaE9iamVjdFBhdHRlcm46IGZ1
bmN0aW9uIChwcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguT2Jq
ZWN0UGF0dGVybjsKKyAgICAgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7Cisg
ICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
ICAgIH0sCiAKLSAgICAgICAgY3JlYXRlUHJvcGVydHk6IGZ1bmN0aW9uIChraW5kLCBrZXksIHZh
bHVlLCBtZXRob2QsIHNob3J0aGFuZCwgY29tcHV0ZWQpIHsKLSAgICAgICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlByb3BlcnR5LAotICAgICAgICAgICAgICAg
IGtleToga2V5LAotICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKLSAgICAgICAgICAgICAg
ICBraW5kOiBraW5kLAotICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLAotICAgICAgICAg
ICAgICAgIHNob3J0aGFuZDogc2hvcnRoYW5kLAotICAgICAgICAgICAgICAgIGNvbXB1dGVkOiBj
b21wdXRlZAotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoUG9zdGZpeEV4cHJlc3Npb246
IGZ1bmN0aW9uIChvcGVyYXRvciwgYXJndW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9
IFN5bnRheC5VcGRhdGVFeHByZXNzaW9uOworICAgICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9w
ZXJhdG9yOworICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OworICAgICAgICAg
ICAgdGhpcy5wcmVmaXggPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAotICAgICAgICBjcmVhdGVSZXR1cm5T
dGF0ZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmV0dXJuU3RhdGVtZW50LAotICAgICAgICAgICAg
ICAgIGFyZ3VtZW50OiBhcmd1bWVudAotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoUHJv
Z3JhbTogZnVuY3Rpb24gKGJvZHksIHNvdXJjZVR5cGUpIHsKKyAgICAgICAgICAgIHRoaXMudHlw
ZSA9IFN5bnRheC5Qcm9ncmFtOworICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICAg
ICAgICAgIHRoaXMuc291cmNlVHlwZSA9IHNvdXJjZVR5cGU7CisgICAgICAgICAgICB0aGlzLmZp
bmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAgICAgICAg
Y3JlYXRlU2VxdWVuY2VFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwcmVzc2lvbnMpIHsKLSAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlNlcXVlbmNlRXhw
cmVzc2lvbiwKLSAgICAgICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lvbnMKLSAgICAg
ICAgICAgIH07CisgICAgICAgIGZpbmlzaFByb3BlcnR5OiBmdW5jdGlvbiAoa2luZCwga2V5LCBj
b21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSB7CisgICAgICAgICAgICB0aGlzLnR5
cGUgPSBTeW50YXguUHJvcGVydHk7CisgICAgICAgICAgICB0aGlzLmtleSA9IGtleTsKKyAgICAg
ICAgICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDsKKyAgICAgICAgICAgIHRoaXMudmFsdWUg
PSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMua2luZCA9IGtpbmQ7CisgICAgICAgICAgICB0aGlz
Lm1ldGhvZCA9IG1ldGhvZDsKKyAgICAgICAgICAgIHRoaXMuc2hvcnRoYW5kID0gc2hvcnRoYW5k
OworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZVN3aXRjaENhc2U6IGZ1bmN0aW9uICh0ZXN0LCBj
b25zZXF1ZW50KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5Td2l0Y2hDYXNlLAotICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCi0gICAgICAg
ICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudAotICAgICAgICAgICAgfTsKKyAgICAgICAg
ZmluaXNoUmVzdEVsZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkgeworICAgICAgICAgICAgdGhp
cy50eXBlID0gU3ludGF4LlJlc3RFbGVtZW50OworICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9
IGFyZ3VtZW50OworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZVN3aXRjaFN0YXRlbWVudDogZnVu
Y3Rpb24gKGRpc2NyaW1pbmFudCwgY2FzZXMpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4LlN3aXRjaFN0YXRlbWVudCwKLSAgICAgICAgICAgICAg
ICBkaXNjcmltaW5hbnQ6IGRpc2NyaW1pbmFudCwKLSAgICAgICAgICAgICAgICBjYXNlczogY2Fz
ZXMKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaFJldHVyblN0YXRlbWVudDogZnVuY3Rp
b24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguUmV0dXJuU3Rh
dGVtZW50OworICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OworICAgICAgICAg
ICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAog
Ci0gICAgICAgIGNyZWF0ZVRoaXNFeHByZXNzaW9uOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UaGlzRXhwcmVzc2lvbgot
ICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoU2VxdWVuY2VFeHByZXNzaW9uOiBmdW5jdGlv
biAoZXhwcmVzc2lvbnMpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5TZXF1ZW5j
ZUV4cHJlc3Npb247CisgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7
CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRlVGhyb3dTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChhcmd1
bWVudCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguVGhyb3dTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50Ci0g
ICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hTcHJlYWRFbGVtZW50OiBmdW5jdGlvbiAoYXJn
dW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5TcHJlYWRFbGVtZW50Owor
ICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OworICAgICAgICAgICAgdGhpcy5m
aW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0gICAgICAg
IGNyZWF0ZVRyeVN0YXRlbWVudDogZnVuY3Rpb24gKGJsb2NrLCBndWFyZGVkSGFuZGxlcnMsIGhh
bmRsZXJzLCBmaW5hbGl6ZXIpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlRyeVN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICBibG9jazogYmxv
Y2ssCi0gICAgICAgICAgICAgICAgZ3VhcmRlZEhhbmRsZXJzOiBndWFyZGVkSGFuZGxlcnMsCi0g
ICAgICAgICAgICAgICAgaGFuZGxlcnM6IGhhbmRsZXJzLAotICAgICAgICAgICAgICAgIGZpbmFs
aXplcjogZmluYWxpemVyCi0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hTd2l0Y2hDYXNl
OiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCkgeworICAgICAgICAgICAgdGhpcy50eXBlID0g
U3ludGF4LlN3aXRjaENhc2U7CisgICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OworICAgICAg
ICAgICAgdGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDsKKyAgICAgICAgICAgIHRoaXMuZmlu
aXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAotICAgICAgICBj
cmVhdGVVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgYXJndW1lbnQpIHsKLSAg
ICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJysrJyB8fCBvcGVyYXRvciA9PT0gJy0tJykgewot
ICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5VcGRhdGVFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0
b3IsCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCwKLSAgICAgICAgICAg
ICAgICAgICAgcHJlZml4OiB0cnVlCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVuYXJ5
RXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsCi0gICAgICAg
ICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAotICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1
ZQotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoU3VwZXI6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5TdXBlcjsKKyAgICAgICAgICAgIHRoaXMuZmlu
aXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAotICAgICAgICBj
cmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb25zLCBraW5kKSB7
Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5WYXJp
YWJsZURlY2xhcmF0aW9uLAotICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogZGVjbGFyYXRp
b25zLAotICAgICAgICAgICAgICAgIGtpbmQ6IGtpbmQKLSAgICAgICAgICAgIH07CisgICAgICAg
IGZpbmlzaFN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24gKGRpc2NyaW1pbmFudCwgY2FzZXMpIHsK
KyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQ7CisgICAgICAg
ICAgICB0aGlzLmRpc2NyaW1pbmFudCA9IGRpc2NyaW1pbmFudDsKKyAgICAgICAgICAgIHRoaXMu
Y2FzZXMgPSBjYXNlczsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAotICAgICAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0
b3I6IGZ1bmN0aW9uIChpZCwgaW5pdCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguVmFyaWFibGVEZWNsYXJhdG9yLAotICAgICAgICAgICAgICAg
IGlkOiBpZCwKLSAgICAgICAgICAgICAgICBpbml0OiBpbml0Ci0gICAgICAgICAgICB9OworICAg
ICAgICBmaW5pc2hUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uICh0YWcsIHF1YXNp
KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVGFnZ2VkVGVtcGxhdGVFeHByZXNz
aW9uOworICAgICAgICAgICAgdGhpcy50YWcgPSB0YWc7CisgICAgICAgICAgICB0aGlzLnF1YXNp
ID0gcXVhc2k7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRlV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0
aW9uICh0ZXN0LCBib2R5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAg
IHR5cGU6IFN5bnRheC5XaGlsZVN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0
LAotICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKLSAgICAgICAgICAgIH07CisgICAgICAgIGZp
bmlzaFRlbXBsYXRlRWxlbWVudDogZnVuY3Rpb24gKHZhbHVlLCB0YWlsKSB7CisgICAgICAgICAg
ICB0aGlzLnR5cGUgPSBTeW50YXguVGVtcGxhdGVFbGVtZW50OworICAgICAgICAgICAgdGhpcy52
YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy50YWlsID0gdGFpbDsKKyAgICAgICAgICAg
IHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAot
ICAgICAgICBjcmVhdGVXaXRoU3RhdGVtZW50OiBmdW5jdGlvbiAob2JqZWN0LCBib2R5KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5XaXRoU3Rh
dGVtZW50LAotICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LAotICAgICAgICAgICAgICAg
IGJvZHk6IGJvZHkKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaFRlbXBsYXRlTGl0ZXJh
bDogZnVuY3Rpb24gKHF1YXNpcywgZXhwcmVzc2lvbnMpIHsKKyAgICAgICAgICAgIHRoaXMudHlw
ZSA9IFN5bnRheC5UZW1wbGF0ZUxpdGVyYWw7CisgICAgICAgICAgICB0aGlzLnF1YXNpcyA9IHF1
YXNpczsKKyAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uczsKKyAgICAg
ICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAg
fSwKIAotICAgICAgICBjcmVhdGVUZW1wbGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uICh2YWx1ZSwgdGFp
bCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
VGVtcGxhdGVFbGVtZW50LAotICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKLSAgICAgICAg
ICAgICAgICB0YWlsOiB0YWlsCi0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hUaGlzRXhw
cmVzc2lvbjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRo
aXNFeHByZXNzaW9uOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZVRlbXBsYXRlTGl0ZXJhbDog
ZnVuY3Rpb24gKHF1YXNpcywgZXhwcmVzc2lvbnMpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlRlbXBsYXRlTGl0ZXJhbCwKLSAgICAgICAgICAg
ICAgICBxdWFzaXM6IHF1YXNpcywKLSAgICAgICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVz
c2lvbnMKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaFRocm93U3RhdGVtZW50OiBmdW5j
dGlvbiAoYXJndW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5UaHJvd1N0
YXRlbWVudDsKKyAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKyAgICAgICAg
ICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwK
IAotICAgICAgICBjcmVhdGVTcHJlYWRFbGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKLSAg
ICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlNwcmVhZEVs
ZW1lbnQsCi0gICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50Ci0gICAgICAgICAgICB9
OworICAgICAgICBmaW5pc2hUcnlTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChibG9jaywgaGFuZGxlciwg
ZmluYWxpemVyKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVHJ5U3RhdGVtZW50
OworICAgICAgICAgICAgdGhpcy5ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgdGhpcy5ndWFy
ZGVkSGFuZGxlcnMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVyID8g
W2hhbmRsZXJdIDogW107CisgICAgICAgICAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOworICAg
ICAgICAgICAgdGhpcy5maW5hbGl6ZXIgPSBmaW5hbGl6ZXI7CisgICAgICAgICAgICB0aGlzLmZp
bmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAgICAgICAg
Y3JlYXRlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBmdW5jdGlvbiAodGFnLCBxdWFzaSkgewot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVGFnZ2Vk
VGVtcGxhdGVFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIHRhZzogdGFnLAotICAgICAgICAg
ICAgICAgIHF1YXNpOiBxdWFzaQotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoVW5hcnlF
eHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7CisgICAgICAgICAgICB0
aGlzLnR5cGUgPSAob3BlcmF0b3IgPT09ICcrKycgfHwgb3BlcmF0b3IgPT09ICctLScpID8gU3lu
dGF4LlVwZGF0ZUV4cHJlc3Npb24gOiBTeW50YXguVW5hcnlFeHByZXNzaW9uOworICAgICAgICAg
ICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOworICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9
IGFyZ3VtZW50OworICAgICAgICAgICAgdGhpcy5wcmVmaXggPSB0cnVlOworICAgICAgICAgICAg
dGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0g
ICAgICAgIGNyZWF0ZUFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAocGFyYW1zLCBk
ZWZhdWx0cywgYm9keSwgcmVzdCwgZXhwcmVzc2lvbikgewotICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24sCi0g
ICAgICAgICAgICAgICAgaWQ6IG51bGwsCi0gICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMs
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdHM6IGRlZmF1bHRzLAotICAgICAgICAgICAgICAgIGJv
ZHk6IGJvZHksCi0gICAgICAgICAgICAgICAgcmVzdDogcmVzdCwKLSAgICAgICAgICAgICAgICBn
ZW5lcmF0b3I6IGZhbHNlLAotICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24K
LSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb246IGZ1bmN0
aW9uIChkZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5WYXJp
YWJsZURlY2xhcmF0aW9uOworICAgICAgICAgICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJh
dGlvbnM7CisgICAgICAgICAgICB0aGlzLmtpbmQgPSAndmFyJzsKKyAgICAgICAgICAgIHRoaXMu
ZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAotICAgICAg
ICBjcmVhdGVNZXRob2REZWZpbml0aW9uOiBmdW5jdGlvbiAocHJvcGVydHlUeXBlLCBraW5kLCBr
ZXksIHZhbHVlLCBjb21wdXRlZCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguTWV0aG9kRGVmaW5pdGlvbiwKLSAgICAgICAgICAgICAgICBrZXk6
IGtleSwKLSAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCi0gICAgICAgICAgICAgICAga2lu
ZDoga2luZCwKLSAgICAgICAgICAgICAgICAnc3RhdGljJzogcHJvcGVydHlUeXBlID09PSBDbGFz
c1Byb3BlcnR5VHlwZS5zdGF0aWMsCi0gICAgICAgICAgICAgICAgY29tcHV0ZWQ6IGNvbXB1dGVk
Ci0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hMZXhpY2FsRGVjbGFyYXRpb246IGZ1bmN0
aW9uIChkZWNsYXJhdGlvbnMsIGtpbmQpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRh
eC5WYXJpYWJsZURlY2xhcmF0aW9uOworICAgICAgICAgICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBk
ZWNsYXJhdGlvbnM7CisgICAgICAgICAgICB0aGlzLmtpbmQgPSBraW5kOworICAgICAgICAgICAg
dGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0g
ICAgICAgIGNyZWF0ZUNsYXNzQm9keTogZnVuY3Rpb24gKGJvZHkpIHsKLSAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNsYXNzQm9keSwKLSAgICAgICAg
ICAgICAgICBib2R5OiBib2R5Ci0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hWYXJpYWJs
ZURlY2xhcmF0b3I6IGZ1bmN0aW9uIChpZCwgaW5pdCkgeworICAgICAgICAgICAgdGhpcy50eXBl
ID0gU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvcjsKKyAgICAgICAgICAgIHRoaXMuaWQgPSBpZDsK
KyAgICAgICAgICAgIHRoaXMuaW5pdCA9IGluaXQ7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgp
OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRl
Q2xhc3NFeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKLSAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNsYXNzRXhwcmVz
c2lvbiwKLSAgICAgICAgICAgICAgICBpZDogaWQsCi0gICAgICAgICAgICAgICAgc3VwZXJDbGFz
czogc3VwZXJDbGFzcywKLSAgICAgICAgICAgICAgICBib2R5OiBib2R5Ci0gICAgICAgICAgICB9
OworICAgICAgICBmaW5pc2hXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gKHRlc3QsIGJvZHkpIHsK
KyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5XaGlsZVN0YXRlbWVudDsKKyAgICAgICAg
ICAgIHRoaXMudGVzdCA9IHRlc3Q7CisgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAg
ICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg
ICB9LAogCi0gICAgICAgIGNyZWF0ZUNsYXNzRGVjbGFyYXRpb246IGZ1bmN0aW9uIChpZCwgc3Vw
ZXJDbGFzcywgYm9keSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguQ2xhc3NEZWNsYXJhdGlvbiwKLSAgICAgICAgICAgICAgICBpZDogaWQsCi0g
ICAgICAgICAgICAgICAgc3VwZXJDbGFzczogc3VwZXJDbGFzcywKLSAgICAgICAgICAgICAgICBi
b2R5OiBib2R5Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZU1v
ZHVsZVNwZWNpZmllcjogZnVuY3Rpb24gKHRva2VuKSB7Ci0gICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Nb2R1bGVTcGVjaWZpZXIsCi0gICAgICAgICAg
ICAgICAgdmFsdWU6IHRva2VuLnZhbHVlLAotICAgICAgICAgICAgICAgIHJhdzogc291cmNlLnNs
aWNlKHRva2VuLnJhbmdlWzBdLCB0b2tlbi5yYW5nZVsxXSkKLSAgICAgICAgICAgIH07CisgICAg
ICAgIGZpbmlzaFdpdGhTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChvYmplY3QsIGJvZHkpIHsKKyAgICAg
ICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5XaXRoU3RhdGVtZW50OworICAgICAgICAgICAgdGhp
cy5vYmplY3QgPSBvYmplY3Q7CisgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAgICAg
ICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9
LAogCi0gICAgICAgIGNyZWF0ZUV4cG9ydFNwZWNpZmllcjogZnVuY3Rpb24gKGlkLCBuYW1lKSB7
Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FeHBv
cnRTcGVjaWZpZXIsCi0gICAgICAgICAgICAgICAgaWQ6IGlkLAotICAgICAgICAgICAgICAgIG5h
bWU6IG5hbWUKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaEV4cG9ydFNwZWNpZmllcjog
ZnVuY3Rpb24gKGxvY2FsLCBleHBvcnRlZCkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3lu
dGF4LkV4cG9ydFNwZWNpZmllcjsKKyAgICAgICAgICAgIHRoaXMuZXhwb3J0ZWQgPSBleHBvcnRl
ZCB8fCBsb2NhbDsKKyAgICAgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDsKKyAgICAgICAgICAg
IHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAot
ICAgICAgICBjcmVhdGVFeHBvcnRCYXRjaFNwZWNpZmllcjogZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRXhwb3J0QmF0Y2hT
cGVjaWZpZXIKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaEltcG9ydERlZmF1bHRTcGVj
aWZpZXI6IGZ1bmN0aW9uIChsb2NhbCkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4
LkltcG9ydERlZmF1bHRTcGVjaWZpZXI7CisgICAgICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7
CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogZnVuY3Rp
b24gKGlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5JbXBvcnREZWZhdWx0U3BlY2lmaWVyLAotICAgICAgICAgICAgICAgIGlkOiBpZAotICAg
ICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiBmdW5j
dGlvbiAobG9jYWwpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5JbXBvcnROYW1l
c3BhY2VTcGVjaWZpZXI7CisgICAgICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7CisgICAgICAg
ICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0s
CiAKLSAgICAgICAgY3JlYXRlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiBmdW5jdGlvbiAoaWQp
IHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lklt
cG9ydE5hbWVzcGFjZVNwZWNpZmllciwKLSAgICAgICAgICAgICAgICBpZDogaWQKLSAgICAgICAg
ICAgIH07CisgICAgICAgIGZpbmlzaEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IGZ1bmN0aW9uIChk
ZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgc3JjKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBT
eW50YXguRXhwb3J0TmFtZWREZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIHRoaXMuZGVjbGFyYXRp
b24gPSBkZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIHRoaXMuc3BlY2lmaWVycyA9IHNwZWNpZmll
cnM7CisgICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNyYzsKKyAgICAgICAgICAgIHRoaXMuZmlu
aXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAotICAgICAgICBj
cmVhdGVFeHBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlzRGVmYXVsdCwgZGVjbGFyYXRpb24s
IHNwZWNpZmllcnMsIHNyYykgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguRXhwb3J0RGVjbGFyYXRpb24sCi0gICAgICAgICAgICAgICAgJ2RlZmF1
bHQnOiAhIWlzRGVmYXVsdCwKLSAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbjogZGVjbGFyYXRp
b24sCi0gICAgICAgICAgICAgICAgc3BlY2lmaWVyczogc3BlY2lmaWVycywKLSAgICAgICAgICAg
ICAgICBzb3VyY2U6IHNyYwotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoRXhwb3J0RGVm
YXVsdERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgIHRo
aXMudHlwZSA9IFN5bnRheC5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb247CisgICAgICAgICAgICB0
aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgp
OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRl
SW1wb3J0U3BlY2lmaWVyOiBmdW5jdGlvbiAoaWQsIG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkltcG9ydFNwZWNpZmllciwKLSAgICAg
ICAgICAgICAgICBpZDogaWQsCi0gICAgICAgICAgICAgICAgbmFtZTogbmFtZQotICAgICAgICAg
ICAgfTsKKyAgICAgICAgZmluaXNoRXhwb3J0QWxsRGVjbGFyYXRpb246IGZ1bmN0aW9uIChzcmMp
IHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHBvcnRBbGxEZWNsYXJhdGlvbjsK
KyAgICAgICAgICAgIHRoaXMuc291cmNlID0gc3JjOworICAgICAgICAgICAgdGhpcy5maW5pc2go
KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0
ZUltcG9ydERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoc3BlY2lmaWVycywgc3JjKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5JbXBvcnREZWNsYXJh
dGlvbiwKLSAgICAgICAgICAgICAgICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzLAotICAgICAgICAg
ICAgICAgIHNvdXJjZTogc3JjCi0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hJbXBvcnRT
cGVjaWZpZXI6IGZ1bmN0aW9uIChsb2NhbCwgaW1wb3J0ZWQpIHsKKyAgICAgICAgICAgIHRoaXMu
dHlwZSA9IFN5bnRheC5JbXBvcnRTcGVjaWZpZXI7CisgICAgICAgICAgICB0aGlzLmxvY2FsID0g
bG9jYWwgfHwgaW1wb3J0ZWQ7CisgICAgICAgICAgICB0aGlzLmltcG9ydGVkID0gaW1wb3J0ZWQ7
CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRlWWllbGRFeHByZXNzaW9uOiBmdW5jdGlvbiAoYXJn
dW1lbnQsIGRsZykgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguWWllbGRFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1
bWVudCwKLSAgICAgICAgICAgICAgICBkZWxlZ2F0ZTogZGxnCi0gICAgICAgICAgICB9OworICAg
ICAgICBmaW5pc2hJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24gKHNwZWNpZmllcnMsIHNyYykg
eworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkltcG9ydERlY2xhcmF0aW9uOworICAg
ICAgICAgICAgdGhpcy5zcGVjaWZpZXJzID0gc3BlY2lmaWVyczsKKyAgICAgICAgICAgIHRoaXMu
c291cmNlID0gc3JjOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZUNvbXByZWhlbnNpb25FeHBy
ZXNzaW9uOiBmdW5jdGlvbiAoZmlsdGVyLCBibG9ja3MsIGJvZHkpIHsKLSAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNvbXByZWhlbnNpb25FeHByZXNz
aW9uLAotICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLAotICAgICAgICAgICAgICAgIGJs
b2NrczogYmxvY2tzLAotICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKLSAgICAgICAgICAgIH07
CisgICAgICAgIGZpbmlzaFlpZWxkRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFyZ3VtZW50LCBkZWxl
Z2F0ZSkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LllpZWxkRXhwcmVzc2lvbjsK
KyAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKyAgICAgICAgICAgIHRoaXMu
ZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQotCiAgICAgfTsKIAotICAgIC8vIFJldHVybiB0
cnVlIGlmIHRoZXJlIGlzIGEgbGluZSB0ZXJtaW5hdG9yIGJlZm9yZSB0aGUgbmV4dCB0b2tlbi4K
LQotICAgIGZ1bmN0aW9uIHBlZWtMaW5lVGVybWluYXRvcigpIHsKLSAgICAgICAgdmFyIHBvcywg
bGluZSwgc3RhcnQsIGZvdW5kOwogCi0gICAgICAgIHBvcyA9IGluZGV4OwotICAgICAgICBsaW5l
ID0gbGluZU51bWJlcjsKLSAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7Ci0gICAgICAgIHNraXBD
b21tZW50KCk7Ci0gICAgICAgIGZvdW5kID0gbGluZU51bWJlciAhPT0gbGluZTsKLSAgICAgICAg
aW5kZXggPSBwb3M7Ci0gICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lOwotICAgICAgICBsaW5lU3Rh
cnQgPSBzdGFydDsKLQotICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgfQorICAgIGZ1bmN0aW9u
IHJlY29yZEVycm9yKGVycm9yKSB7CisgICAgICAgIHZhciBlLCBleGlzdGluZzsKIAotICAgIC8v
IFRocm93IGFuIGV4Y2VwdGlvbgotCi0gICAgZnVuY3Rpb24gdGhyb3dFcnJvcih0b2tlbiwgbWVz
c2FnZUZvcm1hdCkgewotICAgICAgICB2YXIgZXJyb3IsCi0gICAgICAgICAgICBhcmdzID0gQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSwKLSAgICAgICAgICAgIG1zZyA9
IG1lc3NhZ2VGb3JtYXQucmVwbGFjZSgKLSAgICAgICAgICAgICAgICAvJShcZCkvZywKLSAgICAg
ICAgICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGlkeCkgewotICAgICAgICAgICAgICAgICAgICBh
c3NlcnQoaWR4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJh
bmdlJyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2lkeF07Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgKTsKLQotICAgICAgICBpZiAodHlwZW9mIHRva2VuLmxpbmVO
dW1iZXIgPT09ICdudW1iZXInKSB7Ci0gICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignTGlu
ZSAnICsgdG9rZW4ubGluZU51bWJlciArICc6ICcgKyBtc2cpOwotICAgICAgICAgICAgZXJyb3Iu
aW5kZXggPSB0b2tlbi5yYW5nZVswXTsKLSAgICAgICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSB0
b2tlbi5saW5lTnVtYmVyOwotICAgICAgICAgICAgZXJyb3IuY29sdW1uID0gdG9rZW4ucmFuZ2Vb
MF0gLSBsaW5lU3RhcnQgKyAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyb3Ig
PSBuZXcgRXJyb3IoJ0xpbmUgJyArIGxpbmVOdW1iZXIgKyAnOiAnICsgbXNnKTsKLSAgICAgICAg
ICAgIGVycm9yLmluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICBlcnJvci5saW5lTnVtYmVyID0g
bGluZU51bWJlcjsKLSAgICAgICAgICAgIGVycm9yLmNvbHVtbiA9IGluZGV4IC0gbGluZVN0YXJ0
ICsgMTsKKyAgICAgICAgZm9yIChlID0gMDsgZSA8IGV4dHJhLmVycm9ycy5sZW5ndGg7IGUrKykg
eworICAgICAgICAgICAgZXhpc3RpbmcgPSBleHRyYS5lcnJvcnNbZV07CisgICAgICAgICAgICAv
LyBQcmV2ZW50IGR1cGxpY2F0ZWQgZXJyb3IuCisgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25v
cmUgbmV4dCAqLworICAgICAgICAgICAgaWYgKGV4aXN0aW5nLmluZGV4ID09PSBlcnJvci5pbmRl
eCAmJiBleGlzdGluZy5tZXNzYWdlID09PSBlcnJvci5tZXNzYWdlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZXJyb3IuZGVz
Y3JpcHRpb24gPSBtc2c7Ci0gICAgICAgIHRocm93IGVycm9yOworICAgICAgICBleHRyYS5lcnJv
cnMucHVzaChlcnJvcik7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gdGhyb3dFcnJvclRvbGVyYW50
KCkgeworICAgIGZ1bmN0aW9uIGNvbnN0cnVjdEVycm9yKG1zZywgY29sdW1uKSB7CisgICAgICAg
IHZhciBlcnJvciA9IG5ldyBFcnJvcihtc2cpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAg
dGhyb3dFcnJvci5hcHBseShudWxsLCBhcmd1bWVudHMpOwotICAgICAgICB9IGNhdGNoIChlKSB7
Ci0gICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgZXh0cmEu
ZXJyb3JzLnB1c2goZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRo
cm93IGU7CisgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgfSBjYXRjaCAoYmFzZSkg
eworICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8KKyAgICAgICAgICAgIGlm
IChPYmplY3QuY3JlYXRlICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeworICAgICAgICAgICAg
ICAgIGVycm9yID0gT2JqZWN0LmNyZWF0ZShiYXNlKTsKKyAgICAgICAgICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZXJyb3IsICdjb2x1bW4nLCB7IHZhbHVlOiBjb2x1bW4gfSk7CiAgICAg
ICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3I7
CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBmdW5jdGlvbiBjcmVhdGVFcnJvcihsaW5lLCBwb3Ms
IGRlc2NyaXB0aW9uKSB7CisgICAgICAgIHZhciBtc2csIGNvbHVtbiwgZXJyb3I7CiAKLSAgICAv
LyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUgdG9rZW4uCisgICAgICAgIG1zZyA9
ICdMaW5lICcgKyBsaW5lICsgJzogJyArIGRlc2NyaXB0aW9uOworICAgICAgICBjb2x1bW4gPSBw
b3MgLSAoc2Nhbm5pbmcgPyBsaW5lU3RhcnQgOiBsYXN0TGluZVN0YXJ0KSArIDE7CisgICAgICAg
IGVycm9yID0gY29uc3RydWN0RXJyb3IobXNnLCBjb2x1bW4pOworICAgICAgICBlcnJvci5saW5l
TnVtYmVyID0gbGluZTsKKyAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsK
KyAgICAgICAgZXJyb3IuaW5kZXggPSBwb3M7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9
CiAKLSAgICBmdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pIHsKLSAgICAgICAgaWYgKHRv
a2VuLnR5cGUgPT09IFRva2VuLkVPRikgewotICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwg
TWVzc2FnZXMuVW5leHBlY3RlZEVPUyk7Ci0gICAgICAgIH0KKyAgICAvLyBUaHJvdyBhbiBleGNl
cHRpb24KIAotICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwp
IHsKLSAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1i
ZXIpOwotICAgICAgICB9CisgICAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdlRm9ybWF0KSB7
CisgICAgICAgIHZhciBhcmdzLCBtc2c7CiAKLSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRv
a2VuLlN0cmluZ0xpdGVyYWwpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRTdHJpbmcpOwotICAgICAgICB9CisgICAgICAgIGFyZ3MgPSBBcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOworICAgICAgICBtc2cgPSBtZXNzYWdl
Rm9ybWF0LnJlcGxhY2UoLyUoXGQpL2csCisgICAgICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGlk
eCkgeworICAgICAgICAgICAgICAgIGFzc2VydChpZHggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2Ug
cmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJn
c1tpZHhdOworICAgICAgICAgICAgfQorICAgICAgICApOwogCi0gICAgICAgIGlmICh0b2tlbi50
eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHRva2Vu
LCBNZXNzYWdlcy5VbmV4cGVjdGVkSWRlbnRpZmllcik7CisgICAgICAgIHRocm93IGNyZWF0ZUVy
cm9yKGxhc3RMaW5lTnVtYmVyLCBsYXN0SW5kZXgsIG1zZyk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gdG9sZXJhdGVFcnJvcihtZXNzYWdlRm9ybWF0KSB7CisgICAgICAgIHZhciBhcmdzLCBtc2cs
IGVycm9yOworCisgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1
bWVudHMsIDEpOworICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAgICAgICBt
c2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoLyUoXGQpL2csCisgICAgICAgICAgICBmdW5jdGlv
biAod2hvbGUsIGlkeCkgeworICAgICAgICAgICAgICAgIGFzc2VydChpZHggPCBhcmdzLmxlbmd0
aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYXJnc1tpZHhdOworICAgICAgICAgICAgfQorICAgICAgICApOworCisgICAgICAg
IGVycm9yID0gY3JlYXRlRXJyb3IobGluZU51bWJlciwgbGFzdEluZGV4LCBtc2cpOworICAgICAg
ICBpZiAoZXh0cmEuZXJyb3JzKSB7CisgICAgICAgICAgICByZWNvcmRFcnJvcihlcnJvcik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgfQorICAg
IH0KIAotICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewotICAgICAg
ICAgICAgaWYgKGlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAg
ICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRSZXNlcnZlZCk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQo
dG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2Vu
LCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUgdG9rZW4uCisKKyAgICBm
dW5jdGlvbiB1bmV4cGVjdGVkVG9rZW5FcnJvcih0b2tlbiwgbWVzc2FnZSkgeworICAgICAgICB2
YXIgdmFsdWUsIG1zZyA9IG1lc3NhZ2UgfHwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOworCisg
ICAgICAgIGlmICh0b2tlbikgeworICAgICAgICAgICAgaWYgKCFtZXNzYWdlKSB7CisgICAgICAg
ICAgICAgICAgbXNnID0gKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikgPyBNZXNzYWdlcy5VbmV4
cGVjdGVkRU9TIDoKKyAgICAgICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IFRva2VuLklk
ZW50aWZpZXIpID8gTWVzc2FnZXMuVW5leHBlY3RlZElkZW50aWZpZXIgOgorICAgICAgICAgICAg
ICAgICAgICAodG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpID8gTWVzc2FnZXMu
VW5leHBlY3RlZE51bWJlciA6CisgICAgICAgICAgICAgICAgICAgICh0b2tlbi50eXBlID09PSBU
b2tlbi5TdHJpbmdMaXRlcmFsKSA/IE1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcgOgorICAgICAg
ICAgICAgICAgICAgICAodG9rZW4udHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUpID8gTWVzc2FnZXMu
VW5leHBlY3RlZFRlbXBsYXRlIDoKKyAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBl
Y3RlZFRva2VuOworCisgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLktl
eXdvcmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRv
a2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gTWVzc2FnZXMuVW5l
eHBlY3RlZFJlc2VydmVkOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAm
JiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtc2cgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVl
KTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5UZW1wbGF0
ZSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRl
bXBsYXRlLCB0b2tlbi52YWx1ZS5yYXcpOworICAgICAgICAgICAgdmFsdWUgPSAodG9rZW4udHlw
ZSA9PT0gVG9rZW4uVGVtcGxhdGUpID8gdG9rZW4udmFsdWUucmF3IDogdG9rZW4udmFsdWU7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZSA9ICdJTExFR0FMJzsKICAgICAgICAg
fQogCi0gICAgICAgIC8vIEJvb2xlYW5MaXRlcmFsLCBOdWxsTGl0ZXJhbCwgb3IgUHVuY3R1YXRv
ci4KLSAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0
b2tlbi52YWx1ZSk7CisgICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKCclMCcsIHZhbHVlKTsKKwor
ICAgICAgICByZXR1cm4gKHRva2VuICYmIHR5cGVvZiB0b2tlbi5saW5lTnVtYmVyID09PSAnbnVt
YmVyJykgPworICAgICAgICAgICAgY3JlYXRlRXJyb3IodG9rZW4ubGluZU51bWJlciwgdG9rZW4u
c3RhcnQsIG1zZykgOgorICAgICAgICAgICAgY3JlYXRlRXJyb3Ioc2Nhbm5pbmcgPyBsaW5lTnVt
YmVyIDogbGFzdExpbmVOdW1iZXIsIHNjYW5uaW5nID8gaW5kZXggOiBsYXN0SW5kZXgsIG1zZyk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3Nh
Z2UpIHsKKyAgICAgICAgdGhyb3cgdW5leHBlY3RlZFRva2VuRXJyb3IodG9rZW4sIG1lc3NhZ2Up
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBt
ZXNzYWdlKSB7CisgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWRUb2tlbkVycm9yKHRva2Vu
LCBtZXNzYWdlKTsKKyAgICAgICAgaWYgKGV4dHJhLmVycm9ycykgeworICAgICAgICAgICAgcmVj
b3JkRXJyb3IoZXJyb3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgZXJy
b3I7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8g
bWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgpAQCAtMjM5Myw3ICsyNTAxLDMxIEBACiAg
ICAgZnVuY3Rpb24gZXhwZWN0KHZhbHVlKSB7CiAgICAgICAgIHZhciB0b2tlbiA9IGxleCgpOwog
ICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciB8fCB0b2tlbi52YWx1
ZSAhPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAg
ICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBAbmFtZSBleHBlY3RDb21tYVNlcGFyYXRvcgorICAgICAqIEBkZXNj
cmlwdGlvbiBRdWlldGx5IGV4cGVjdCBhIGNvbW1hIHdoZW4gaW4gdG9sZXJhbnQgbW9kZSwgb3Ro
ZXJ3aXNlIGRlbGVnYXRlcworICAgICAqIHRvIDxjb2RlPmV4cGVjdCh2YWx1ZSk8L2NvZGU+Cisg
ICAgICogQHNpbmNlIDIuMAorICAgICAqLworICAgIGZ1bmN0aW9uIGV4cGVjdENvbW1hU2VwYXJh
dG9yKCkgeworICAgICAgICB2YXIgdG9rZW47CisKKyAgICAgICAgaWYgKGV4dHJhLmVycm9ycykg
eworICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICBpZiAodG9rZW4u
dHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi52YWx1ZSA9PT0gJywnKSB7CisgICAg
ICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09
IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFsdWUgPT09ICc7JykgeworICAgICAgICAgICAg
ICAgIGxleCgpOworICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2Vu
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVj
dGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleHBlY3QoJywnKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMjQwMyw3ICsyNTM1LDcgQEAKICAgICBmdW5jdGlvbiBleHBlY3RLZXl3b3Jk
KGtleXdvcmQpIHsKICAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CiAgICAgICAgIGlmICh0b2tl
bi50eXBlICE9PSBUb2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7Ci0g
ICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICAgICAgdGhyb3dVbmV4
cGVjdGVkVG9rZW4odG9rZW4pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNDE5LDggKzI1NTEs
OCBAQAogICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQgJiYg
bG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkOwogICAgIH0KIAotCiAgICAgLy8gUmV0dXJuIHRy
dWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRleHR1YWwga2V5
d29yZAorICAgIC8vICh3aGVyZSBhbiBpZGVudGlmaWVyIGlzIHNvbWV0aW1lcyBhIGtleXdvcmQg
ZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0KQogCiAgICAgZnVuY3Rpb24gbWF0Y2hDb250ZXh0dWFs
S2V5d29yZChrZXl3b3JkKSB7CiAgICAgICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9r
ZW4uSWRlbnRpZmllciAmJiBsb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7CkBAIC0yNDUwLDMz
MiArMjU4Miw1MTUgQEAKICAgICB9CiAKICAgICBmdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkg
ewotICAgICAgICB2YXIgbGluZSwgb2xkSW5kZXggPSBpbmRleCwgb2xkTGluZU51bWJlciA9IGxp
bmVOdW1iZXIsCi0gICAgICAgICAgICBvbGRMaW5lU3RhcnQgPSBsaW5lU3RhcnQsIG9sZExvb2th
aGVhZCA9IGxvb2thaGVhZDsKLQotICAgICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2Fz
ZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1pY29sb24gKGNoYXIgIzU5KS4KLSAgICAgICAgaWYg
KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gNTkpIHsKKyAgICAgICAgLy8gQ2F0Y2ggdGhl
IHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0Ip
LgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoc3RhcnRJbmRleCkgPT09IDB4M0IgfHwg
bWF0Y2goJzsnKSkgewogICAgICAgICAgICAgbGV4KCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBsaW5lID0gbGluZU51bWJlcjsKLSAgICAgICAgc2tpcENvbW1l
bnQoKTsKLSAgICAgICAgaWYgKGxpbmVOdW1iZXIgIT09IGxpbmUpIHsKLSAgICAgICAgICAgIGlu
ZGV4ID0gb2xkSW5kZXg7Ci0gICAgICAgICAgICBsaW5lTnVtYmVyID0gb2xkTGluZU51bWJlcjsK
LSAgICAgICAgICAgIGxpbmVTdGFydCA9IG9sZExpbmVTdGFydDsKLSAgICAgICAgICAgIGxvb2th
aGVhZCA9IG9sZExvb2thaGVhZDsKKyAgICAgICAgaWYgKGhhc0xpbmVUZXJtaW5hdG9yKSB7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobWF0Y2goJzsnKSkg
ewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAg
ICAgICAgLy8gRklYTUUoaWthcmllbmF0b3IpOiB0aGlzIGlzIHNlZW1pbmdseSBhbiBpc3N1ZSBp
biB0aGUgcHJldmlvdXMgbG9jYXRpb24gaW5mbyBjb252ZW50aW9uLgorICAgICAgICBsYXN0SW5k
ZXggPSBzdGFydEluZGV4OworICAgICAgICBsYXN0TGluZU51bWJlciA9IHN0YXJ0TGluZU51bWJl
cjsKKyAgICAgICAgbGFzdExpbmVTdGFydCA9IHN0YXJ0TGluZVN0YXJ0OwogCiAgICAgICAgIGlm
IChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GICYmICFtYXRjaCgnfScpKSB7Ci0gICAgICAg
ICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgICAgIHRocm93VW5leHBl
Y3RlZFRva2VuKGxvb2thaGVhZCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBSZXR1cm4g
dHJ1ZSBpZiBwcm92aWRlZCBleHByZXNzaW9uIGlzIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KKyAg
ICAvLyBDb3ZlciBncmFtbWFyIHN1cHBvcnQuCisgICAgLy8KKyAgICAvLyBXaGVuIGFuIGFzc2ln
bm1lbnQgZXhwcmVzc2lvbiBwb3NpdGlvbiBzdGFydHMgd2l0aCBhbiBsZWZ0IHBhcmVudGhlc2lz
LCB0aGUgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgdHlwZQorICAgIC8vIG9mIHRoZSBzeW50YXggaXMg
dG8gYmUgZGVmZXJyZWQgYXJiaXRyYXJpbHkgbG9uZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwYXJl
bnRoZXNlcyBwYWlyIChwbHVzIGEgbG9va2FoZWFkKQorICAgIC8vIG9yIHRoZSBmaXJzdCBjb21t
YS4gVGhpcyBzaXR1YXRpb24gYWxzbyBkZWZlcnMgdGhlIGRldGVybWluYXRpb24gb2YgYWxsIHRo
ZSBleHByZXNzaW9ucyBuZXN0ZWQgaW4gdGhlIHBhaXIuCisgICAgLy8KKyAgICAvLyBUaGVyZSBh
cmUgdGhyZWUgcHJvZHVjdGlvbnMgdGhhdCBjYW4gYmUgcGFyc2VkIGluIGEgcGFyZW50aGVzZXMg
cGFpciB0aGF0IG5lZWRzIHRvIGJlIGRldGVybWluZWQKKyAgICAvLyBhZnRlciB0aGUgb3V0ZXJt
b3N0IHBhaXIgaXMgY2xvc2VkLiBUaGV5IGFyZToKKyAgICAvLworICAgIC8vICAgMS4gQXNzaWdu
bWVudEV4cHJlc3Npb24KKyAgICAvLyAgIDIuIEJpbmRpbmdFbGVtZW50cworICAgIC8vICAgMy4g
QXNzaWdubWVudFRhcmdldHMKKyAgICAvLworICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGV4cG9u
ZW50aWFsIGJhY2t0cmFja2luZywgd2UgdXNlIHR3byBmbGFncyB0byBkZW5vdGUgaWYgdGhlIHBy
b2R1Y3Rpb24gY2FuIGJlCisgICAgLy8gYmluZGluZyBlbGVtZW50IG9yIGFzc2lnbm1lbnQgdGFy
Z2V0LgorICAgIC8vCisgICAgLy8gVGhlIHRocmVlIHByb2R1Y3Rpb25zIGhhdmUgdGhlIHJlbGF0
aW9uc2hpcDoKKyAgICAvLworICAgIC8vICAgQmluZGluZ0VsZW1lbnRzIOKKhiBBc3NpZ25tZW50
VGFyZ2V0cyDiioYgQXNzaWdubWVudEV4cHJlc3Npb24KKyAgICAvLworICAgIC8vIHdpdGggYSBz
aW5nbGUgZXhjZXB0aW9uIHRoYXQgQ292ZXJJbml0aWFsaXplZE5hbWUgd2hlbiB1c2VkIGRpcmVj
dGx5IGluIGFuIEV4cHJlc3Npb24sIGdlbmVyYXRlcworICAgIC8vIGFuIGVhcmx5IGVycm9yLiBU
aGVyZWZvcmUsIHdlIG5lZWQgdGhlIHRoaXJkIHN0YXRlLCBmaXJzdENvdmVySW5pdGlhbGl6ZWRO
YW1lRXJyb3IsIHRvIHRyYWNrIHRoZQorICAgIC8vIGZpcnN0IHVzYWdlIG9mIENvdmVySW5pdGlh
bGl6ZWROYW1lIGFuZCByZXBvcnQgaXQgd2hlbiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHBh
cmVudGhlc2VzIHBhaXIuCisgICAgLy8KKyAgICAvLyBpc29sYXRlQ292ZXJHcmFtbWFyIGZ1bmN0
aW9uIHJ1bnMgdGhlIGdpdmVuIHBhcnNlciBmdW5jdGlvbiB3aXRoIGEgbmV3IGNvdmVyIGdyYW1t
YXIgY29udGV4dCwgYW5kIGl0IGRvZXMgbm90CisgICAgLy8gZWZmZWN0IHRoZSBjdXJyZW50IGZs
YWdzLiBUaGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIG9ubHkg
dXNlZCBhcyBhbiBleHByZXNzaW9uLiBUaGVyZWZvcmUKKyAgICAvLyB0aGUgQ292ZXJJbml0aWFs
aXplZE5hbWUgY2hlY2sgaXMgY29uZHVjdGVkLgorICAgIC8vCisgICAgLy8gaW5oZXJpdENvdmVy
R3JhbW1hciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZSBmdW5jdGlvbiB3aXRoIGEgbmV3
IGNvdmVyIGdyYW1tYXIgY29udGV4dCwgYW5kIGl0IHByb3BhZ2F0ZXMKKyAgICAvLyB0aGUgZmxh
Z3Mgb3V0c2lkZSBvZiB0aGUgcGFyc2VyLiBUaGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBw
YXJzZXIgcGFyc2VzIGlzIHVzZWQgYXMgYSBwYXJ0IG9mIGEgcG90ZW50aWFsCisgICAgLy8gcGF0
dGVybi4gVGhlIENvdmVySW5pdGlhbGl6ZWROYW1lIGNoZWNrIGlzIGRlZmVycmVkLgorICAgIGZ1
bmN0aW9uIGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VyKSB7CisgICAgICAgIHZhciBvbGRJc0Jp
bmRpbmdFbGVtZW50ID0gaXNCaW5kaW5nRWxlbWVudCwKKyAgICAgICAgICAgIG9sZElzQXNzaWdu
bWVudFRhcmdldCA9IGlzQXNzaWdubWVudFRhcmdldCwKKyAgICAgICAgICAgIG9sZEZpcnN0Q292
ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciwK
KyAgICAgICAgICAgIHJlc3VsdDsKKyAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7Cisg
ICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7CisgICAgICAgIGZpcnN0Q292ZXJJbml0
aWFsaXplZE5hbWVFcnJvciA9IG51bGw7CisgICAgICAgIHJlc3VsdCA9IHBhcnNlcigpOworICAg
ICAgICBpZiAoZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yICE9PSBudWxsKSB7CisgICAg
ICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJy
b3IpOworICAgICAgICB9CisgICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBvbGRJc0JpbmRpbmdF
bGVtZW50OworICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBvbGRJc0Fzc2lnbm1lbnRUYXJn
ZXQ7CisgICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG9sZEZpcnN0Q292
ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAK
LSAgICBmdW5jdGlvbiBpc0xlZnRIYW5kU2lkZShleHByKSB7Ci0gICAgICAgIHJldHVybiBleHBy
LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyIHx8IGV4cHIudHlwZSA9PT0gU3ludGF4Lk1lbWJl
ckV4cHJlc3Npb247CisgICAgZnVuY3Rpb24gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZXIpIHsK
KyAgICAgICAgdmFyIG9sZElzQmluZGluZ0VsZW1lbnQgPSBpc0JpbmRpbmdFbGVtZW50LAorICAg
ICAgICAgICAgb2xkSXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNBc3NpZ25tZW50VGFyZ2V0LAorICAg
ICAgICAgICAgb2xkRmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gZmlyc3RDb3Zlcklu
aXRpYWxpemVkTmFtZUVycm9yLAorICAgICAgICAgICAgcmVzdWx0OworICAgICAgICBpc0JpbmRp
bmdFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKKyAg
ICAgICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsKKyAgICAgICAgcmVz
dWx0ID0gcGFyc2VyKCk7CisgICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBpc0JpbmRpbmdFbGVt
ZW50ICYmIG9sZElzQmluZGluZ0VsZW1lbnQ7CisgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9
IGlzQXNzaWdubWVudFRhcmdldCAmJiBvbGRJc0Fzc2lnbm1lbnRUYXJnZXQ7CisgICAgICAgIGZp
cnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG9sZEZpcnN0Q292ZXJJbml0aWFsaXplZE5h
bWVFcnJvciB8fCBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gaXNBc3NpZ25hYmxlTGVmdEhhbmRTaWRl
KGV4cHIpIHsKLSAgICAgICAgcmV0dXJuIGlzTGVmdEhhbmRTaWRlKGV4cHIpIHx8IGV4cHIudHlw
ZSA9PT0gU3ludGF4Lk9iamVjdFBhdHRlcm4gfHwgZXhwci50eXBlID09PSBTeW50YXguQXJyYXlQ
YXR0ZXJuOworICAgIC8vIEVDTUEtMjYyIDEzLjMuMyBEZXN0cnVjdHVyaW5nIEJpbmRpbmcgUGF0
dGVybnMKKworICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXlQYXR0ZXJuKHBhcmFtcywga2luZCkgewor
ICAgICAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCksIGVsZW1lbnRzID0gW10sIHJlc3QsIHJlc3RO
b2RlOworICAgICAgICBleHBlY3QoJ1snKTsKKworICAgICAgICB3aGlsZSAoIW1hdGNoKCddJykp
IHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7
CisgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcuLi4nKSkgeworICAgICAgICAgICAgICAg
ICAgICByZXN0Tm9kZSA9IG5ldyBOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGxleCgpOwor
ICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChsb29rYWhlYWQpOworICAgICAgICAgICAg
ICAgICAgICByZXN0ID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIocGFyYW1zLCBraW5kKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChyZXN0Tm9kZS5maW5pc2hSZXN0RWxlbWVu
dChyZXN0KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VQYXR0ZXJuV2l0
aERlZmF1bHQocGFyYW1zLCBraW5kKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICghbWF0Y2goJ10nKSkgeworICAgICAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICAg
IGV4cGVjdCgnXScpOworCisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEFycmF5UGF0dGVybihl
bGVtZW50cyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eVBhdHRlcm4ocGFy
YW1zLCBraW5kKSB7CisgICAgICAgIHZhciBub2RlID0gbmV3IE5vZGUoKSwga2V5LCBrZXlUb2tl
biwgY29tcHV0ZWQgPSBtYXRjaCgnWycpLCBpbml0OworICAgICAgICBpZiAobG9va2FoZWFkLnR5
cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGtleVRva2VuID0gbG9va2Fo
ZWFkOworICAgICAgICAgICAga2V5ID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAg
ICAgICAgIGlmIChtYXRjaCgnPScpKSB7CisgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goa2V5
VG9rZW4pOworICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIGluaXQgPSBw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZS5maW5pc2hQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgJ2luaXQnLCBrZXksIGZhbHNl
LAorICAgICAgICAgICAgICAgICAgICBuZXcgV3JhcHBpbmdOb2RlKGtleVRva2VuKS5maW5pc2hB
c3NpZ25tZW50UGF0dGVybihrZXksIGluaXQpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAg
fSBlbHNlIGlmICghbWF0Y2goJzonKSkgeworICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtl
eVRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgnaW5p
dCcsIGtleSwgZmFsc2UsIGtleSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleShwYXJh
bXMsIGtpbmQpOworICAgICAgICB9CisgICAgICAgIGV4cGVjdCgnOicpOworICAgICAgICBpbml0
ID0gcGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBraW5kKTsKKyAgICAgICAgcmV0dXJu
IG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLCBpbml0LCBmYWxzZSwg
ZmFsc2UpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UGF0dGVybihwYXJhbXMs
IGtpbmQpIHsKKyAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpLCBwcm9wZXJ0aWVzID0gW107
CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7
CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocGFyc2VQcm9wZXJ0eVBhdHRlcm4ocGFyYW1z
LCBraW5kKSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAg
ICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxleCgp
OworCisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaE9iamVjdFBhdHRlcm4ocHJvcGVydGllcyk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCkgeworICAg
ICAgICBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlQYXR0
ZXJuKHBhcmFtcywga2luZCk7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ3snKSkgeworICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0UGF0dGVybihwYXJhbXMsIGtpbmQpOworICAgICAg
ICB9CisgICAgICAgIHBhcmFtcy5wdXNoKGxvb2thaGVhZCk7CisgICAgICAgIHJldHVybiBwYXJz
ZVZhcmlhYmxlSWRlbnRpZmllcihraW5kKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVBh
dHRlcm5XaXRoRGVmYXVsdChwYXJhbXMsIGtpbmQpIHsKKyAgICAgICAgdmFyIHN0YXJ0VG9rZW4g
PSBsb29rYWhlYWQsIHBhdHRlcm4sIHByZXZpb3VzQWxsb3dZaWVsZCwgcmlnaHQ7CisgICAgICAg
IHBhdHRlcm4gPSBwYXJzZVBhdHRlcm4ocGFyYW1zLCBraW5kKTsKKyAgICAgICAgaWYgKG1hdGNo
KCc9JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgcHJldmlvdXNBbGxvd1lp
ZWxkID0gc3RhdGUuYWxsb3dZaWVsZDsKKyAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSB0
cnVlOworICAgICAgICAgICAgcmlnaHQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdu
bWVudEV4cHJlc3Npb24pOworICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3Vz
QWxsb3dZaWVsZDsKKyAgICAgICAgICAgIHBhdHRlcm4gPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0
VG9rZW4pLmZpbmlzaEFzc2lnbm1lbnRQYXR0ZXJuKHBhdHRlcm4sIHJpZ2h0KTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcGF0dGVybjsKICAgICB9CiAKLSAgICAvLyAxMS4xLjQgQXJyYXkg
SW5pdGlhbGlzZXIKKyAgICAvLyBFQ01BLTI2MiAxMi4yLjUgQXJyYXkgSW5pdGlhbGl6ZXIKIAot
ICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpIHsKLSAgICAgICAgdmFyIGVsZW1l
bnRzID0gW10sIGJsb2NrcyA9IFtdLCBmaWx0ZXIgPSBudWxsLCB0bXAsIHBvc3NpYmxlY29tcHJl
aGVuc2lvbiA9IHRydWUsCi0gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAg
ICBmdW5jdGlvbiBwYXJzZUFycmF5SW5pdGlhbGl6ZXIoKSB7CisgICAgICAgIHZhciBlbGVtZW50
cyA9IFtdLCBub2RlID0gbmV3IE5vZGUoKSwgcmVzdFNwcmVhZDsKIAogICAgICAgICBleHBlY3Qo
J1snKTsKKwogICAgICAgICB3aGlsZSAoIW1hdGNoKCddJykpIHsKLSAgICAgICAgICAgIGlmIChs
b29rYWhlYWQudmFsdWUgPT09ICdmb3InICYmCi0gICAgICAgICAgICAgICAgICAgIGxvb2thaGVh
ZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwb3NzaWJs
ZWNvbXByZWhlbnNpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuQ29tcHJlaGVuc2lvbkVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgbWF0Y2hLZXl3b3JkKCdmb3InKTsKLSAgICAgICAgICAgICAgICB0bXAgPSBwYXJzZUZv
clN0YXRlbWVudCh7aWdub3JlQm9keTogdHJ1ZX0pOwotICAgICAgICAgICAgICAgIHRtcC5vZiA9
IHRtcC50eXBlID09PSBTeW50YXguRm9yT2ZTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICAgICAgdG1w
LnR5cGUgPSBTeW50YXguQ29tcHJlaGVuc2lvbkJsb2NrOwotICAgICAgICAgICAgICAgIGlmICh0
bXAubGVmdC5raW5kKSB7IC8vIGNhbid0IGJlIGxldCBvciBjb25zdAotICAgICAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Db21wcmVoZW5zaW9uRXJyb3IpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBibG9ja3MucHVzaCh0bXApOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChsb29rYWhlYWQudmFsdWUgPT09ICdpZicgJiYKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFwb3NzaWJsZWNvbXByZWhlbnNpb24pIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuQ29tcHJlaGVuc2lvbkVycm9yKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZXhwZWN0S2V5d29yZCgnaWYnKTsKLSAgICAgICAg
ICAgICAgICBleHBlY3QoJygnKTsKLSAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwYXJzZUV4cHJl
c3Npb24oKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAobG9va2FoZWFkLnZhbHVlID09PSAnLCcgJiYKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7Ci0gICAgICAgICAgICAg
ICAgcG9zc2libGVjb21wcmVoZW5zaW9uID0gZmFsc2U7IC8vIG5vIGxvbmdlciBhbGxvd2VkLgor
ICAgICAgICAgICAgaWYgKG1hdGNoKCcsJykpIHsKICAgICAgICAgICAgICAgICBsZXgoKTsKICAg
ICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKG51bGwpOworICAgICAgICAgICAgfSBlbHNlIGlm
IChtYXRjaCgnLi4uJykpIHsKKyAgICAgICAgICAgICAgICByZXN0U3ByZWFkID0gbmV3IE5vZGUo
KTsKKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICByZXN0U3ByZWFkLmZp
bmlzaFNwcmVhZEVsZW1lbnQoaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCddJykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChyZXN0U3ByZWFkKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgdG1wID0gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHBy
ZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh0bXApOwotICAgICAgICAg
ICAgICAgIGlmICh0bXAgJiYgdG1wLnR5cGUgPT09IFN5bnRheC5TcHJlYWRFbGVtZW50KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJ10nKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuRWxlbWVudEFmdGVyU3ByZWFkRWxlbWVudCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEobWF0
Y2goJ10nKSB8fCBtYXRjaEtleXdvcmQoJ2ZvcicpIHx8IG1hdGNoS2V5d29yZCgnaWYnKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7IC8vIHRoaXMgbGV4ZXMuCi0gICAgICAg
ICAgICAgICAgICAgIHBvc3NpYmxlY29tcHJlaGVuc2lvbiA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGVsZW1lbnRzLnB1c2goaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCddJykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0KCcsJyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgZXhwZWN0KCddJyk7Ci0KLSAgICAgICAgaWYgKGZpbHRl
ciAmJiAhYmxvY2tzLmxlbmd0aCkgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuQ29tcHJlaGVuc2lvblJlcXVpcmVzQmxvY2spOwotICAgICAgICB9CisgICAgICAgIGxleCgp
OwogCi0gICAgICAgIGlmIChibG9ja3MubGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoZWxlbWVu
dHMubGVuZ3RoICE9PSAxKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuQ29tcHJlaGVuc2lvbkVycm9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUNvbXByZWhlbnNpb25FeHByZXNz
aW9uKGZpbHRlciwgYmxvY2tzLCBlbGVtZW50c1swXSkpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUFycmF5RXhwcmVzc2lvbihl
bGVtZW50cykpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hBcnJheUV4cHJlc3Npb24oZWxl
bWVudHMpOwogICAgIH0KIAotICAgIC8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXIKKyAgICAv
LyBFQ01BLTI2MiAxMi4yLjYgT2JqZWN0IEluaXRpYWxpemVyCisKKyAgICBmdW5jdGlvbiBwYXJz
ZVByb3BlcnR5RnVuY3Rpb24obm9kZSwgcGFyYW1JbmZvLCBpc0dlbmVyYXRvcikgeworICAgICAg
ICB2YXIgcHJldmlvdXNTdHJpY3QsIGJvZHk7CiAKLSAgICBmdW5jdGlvbiBwYXJzZVByb3BlcnR5
RnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QsIHByZXZpb3Vz
WWllbGRBbGxvd2VkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5LAotICAgICAgICAgICAgbWFya2Vy
ID0gbWFya2VyQ3JlYXRlKCk7CisgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGlu
Z0VsZW1lbnQgPSBmYWxzZTsKIAogICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKLSAg
ICAgICAgcHJldmlvdXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7Ci0gICAgICAg
IHN0YXRlLnlpZWxkQWxsb3dlZCA9IG9wdGlvbnMuZ2VuZXJhdG9yOwotICAgICAgICBwYXJhbXMg
PSBvcHRpb25zLnBhcmFtcyB8fCBbXTsKLSAgICAgICAgZGVmYXVsdHMgPSBvcHRpb25zLmRlZmF1
bHRzIHx8IFtdOworICAgICAgICBib2R5ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUZ1bmN0
aW9uU291cmNlRWxlbWVudHMpOwogCi0gICAgICAgIGJvZHkgPSBwYXJzZUNvbmNpc2VCb2R5KCk7
Ci0gICAgICAgIGlmIChvcHRpb25zLm5hbWUgJiYgc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQo
cGFyYW1zWzBdLm5hbWUpKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQob3B0aW9u
cy5uYW1lLCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpOworICAgICAgICBpZiAoc3RyaWN0ICYm
IHBhcmFtSW5mby5maXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRvbGVyYXRlVW5leHBl
Y3RlZFRva2VuKHBhcmFtSW5mby5maXJzdFJlc3RyaWN0ZWQsIHBhcmFtSW5mby5tZXNzYWdlKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoc3RyaWN0ICYmIHBhcmFtSW5mby5zdHJpY3RlZCkgewor
ICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4ocGFyYW1JbmZvLnN0cmljdGVkLCBw
YXJhbUluZm8ubWVzc2FnZSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNT
dHJpY3Q7Ci0gICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2Vk
OwogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUZ1
bmN0aW9uRXhwcmVzc2lvbigKLSAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICBwYXJhbXMs
Ci0gICAgICAgICAgICBkZWZhdWx0cywKLSAgICAgICAgICAgIGJvZHksCi0gICAgICAgICAgICBv
cHRpb25zLnJlc3QgfHwgbnVsbCwKLSAgICAgICAgICAgIG9wdGlvbnMuZ2VuZXJhdG9yLAotICAg
ICAgICAgICAgYm9keS50eXBlICE9PSBTeW50YXguQmxvY2tTdGF0ZW1lbnQKLSAgICAgICAgKSk7
CisgICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworICAgICAgICByZXR1cm4gbm9kZS5m
aW5pc2hGdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW1JbmZvLnBhcmFtcywgcGFyYW1JbmZv
LmRlZmF1bHRzLCBib2R5LCBpc0dlbmVyYXRvcik7CiAgICAgfQogCisgICAgZnVuY3Rpb24gcGFy
c2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcGFyYW1zLCBtZXRob2Qs
IG5vZGUgPSBuZXcgTm9kZSgpLAorICAgICAgICAgICAgcHJldmlvdXNBbGxvd1lpZWxkID0gc3Rh
dGUuYWxsb3dZaWVsZDsKIAotICAgIGZ1bmN0aW9uIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlv
bihvcHRpb25zKSB7Ci0gICAgICAgIHZhciBwcmV2aW91c1N0cmljdCwgdG1wLCBtZXRob2Q7Ci0K
LSAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7Ci0gICAgICAgIHN0cmljdCA9IHRydWU7
Ci0KLSAgICAgICAgdG1wID0gcGFyc2VQYXJhbXMoKTsKLQotICAgICAgICBpZiAodG1wLnN0cmlj
dGVkKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG1wLnN0cmljdGVkLCB0bXAu
bWVzc2FnZSk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlG
dW5jdGlvbih7Ci0gICAgICAgICAgICBwYXJhbXM6IHRtcC5wYXJhbXMsCi0gICAgICAgICAgICBk
ZWZhdWx0czogdG1wLmRlZmF1bHRzLAotICAgICAgICAgICAgcmVzdDogdG1wLnJlc3QsCi0gICAg
ICAgICAgICBnZW5lcmF0b3I6IG9wdGlvbnMuZ2VuZXJhdG9yCi0gICAgICAgIH0pOworICAgICAg
ICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7CisgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1z
KCk7CisgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CiAKLSAg
ICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisgICAgICAgIHN0YXRlLmFsbG93WWllbGQg
PSBmYWxzZTsKKyAgICAgICAgbWV0aG9kID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG5vZGUsIHBh
cmFtcywgZmFsc2UpOworICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lp
ZWxkOwogCiAgICAgICAgIHJldHVybiBtZXRob2Q7CiAgICAgfQogCi0KICAgICBmdW5jdGlvbiBw
YXJzZU9iamVjdFByb3BlcnR5S2V5KCkgewotICAgICAgICB2YXIgbWFya2VyID0gbWFya2VyQ3Jl
YXRlKCksCi0gICAgICAgICAgICB0b2tlbiA9IGxleCgpLAotICAgICAgICAgICAgcHJvcGVydHlL
ZXksCi0gICAgICAgICAgICByZXN1bHQ7CisgICAgICAgIHZhciB0b2tlbiwgbm9kZSA9IG5ldyBO
b2RlKCksIGV4cHI7CisKKyAgICAgICAgdG9rZW4gPSBsZXgoKTsKIAogICAgICAgICAvLyBOb3Rl
OiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGZyb20gcGFyc2VPYmplY3RQcm9wZXJ0eSgp
LCB3aGVyZQogICAgICAgICAvLyBFT0YgYW5kIFB1bmN0dWF0b3IgdG9rZW5zIGFyZSBhbHJlYWR5
IGZpbHRlcmVkIG91dC4KIAotICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5n
TGl0ZXJhbCB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgeworICAgICAg
ICBzd2l0Y2ggKHRva2VuLnR5cGUpIHsKKyAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFs
OgorICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOgogICAgICAgICAgICAgaWYgKHN0
cmljdCAmJiB0b2tlbi5vY3RhbCkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFu
dCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAgICAgICAgICB0
b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFs
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIs
IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwodG9rZW4pKTsKKyAgICAgICAgICAgIHJldHVybiBub2Rl
LmZpbmlzaExpdGVyYWwodG9rZW4pOworICAgICAgICBjYXNlIFRva2VuLklkZW50aWZpZXI6Cisg
ICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6CisgICAgICAgIGNhc2UgVG9rZW4uTnVs
bExpdGVyYWw6CisgICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDoKKyAgICAgICAgICAgIHJldHVy
biBub2RlLmZpbmlzaElkZW50aWZpZXIodG9rZW4udmFsdWUpOworICAgICAgICBjYXNlIFRva2Vu
LlB1bmN0dWF0b3I6CisgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdbJykgeworICAg
ICAgICAgICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24pOworICAgICAgICAgICAgICAgIGV4cGVjdCgnXScpOworICAgICAgICAgICAgICAg
IHJldHVybiBleHByOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KKyAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworICAgIH0KIAotICAgICAg
ICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi52YWx1ZSA9PT0g
J1snKSB7Ci0gICAgICAgICAgICAvLyBGb3IgY29tcHV0ZWQgcHJvcGVydGllcyB3ZSBzaG91bGQg
c2tpcCB0aGUgWyBhbmQgXSwgYW5kCi0gICAgICAgICAgICAvLyBjYXB0dXJlIGluIG1hcmtlciBv
bmx5IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gaXRzZWxmLgotICAgICAgICAgICAgbWFya2Vy
ID0gbWFya2VyQ3JlYXRlKCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eUtleSA9IHBhcnNlQXNzaWdu
bWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1hcmtlckFwcGx5KG1hcmtl
ciwgcHJvcGVydHlLZXkpOwotICAgICAgICAgICAgZXhwZWN0KCddJyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIGZ1bmN0aW9uIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpIHsKKyAg
ICAgICAgc3dpdGNoIChsb29rYWhlYWQudHlwZSkgeworICAgICAgICBjYXNlIFRva2VuLklkZW50
aWZpZXI6CisgICAgICAgIGNhc2UgVG9rZW4uU3RyaW5nTGl0ZXJhbDoKKyAgICAgICAgY2FzZSBU
b2tlbi5Cb29sZWFuTGl0ZXJhbDoKKyAgICAgICAgY2FzZSBUb2tlbi5OdWxsTGl0ZXJhbDoKKyAg
ICAgICAgY2FzZSBUb2tlbi5OdW1lcmljTGl0ZXJhbDoKKyAgICAgICAgY2FzZSBUb2tlbi5LZXl3
b3JkOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG9rZW4uUHVuY3R1
YXRvcjoKKyAgICAgICAgICAgIHJldHVybiBsb29rYWhlYWQudmFsdWUgPT09ICdbJzsKICAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0
ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoKSB7Ci0gICAgICAgIHZhciB0b2tl
biwga2V5LCBpZCwgcGFyYW0sIGNvbXB1dGVkLAotICAgICAgICAgICAgbWFya2VyID0gbWFya2Vy
Q3JlYXRlKCk7Ci0KLSAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIGNvbXB1dGVk
ID0gKHRva2VuLnZhbHVlID09PSAnWycgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRv
cik7Ci0KLSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHwgY29t
cHV0ZWQpIHsKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHRvIHRyeSB0byBwYXJzZSBhIE1ldGhv
ZERlZmluaXRpb24gYXMgZGVmaW5lZCBpbiAxNC4zLiBCdXQgaW4gdGhlIGNhc2Ugb2Ygb2JqZWN0
IGxpdGVyYWxzLAorICAgIC8vIGl0IG1pZ2h0IGJlIGNhbGxlZCBhdCBhIHBvc2l0aW9uIHdoZXJl
IHRoZXJlIGlzIGluIGZhY3QgYSBzaG9ydCBoYW5kIGlkZW50aWZpZXIgcGF0dGVybiBvciBhIGRh
dGEgcHJvcGVydHkuCisgICAgLy8gVGhpcyBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGFmdGVyIHdl
IGNvbnN1bWVkIHVwIHRvIHRoZSBsZWZ0IHBhcmVudGhlc2VzLgorICAgIC8vCisgICAgLy8gSW4g
b3JkZXIgdG8gYXZvaWQgYmFjayB0cmFja2luZywgaXQgcmV0dXJucyBgbnVsbGAgaWYgdGhlIHBv
c2l0aW9uIGlzIG5vdCBhIE1ldGhvZERlZmluaXRpb24gYW5kIHRoZSBjYWxsZXIKKyAgICAvLyBp
cyByZXNwb25zaWJsZSB0byB2aXNpdCBvdGhlciBvcHRpb25zLgorICAgIGZ1bmN0aW9uIHRyeVBh
cnNlTWV0aG9kRGVmaW5pdGlvbih0b2tlbiwga2V5LCBjb21wdXRlZCwgbm9kZSkgeworICAgICAg
ICB2YXIgdmFsdWUsIG9wdGlvbnMsIG1ldGhvZE5vZGUsIHBhcmFtcywKKyAgICAgICAgICAgIHBy
ZXZpb3VzQWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7CiAKLSAgICAgICAgICAgIGlkID0g
cGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwotCi0gICAgICAgICAgICAvLyBQcm9wZXJ0eSBBc3Np
Z25tZW50OiBHZXR0ZXIgYW5kIFNldHRlci4KKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRv
a2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIC8vIGNoZWNrIGZvciBgZ2V0YCBhbmQgYHNl
dGA7CiAKLSAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ2dldCcgJiYgIShtYXRjaCgn
OicpIHx8IG1hdGNoKCcoJykpKSB7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSAobG9va2Fo
ZWFkLnZhbHVlID09PSAnWycpOworICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnZ2V0
JyAmJiBsb29rYWhlYWRQcm9wZXJ0eU5hbWUoKSkgeworICAgICAgICAgICAgICAgIGNvbXB1dGVk
ID0gbWF0Y2goJ1snKTsKICAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5
S2V5KCk7CisgICAgICAgICAgICAgICAgbWV0aG9kTm9kZSA9IG5ldyBOb2RlKCk7CiAgICAgICAg
ICAgICAgICAgZXhwZWN0KCcoJyk7CiAgICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlUHJv
cGVydHkoJ2dldCcsIGtleSwgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHsgZ2VuZXJhdG9yOiBmYWxz
ZSB9KSwgZmFsc2UsIGZhbHNlLCBjb21wdXRlZCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiAhKG1hdGNoKCc6JykgfHwgbWF0Y2goJygn
KSkpIHsKLSAgICAgICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09ICdb
Jyk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24obWV0aG9kTm9kZSwgeworICAg
ICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
czogW10sCisgICAgICAgICAgICAgICAgICAgIHN0cmljdGVkOiBudWxsLAorICAgICAgICAgICAg
ICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsCisgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2U6IG51bGwKKyAgICAgICAgICAgICAgICB9LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgc3Rh
dGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKworICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdnZXQnLCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgZmFs
c2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICdzZXQn
ICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZWQg
PSBtYXRjaCgnWycpOwogICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlL
ZXkoKTsKKyAgICAgICAgICAgICAgICBtZXRob2ROb2RlID0gbmV3IE5vZGUoKTsKICAgICAgICAg
ICAgICAgICBleHBlY3QoJygnKTsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsK
LSAgICAgICAgICAgICAgICBwYXJhbSA9IFsgcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSBdOwor
CisgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1z
OiBbXSwKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvdW50OiAwLAorICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0czogW10sCisgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3Rl
ZDogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1TZXQ6IHt9CisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAg
ICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgcGFyc2VQYXJhbShvcHRpb25zKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdENvdW50ID09PSAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zLmRlZmF1bHRzID0gW107CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlUHJvcGVy
dHkoJ3NldCcsIGtleSwgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHsgcGFyYW1zOiBwYXJhbSwgZ2Vu
ZXJhdG9yOiBmYWxzZSwgbmFtZTogdG9rZW4gfSksIGZhbHNlLCBmYWxzZSwgY29tcHV0ZWQpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtYXRjaCgnOicpKSB7Ci0gICAgICAgICAg
ICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwg
ZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2luaXQnLCBpZCwgcGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpLCBmYWxzZSwgZmFsc2UsIGNvbXB1dGVkKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAobWF0Y2goJygnKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBs
eShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdpbml0JywgaWQsIHBhcnNlUHJvcGVy
dHlNZXRob2RGdW5jdGlvbih7IGdlbmVyYXRvcjogZmFsc2UgfSksIHRydWUsIGZhbHNlLCBjb21w
dXRlZCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvbXB1dGVkKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBjYW4gb25seSBiZSB1c2VkIHdpdGgg
ZnVsbCBub3RhdGlvbi4KLSAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFk
KTsKKworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihtZXRob2ROb2RlLCBvcHRpb25z
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxs
b3dZaWVsZDsKKworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdz
ZXQnLCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVBy
b3BlcnR5KCdpbml0JywgaWQsIGlkLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgfSBl
bHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIHRva2VuLnZhbHVlID09
PSAnKicgJiYgbG9va2FoZWFkUHJvcGVydHlOYW1lKCkpIHsKKyAgICAgICAgICAgIGNvbXB1dGVk
ID0gbWF0Y2goJ1snKTsKKyAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXko
KTsKKyAgICAgICAgICAgIG1ldGhvZE5vZGUgPSBuZXcgTm9kZSgpOworCisgICAgICAgICAgICBz
dGF0ZS5hbGxvd1lpZWxkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1z
KCk7CisgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwor
CisgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7CisgICAgICAgICAgICB2YWx1
ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihtZXRob2ROb2RlLCBwYXJhbXMsIHRydWUpOworICAg
ICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKworICAgICAg
ICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLCB2
YWx1ZSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi50eXBlID09
PSBUb2tlbi5FT0YgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgewotICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnKicpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVk
KHRva2VuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxleCgpOwogCi0gICAgICAgICAg
ICBjb21wdXRlZCA9IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29r
YWhlYWQudmFsdWUgPT09ICdbJyk7CisgICAgICAgIGlmIChrZXkgJiYgbWF0Y2goJygnKSkgewor
ICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oKTsKKyAgICAg
ICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwg
dmFsdWUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZCA9IHBhcnNl
T2JqZWN0UHJvcGVydHlLZXkoKTsKKyAgICAgICAgLy8gTm90IGEgTWV0aG9kRGVmaW5pdGlvbi4K
KyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQogCi0gICAgICAgICAgICBpZiAoIW1hdGNoKCco
JykpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOwotICAgICAgICAg
ICAgfQorICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoaGFzUHJvdG8pIHsKKyAgICAg
ICAgdmFyIHRva2VuID0gbG9va2FoZWFkLCBub2RlID0gbmV3IE5vZGUoKSwgY29tcHV0ZWQsIGtl
eSwgbWF5YmVNZXRob2QsIHByb3RvLCB2YWx1ZTsKKworICAgICAgICBjb21wdXRlZCA9IG1hdGNo
KCdbJyk7CisgICAgICAgIGlmIChtYXRjaCgnKicpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXko
KTsKKyAgICAgICAgfQorICAgICAgICBtYXliZU1ldGhvZCA9IHRyeVBhcnNlTWV0aG9kRGVmaW5p
dGlvbih0b2tlbiwga2V5LCBjb21wdXRlZCwgbm9kZSk7CisgICAgICAgIGlmIChtYXliZU1ldGhv
ZCkgeworICAgICAgICAgICAgcmV0dXJuIG1heWJlTWV0aG9kOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFrZXkpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVh
ZCk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwg
ZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2luaXQnLCBpZCwgcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1
bmN0aW9uKHsgZ2VuZXJhdG9yOiB0cnVlIH0pLCB0cnVlLCBmYWxzZSwgY29tcHV0ZWQpKTsKKyAg
ICAgICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZWQgX19wcm90b19fCisgICAgICAgIGlmICghY29t
cHV0ZWQpIHsKKyAgICAgICAgICAgIHByb3RvID0gKGtleS50eXBlID09PSBTeW50YXguSWRlbnRp
ZmllciAmJiBrZXkubmFtZSA9PT0gJ19fcHJvdG9fXycpIHx8CisgICAgICAgICAgICAgICAgKGtl
eS50eXBlID09PSBTeW50YXguTGl0ZXJhbCAmJiBrZXkudmFsdWUgPT09ICdfX3Byb3RvX18nKTsK
KyAgICAgICAgICAgIGlmIChoYXNQcm90by52YWx1ZSAmJiBwcm90bykgeworICAgICAgICAgICAg
ICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBoYXNQcm90by52YWx1ZSB8PSBwcm90bzsKICAgICAgICAg
fQotICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisKICAgICAgICAgaWYg
KG1hdGNoKCc6JykpIHsKICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgcmV0dXJuIG1h
cmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2luaXQnLCBrZXksIHBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtYXRjaCgnKCcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2Vy
QXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnaW5pdCcsIGtleSwgcGFyc2VQ
cm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKHsgZ2VuZXJhdG9yOiBmYWxzZSB9KSwgdHJ1ZSwgZmFsc2Us
IGZhbHNlKSk7CisgICAgICAgICAgICB2YWx1ZSA9IGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbik7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9w
ZXJ0eSgnaW5pdCcsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBmYWxzZSwgZmFsc2UpOwogICAgICAg
ICB9Ci0gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7Ci0gICAgfQogCi0gICAgZnVuY3Rp
b24gZ2V0RmllbGROYW1lKGtleSkgewotICAgICAgICB2YXIgdG9TdHJpbmcgPSBTdHJpbmc7Ci0g
ICAgICAgIGlmIChrZXkudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAgICAgICAg
IHJldHVybiBrZXkubmFtZTsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50
aWZpZXIpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnPScpKSB7CisgICAgICAgICAgICAgICAg
Zmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbG9va2FoZWFkOworICAgICAgICAgICAg
ICAgIGxleCgpOworICAgICAgICAgICAgICAgIHZhbHVlID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5m
aW5pc2hQcm9wZXJ0eSgnaW5pdCcsIGtleSwgY29tcHV0ZWQsCisgICAgICAgICAgICAgICAgICAg
IG5ldyBXcmFwcGluZ05vZGUodG9rZW4pLmZpbmlzaEFzc2lnbm1lbnRQYXR0ZXJuKGtleSwgdmFs
dWUpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9k
ZS5maW5pc2hQcm9wZXJ0eSgnaW5pdCcsIGtleSwgY29tcHV0ZWQsIGtleSwgZmFsc2UsIHRydWUp
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1N0cmluZyhrZXkudmFsdWUpOworCisgICAg
ICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7CiAgICAgfQogCi0gICAgZnVuY3Rp
b24gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpIHsKLSAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBb
XSwgcHJvcGVydHksIG5hbWUsIGtpbmQsIHN0b3JlZEtpbmQsIG1hcCA9IG5ldyBTdHJpbmdNYXAo
KSwKLSAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBh
cnNlT2JqZWN0SW5pdGlhbGl6ZXIoKSB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW10sIGhh
c1Byb3RvID0ge3ZhbHVlOiBmYWxzZX0sIG5vZGUgPSBuZXcgTm9kZSgpOwogCiAgICAgICAgIGV4
cGVjdCgneycpOwogCiAgICAgICAgIHdoaWxlICghbWF0Y2goJ30nKSkgewotICAgICAgICAgICAg
cHJvcGVydHkgPSBwYXJzZU9iamVjdFByb3BlcnR5KCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJv
cGVydHkuY29tcHV0ZWQpIHsKLSAgICAgICAgICAgICAgICBuYW1lID0gZ2V0RmllbGROYW1lKHBy
b3BlcnR5LmtleSk7Ci0gICAgICAgICAgICAgICAga2luZCA9IChwcm9wZXJ0eS5raW5kID09PSAn
aW5pdCcpID8gUHJvcGVydHlLaW5kLkRhdGEgOiAocHJvcGVydHkua2luZCA9PT0gJ2dldCcpID8g
UHJvcGVydHlLaW5kLkdldCA6IFByb3BlcnR5S2luZC5TZXQ7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobWFwLmhhcyhuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBzdG9yZWRLaW5kID0gbWFw
LmdldChuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3JlZEtpbmQgPT09IFByb3Bl
cnR5S2luZC5EYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGtp
bmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3REdXBsaWNhdGVQcm9wZXJ0eSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgIT09IFByb3BlcnR5S2lu
ZC5EYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoa2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVBy
b3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcmVkS2luZCAm
IGtpbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
e30sIE1lc3NhZ2VzLkFjY2Vzc29yR2V0U2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KG5hbWUs
IHN0b3JlZEtpbmQgfCBraW5kKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBtYXAuc2V0KG5hbWUsIGtpbmQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKKyAgICAg
ICAgICAgIHByb3BlcnRpZXMucHVzaChwYXJzZU9iamVjdFByb3BlcnR5KGhhc1Byb3RvKSk7CiAK
ICAgICAgICAgICAgIGlmICghbWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAgIGV4cGVjdCgn
LCcpOworICAgICAgICAgICAgICAgIGV4cGVjdENvbW1hU2VwYXJhdG9yKCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICBleHBlY3QoJ30nKTsKIAotICAgICAgICByZXR1cm4g
bWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVPYmplY3RFeHByZXNzaW9uKHByb3Bl
cnRpZXMpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoT2JqZWN0RXhwcmVzc2lvbihwcm9w
ZXJ0aWVzKTsKICAgICB9CiAKKyAgICBmdW5jdGlvbiByZWludGVycHJldEV4cHJlc3Npb25Bc1Bh
dHRlcm4oZXhwcikgeworICAgICAgICB2YXIgaTsKKyAgICAgICAgc3dpdGNoIChleHByLnR5cGUp
IHsKKyAgICAgICAgY2FzZSBTeW50YXguSWRlbnRpZmllcjoKKyAgICAgICAgY2FzZSBTeW50YXgu
TWVtYmVyRXhwcmVzc2lvbjoKKyAgICAgICAgY2FzZSBTeW50YXguUmVzdEVsZW1lbnQ6CisgICAg
ICAgIGNhc2UgU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU3ludGF4LlNwcmVhZEVsZW1lbnQ6CisgICAgICAgICAgICBleHByLnR5cGUg
PSBTeW50YXguUmVzdEVsZW1lbnQ7CisgICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25B
c1BhdHRlcm4oZXhwci5hcmd1bWVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTeW50YXguQXJyYXlFeHByZXNzaW9uOgorICAgICAgICAgICAgZXhwci50eXBlID0gU3ludGF4
LkFycmF5UGF0dGVybjsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHByLmVsZW1lbnRz
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4cHIuZWxlbWVudHNbaV0gIT09
IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0
ZXJuKGV4cHIuZWxlbWVudHNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN5bnRheC5PYmplY3RFeHByZXNzaW9u
OgorICAgICAgICAgICAgZXhwci50eXBlID0gU3ludGF4Lk9iamVjdFBhdHRlcm47CisgICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIucHJvcGVydGll
c1tpXS52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb246CisgICAgICAgICAgICBleHByLnR5cGUg
PSBTeW50YXguQXNzaWdubWVudFBhdHRlcm47CisgICAgICAgICAgICByZWludGVycHJldEV4cHJl
c3Npb25Bc1BhdHRlcm4oZXhwci5sZWZ0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgLy8gQWxsb3cgb3RoZXIgbm9kZSB0eXBlIGZvciB0b2xlcmFu
dCBwYXJzaW5nLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBFQ01BLTI2MiAxMi4yLjkgVGVtcGxhdGUgTGl0ZXJhbHMKKwogICAgIGZ1bmN0aW9uIHBhcnNl
VGVtcGxhdGVFbGVtZW50KG9wdGlvbikgewotICAgICAgICB2YXIgbWFya2VyID0gbWFya2VyQ3Jl
YXRlKCksCi0gICAgICAgICAgICB0b2tlbiA9IHNjYW5UZW1wbGF0ZUVsZW1lbnQob3B0aW9uKTsK
LSAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkgewotICAgICAgICAgICAgdGhyb3dF
cnJvcih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAgdmFyIG5v
ZGUsIHRva2VuOworCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uVGVtcGxh
dGUgfHwgKG9wdGlvbi5oZWFkICYmICFsb29rYWhlYWQuaGVhZCkpIHsKKyAgICAgICAgICAgIHRo
cm93VW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1hcmtlckFw
cGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlVGVtcGxhdGVFbGVtZW50KHsgcmF3OiB0b2tlbi52
YWx1ZS5yYXcsIGNvb2tlZDogdG9rZW4udmFsdWUuY29va2VkIH0sIHRva2VuLnRhaWwpKTsKKwor
ICAgICAgICBub2RlID0gbmV3IE5vZGUoKTsKKyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKworICAg
ICAgICByZXR1cm4gbm9kZS5maW5pc2hUZW1wbGF0ZUVsZW1lbnQoeyByYXc6IHRva2VuLnZhbHVl
LnJhdywgY29va2VkOiB0b2tlbi52YWx1ZS5jb29rZWQgfSwgdG9rZW4udGFpbCk7CiAgICAgfQog
CiAgICAgZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSB7Ci0gICAgICAgIHZhciBxdWFz
aSwgcXVhc2lzLCBleHByZXNzaW9ucywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgICAg
IHZhciBxdWFzaSwgcXVhc2lzLCBleHByZXNzaW9ucywgbm9kZSA9IG5ldyBOb2RlKCk7CiAKICAg
ICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlRWxlbWVudCh7IGhlYWQ6IHRydWUgfSk7Ci0gICAg
ICAgIHF1YXNpcyA9IFsgcXVhc2kgXTsKKyAgICAgICAgcXVhc2lzID0gW3F1YXNpXTsKICAgICAg
ICAgZXhwcmVzc2lvbnMgPSBbXTsKIAogICAgICAgICB3aGlsZSAoIXF1YXNpLnRhaWwpIHsKQEAg
LTI3ODQsMTI3ICszMDk5LDIxMSBAQAogICAgICAgICAgICAgcXVhc2lzLnB1c2gocXVhc2kpOwog
ICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUu
Y3JlYXRlVGVtcGxhdGVMaXRlcmFsKHF1YXNpcywgZXhwcmVzc2lvbnMpKTsKKyAgICAgICAgcmV0
dXJuIG5vZGUuZmluaXNoVGVtcGxhdGVMaXRlcmFsKHF1YXNpcywgZXhwcmVzc2lvbnMpOwogICAg
IH0KIAotICAgIC8vIDExLjEuNiBUaGUgR3JvdXBpbmcgT3BlcmF0b3IKKyAgICAvLyBFQ01BLTI2
MiAxMi4yLjEwIFRoZSBHcm91cGluZyBPcGVyYXRvcgogCiAgICAgZnVuY3Rpb24gcGFyc2VHcm91
cEV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBleHByOworICAgICAgICB2YXIgZXhwciwgZXhw
cmVzc2lvbnMsIHN0YXJ0VG9rZW4sIGksIHBhcmFtcyA9IFtdOwogCiAgICAgICAgIGV4cGVjdCgn
KCcpOwogCi0gICAgICAgICsrc3RhdGUucGFyZW50aGVzaXplZENvdW50OwotCi0gICAgICAgIGV4
cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsKKyAgICAg
ICAgICAgIGxleCgpOworICAgICAgICAgICAgaWYgKCFtYXRjaCgnPT4nKSkgeworICAgICAgICAg
ICAgICAgIGV4cGVjdCgnPT4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VI
b2xkZXIsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKKyAgICAgICAgICAgICAgICByYXdQ
YXJhbXM6IFtdCisgICAgICAgICAgICB9OworICAgICAgICB9CiAKLSAgICAgICAgZXhwZWN0KCcp
Jyk7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGlmIChtYXRjaCgn
Li4uJykpIHsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVJlc3RFbGVtZW50KHBhcmFtcyk7Cisg
ICAgICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJz0+JykpIHsK
KyAgICAgICAgICAgICAgICBleHBlY3QoJz0+Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFBsYWNlSG9sZGVycy5BcnJvd1BhcmFt
ZXRlclBsYWNlSG9sZGVyLAorICAgICAgICAgICAgICAgIHBhcmFtczogW2V4cHJdCisgICAgICAg
ICAgICB9OworICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgfQorICAgICAg
ICBpc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgZXhwciA9IGluaGVyaXRDb3Zlckdy
YW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CiAKKyAgICAgICAgaWYgKG1hdGNoKCcs
JykpIHsKKyAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworICAgICAgICAg
ICAgZXhwcmVzc2lvbnMgPSBbZXhwcl07CiAKLSAgICAvLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lv
bnMKKyAgICAgICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsZXgoKTsKIAotICAgIGZ1bmN0aW9uIHBh
cnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBtYXJrZXIsIHR5cGUsIHRva2Vu
LCBleHByOworICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnLi4uJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc0JpbmRpbmdFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2gocGFyc2VSZXN0RWxlbWVudChw
YXJhbXMpKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghbWF0Y2goJz0+JykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dCgnPT4nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHJlc3Npb25zW2ldKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZTogUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGV4cHJlc3Npb25zCisgICAgICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHR5cGUgPSBsb29rYWhlYWQu
dHlwZTsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGluaGVyaXRDb3ZlckdyYW1t
YXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpOworICAgICAgICAgICAgfQogCi0gICAgICAg
IGlmICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBtYXJrZXIgPSBt
YXJrZXJDcmVhdGUoKTsKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRl
bGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIobGV4KCkudmFsdWUpKTsKKyAgICAgICAgICAgIGV4cHIg
PSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFNlcXVlbmNlRXhwcmVzc2lvbihl
eHByZXNzaW9ucyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uU3Ry
aW5nTGl0ZXJhbCB8fCB0eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgewotICAgICAgICAg
ICAgaWYgKHN0cmljdCAmJiBsb29rYWhlYWQub2N0YWwpIHsKLSAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFs
KGxleCgpKSk7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29y
ZCkgewotICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgndGhpcycpKSB7Ci0gICAgICAgICAg
ICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgbGV4KCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRl
VGhpc0V4cHJlc3Npb24oKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGV4cGVjdCgnKScpOwog
Ci0gICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk7CisgICAgICAgIGlmIChtYXRj
aCgnPT4nKSkgeworICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZp
ZXIgJiYgZXhwci5uYW1lID09PSAneWllbGQnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICAgICAgdHlwZTogUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxh
Y2VIb2xkZXIsCisgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW2V4cHJdCisgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgn
Y2xhc3MnKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNsYXNzRXhwcmVzc2lvbigp
OworICAgICAgICAgICAgaWYgKCFpc0JpbmRpbmdFbGVtZW50KSB7CisgICAgICAgICAgICAgICAg
dGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKG1hdGNoS2V5d29yZCgnc3VwZXInKSkgewotICAgICAgICAgICAgICAgIG1hcmtl
ciA9IG1hcmtlckNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIo
J3N1cGVyJykpOworICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4LlNlcXVlbmNl
RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHByLmV4cHJl
c3Npb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0RXhw
cmVzc2lvbkFzUGF0dGVybihleHByLmV4cHJlc3Npb25zW2ldKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0RXhwcmVz
c2lvbkFzUGF0dGVybihleHByKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAg
IGlmICh0eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCkgewotICAgICAgICAgICAgbWFya2Vy
ID0gbWFya2VyQ3JlYXRlKCk7Ci0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAg
ICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09ICd0cnVlJyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKSk7
CisgICAgICAgICAgICBleHByID0geworICAgICAgICAgICAgICAgIHR5cGU6IFBsYWNlSG9sZGVy
cy5BcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLAorICAgICAgICAgICAgICAgIHBhcmFtczogZXhw
ci50eXBlID09PSBTeW50YXguU2VxdWVuY2VFeHByZXNzaW9uID8gZXhwci5leHByZXNzaW9ucyA6
IFtleHByXQorICAgICAgICAgICAgfTsKICAgICAgICAgfQorICAgICAgICBpc0JpbmRpbmdFbGVt
ZW50ID0gZmFsc2U7CisgICAgICAgIHJldHVybiBleHByOworICAgIH0KIAotICAgICAgICBpZiAo
dHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHsKLSAgICAgICAgICAgIG1hcmtlciA9IG1hcmtl
ckNyZWF0ZSgpOwotICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAgICAgIHRva2Vu
LnZhbHVlID0gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRl
bGVnYXRlLmNyZWF0ZUxpdGVyYWwodG9rZW4pKTsKKworICAgIC8vIEVDTUEtMjYyIDEyLjIgUHJp
bWFyeSBFeHByZXNzaW9ucworCisgICAgZnVuY3Rpb24gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigp
IHsKKyAgICAgICAgdmFyIHR5cGUsIHRva2VuLCBleHByLCBub2RlOworCisgICAgICAgIGlmICht
YXRjaCgnKCcpKSB7CisgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUdyb3VwRXhwcmVzc2lvbik7
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobWF0Y2goJ1snKSkgewotICAgICAgICAgICAgcmV0
dXJuIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpOworICAgICAgICAgICAgcmV0dXJuIGluaGVyaXRD
b3ZlckdyYW1tYXIocGFyc2VBcnJheUluaXRpYWxpemVyKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChtYXRjaCgneycpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VPYmplY3RJbml0aWFs
aXNlcigpOworICAgICAgICAgICAgcmV0dXJuIGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VPYmpl
Y3RJbml0aWFsaXplcik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobWF0Y2goJygnKSkgewot
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgdHlwZSA9IGxvb2thaGVhZC50eXBlOworICAgICAgICBub2RlID0gbmV3IE5vZGUoKTsK
IAotICAgICAgICBpZiAobWF0Y2goJy8nKSB8fCBtYXRjaCgnLz0nKSkgewotICAgICAgICAgICAg
bWFya2VyID0gbWFya2VyQ3JlYXRlKCk7Ci0gICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3Jl
YXRlTGl0ZXJhbChzY2FuUmVnRXhwKCkpOwotICAgICAgICAgICAgcGVlaygpOwotICAgICAgICAg
ICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKHR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5z
b3VyY2VUeXBlID09PSAnbW9kdWxlJyAmJiBsb29rYWhlYWQudmFsdWUgPT09ICdhd2FpdCcpIHsK
KyAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZXhwciA9IG5vZGUuZmluaXNoSWRlbnRpZmllcihsZXgo
KS52YWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJh
bCB8fCB0eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgeworICAgICAgICAgICAgaXNBc3Np
Z25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgaWYg
KHN0cmljdCAmJiBsb29rYWhlYWQub2N0YWwpIHsKKyAgICAgICAgICAgICAgICB0b2xlcmF0ZVVu
ZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBleHByID0gbm9kZS5maW5pc2hMaXRlcmFsKGxleCgp
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAg
ICAgICBpZiAoIXN0cmljdCAmJiBzdGF0ZS5hbGxvd1lpZWxkICYmIG1hdGNoS2V5d29yZCgneWll
bGQnKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHko
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmlu
ZGluZ0VsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Z1bmN0
aW9uJykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24o
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3RoaXMnKSkg
eworICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZp
bmlzaFRoaXNFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWF0
Y2hLZXl3b3JkKCdjbGFzcycpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2xhc3NF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRU
b2tlbihsZXgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxp
dGVyYWwpIHsKKyAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1l
bnQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tl
bi52YWx1ZSA9ICh0b2tlbi52YWx1ZSA9PT0gJ3RydWUnKTsKKyAgICAgICAgICAgIGV4cHIgPSBu
b2RlLmZpbmlzaExpdGVyYWwodG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRv
a2VuLk51bGxMaXRlcmFsKSB7CisgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAg
ICAgICAgdG9rZW4udmFsdWUgPSBudWxsOworICAgICAgICAgICAgZXhwciA9IG5vZGUuZmluaXNo
TGl0ZXJhbCh0b2tlbik7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJy8nKSB8fCBtYXRjaCgn
Lz0nKSkgeworICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVu
dCA9IGZhbHNlOworICAgICAgICAgICAgaW5kZXggPSBzdGFydEluZGV4OwogCi0gICAgICAgIGlm
ICh0eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkgewotICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGVt
cGxhdGVMaXRlcmFsKCk7CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGNvbGxlY3RSZWdleCgpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHNjYW5SZWdFeHAo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgZXhwciA9
IG5vZGUuZmluaXNoTGl0ZXJhbCh0b2tlbik7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0g
VG9rZW4uVGVtcGxhdGUpIHsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVRlbXBsYXRlTGl0ZXJh
bCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4o
bGV4KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsKKyAg
ICAgICAgcmV0dXJuIGV4cHI7CiAgICAgfQogCi0gICAgLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBF
eHByZXNzaW9ucworICAgIC8vIEVDTUEtMjYyIDEyLjMgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lv
bnMKIAogICAgIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKCkgewotICAgICAgICB2YXIgYXJncyA9
IFtdLCBhcmc7CisgICAgICAgIHZhciBhcmdzID0gW10sIGV4cHI7CiAKICAgICAgICAgZXhwZWN0
KCcoJyk7CiAKICAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICB3aGlsZSAo
aW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZVNwcmVhZE9yQXNz
aWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTsKLQor
ICAgICAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobWF0Y2goJy4uLicpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgTm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgZXhw
ci5maW5pc2hTcHJlYWRFbGVtZW50KGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcmdzLnB1c2goZXhwcik7CiAg
ICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcudHlwZSA9PT0gU3ludGF4LlNwcmVh
ZEVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
RWxlbWVudEFmdGVyU3ByZWFkRWxlbWVudCk7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICAgICAgZXhwZWN0Q29tbWFTZXBhcmF0
b3IoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yOTEzLDI0ICszMzEyLDE2IEBA
CiAgICAgICAgIHJldHVybiBhcmdzOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHBhcnNlU3ByZWFk
T3JBc3NpZ25tZW50RXhwcmVzc2lvbigpIHsKLSAgICAgICAgaWYgKG1hdGNoKCcuLi4nKSkgewot
ICAgICAgICAgICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwotICAgICAgICAgICAgbGV4
KCk7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVh
dGVTcHJlYWRFbGVtZW50KHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSkpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgfQotCiAg
ICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgewotICAgICAgICB2YXIgbWFy
a2VyID0gbWFya2VyQ3JlYXRlKCksCi0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAg
ICB2YXIgdG9rZW4sIG5vZGUgPSBuZXcgTm9kZSgpOworCisgICAgICAgIHRva2VuID0gbGV4KCk7
CiAKICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJOYW1lKHRva2VuKSkgewotICAgICAgICAgICAg
dGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2Vu
KHRva2VuKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIs
IGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IG5vZGUuZmluaXNoSWRlbnRpZmllcih0b2tlbi52YWx1ZSk7CiAgICAgfQogCiAgICAgZnVuY3Rp
b24gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpIHsKQEAgLTI5NDQsMTM0ICszMzM1LDE5NSBAQAog
CiAgICAgICAgIGV4cGVjdCgnWycpOwogCi0gICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24o
KTsKKyAgICAgICAgZXhwciA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VFeHByZXNzaW9uKTsK
IAogICAgICAgICBleHBlY3QoJ10nKTsKIAogICAgICAgICByZXR1cm4gZXhwcjsKICAgICB9CiAK
KyAgICAvLyBFQ01BLTI2MiAxMi4zLjMgVGhlIG5ldyBPcGVyYXRvcgorCiAgICAgZnVuY3Rpb24g
cGFyc2VOZXdFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgY2FsbGVlLCBhcmdzLCBtYXJrZXIg
PSBtYXJrZXJDcmVhdGUoKTsKKyAgICAgICAgdmFyIGNhbGxlZSwgYXJncywgbm9kZSA9IG5ldyBO
b2RlKCk7CiAKICAgICAgICAgZXhwZWN0S2V5d29yZCgnbmV3Jyk7Ci0gICAgICAgIGNhbGxlZSA9
IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgnLicp
KSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9
PT0gVG9rZW4uSWRlbnRpZmllciAmJiBsb29rYWhlYWQudmFsdWUgPT09ICd0YXJnZXQnKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7CisgICAgICAgICAgICAg
ICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hNZXRh
UHJvcGVydHkoJ25ldycsICd0YXJnZXQnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOworICAgICAg
ICB9CisKKyAgICAgICAgY2FsbGVlID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUxlZnRIYW5k
U2lkZUV4cHJlc3Npb24pOwogICAgICAgICBhcmdzID0gbWF0Y2goJygnKSA/IHBhcnNlQXJndW1l
bnRzKCkgOiBbXTsKIAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0
ZS5jcmVhdGVOZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJncykpOworICAgICAgICBpc0Fzc2lnbm1l
bnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIG5v
ZGUuZmluaXNoTmV3RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpOwogICAgIH0KIAorICAgIC8vIEVD
TUEtMjYyIDEyLjMuNCBGdW5jdGlvbiBDYWxscworCiAgICAgZnVuY3Rpb24gcGFyc2VMZWZ0SGFu
ZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCkgewotICAgICAgICB2YXIgZXhwciwgYXJncywgbWFy
a2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgICAgIHZhciBxdWFzaSwgZXhwciwgYXJncywgcHJv
cGVydHksIHN0YXJ0VG9rZW4sIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47CiAKLSAg
ICAgICAgZXhwciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6
IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVh
ZDsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisKKyAgICAgICAgaWYgKG1hdGNoS2V5
d29yZCgnc3VwZXInKSAmJiBzdGF0ZS5pbkZ1bmN0aW9uQm9keSkgeworICAgICAgICAgICAgZXhw
ciA9IG5ldyBOb2RlKCk7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGV4cHIgPSBl
eHByLmZpbmlzaFN1cGVyKCk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCcoJykgJiYgIW1hdGNo
KCcuJykgJiYgIW1hdGNoKCdbJykpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRU
b2tlbihsb29rYWhlYWQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIobWF0Y2hLZXl3b3JkKCduZXcnKSA/IHBh
cnNlTmV3RXhwcmVzc2lvbiA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOworICAgICAgICB9CiAK
LSAgICAgICAgd2hpbGUgKG1hdGNoKCcuJykgfHwgbWF0Y2goJ1snKSB8fCBtYXRjaCgnKCcpIHx8
IGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkgewotICAgICAgICAgICAgaWYgKG1h
dGNoKCcoJykpIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYgKG1hdGNoKCcu
JykpIHsKKyAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTsKKyAgICAgICAgICAgICAgICBleHByID0g
bmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hNZW1iZXJFeHByZXNzaW9uKCcuJywg
ZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKCcpKSB7Cisg
ICAgICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGFyZ3MgPSBwYXJz
ZUFyZ3VtZW50cygpOwotICAgICAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIs
IGRlbGVnYXRlLmNyZWF0ZUNhbGxFeHByZXNzaW9uKGV4cHIsIGFyZ3MpKTsKKyAgICAgICAgICAg
ICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hDYWxsRXhwcmVz
c2lvbihleHByLCBhcmdzKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgewot
ICAgICAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0
ZU1lbWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBwYXJzZUNvbXB1dGVkTWVtYmVyKCkpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJy4nKSkgewotICAgICAgICAgICAgICAgIGV4cHIg
PSBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oJy4n
LCBleHByLCBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICBpc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIo
KTsKKyAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5m
aW5pc2hNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUgJiYgbG9va2FoZWFk
LmhlYWQpIHsKKyAgICAgICAgICAgICAgICBxdWFzaSA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsKCk7
CisgICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmlu
aXNoVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHF1YXNpKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdh
dGUuY3JlYXRlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHBhcnNlVGVtcGxhdGVMaXRl
cmFsKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQorICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOwogCiAgICAgICAgIHJl
dHVybiBleHByOwogICAgIH0KIAorICAgIC8vIEVDTUEtMjYyIDEyLjMgTGVmdC1IYW5kLVNpZGUg
RXhwcmVzc2lvbnMKKwogICAgIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbigp
IHsKLSAgICAgICAgdmFyIGV4cHIsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgICAgICB2
YXIgcXVhc2ksIGV4cHIsIHByb3BlcnR5LCBzdGFydFRva2VuOworICAgICAgICBhc3NlcnQoc3Rh
dGUuYWxsb3dJbiwgJ2NhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbiBhbHdheXMgYWxsb3cgaW4ga2V5
d29yZC4nKTsKIAotICAgICAgICBleHByID0gbWF0Y2hLZXl3b3JkKCduZXcnKSA/IHBhcnNlTmV3
RXhwcmVzc2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOworICAgICAgICBzdGFydFRv
a2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYg
c3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKKyAgICAgICAgICAgIGV4cHIgPSBuZXcgTm9kZSgpOwor
ICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBleHByID0gZXhwci5maW5pc2hTdXBlcigp
OworICAgICAgICAgICAgaWYgKCFtYXRjaCgnWycpICYmICFtYXRjaCgnLicpKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFy
KG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24gOiBwYXJzZVByaW1hcnlF
eHByZXNzaW9uKTsKKyAgICAgICAgfQogCi0gICAgICAgIHdoaWxlIChtYXRjaCgnLicpIHx8IG1h
dGNoKCdbJykgfHwgbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7CisgICAgICAg
IGZvciAoOzspIHsKICAgICAgICAgICAgIGlmIChtYXRjaCgnWycpKSB7Ci0gICAgICAgICAgICAg
ICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVz
c2lvbignWycsIGV4cHIsIHBhcnNlQ29tcHV0ZWRNZW1iZXIoKSkpOworICAgICAgICAgICAgICAg
IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRU
YXJnZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VDb21wdXRlZE1l
bWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9r
ZW4pLmZpbmlzaE1lbWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBwcm9wZXJ0eSk7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG1hdGNoKCcuJykpIHsKLSAgICAgICAgICAgICAgICBleHByID0gbWFy
a2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCcuJywgZXhw
ciwgcGFyc2VOb25Db21wdXRlZE1lbWJlcigpKSk7CisgICAgICAgICAgICAgICAgaXNCaW5kaW5n
RWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCk7
CisgICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmlu
aXNoTWVtYmVyRXhwcmVzc2lvbignLicsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlICYmIGxvb2thaGVhZC5o
ZWFkKSB7CisgICAgICAgICAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpOwor
ICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlz
aFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFzaSk7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRl
LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBwYXJzZVRlbXBsYXRlTGl0ZXJh
bCgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LQogICAgICAgICByZXR1cm4gZXhwcjsKICAgICB9CiAKLSAgICAvLyAxMS4zIFBvc3RmaXggRXhw
cmVzc2lvbnMKKyAgICAvLyBFQ01BLTI2MiAxMi40IFBvc3RmaXggRXhwcmVzc2lvbnMKIAogICAg
IGZ1bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBtYXJrZXIg
PSBtYXJrZXJDcmVhdGUoKSwKLSAgICAgICAgICAgIGV4cHIgPSBwYXJzZUxlZnRIYW5kU2lkZUV4
cHJlc3Npb25BbGxvd0NhbGwoKSwKLSAgICAgICAgICAgIHRva2VuOworICAgICAgICB2YXIgZXhw
ciwgdG9rZW4sIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CiAKLSAgICAgICAgaWYgKGxvb2thaGVh
ZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXhwcjsK
LSAgICAgICAgfQorICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUxlZnRI
YW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpOwogCi0gICAgICAgIGlmICgobWF0Y2goJysrJykg
fHwgbWF0Y2goJy0tJykpICYmICFwZWVrTGluZVRlcm1pbmF0b3IoKSkgewotICAgICAgICAgICAg
Ly8gMTEuMy4xLCAxMS4zLjIKLSAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09
PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKLSAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1Bv
c3RmaXgpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoIWhhc0xpbmVUZXJtaW5hdG9yICYm
IGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICBpZiAo
bWF0Y2goJysrJykgfHwgbWF0Y2goJy0tJykpIHsKKyAgICAgICAgICAgICAgICAvLyBFQ01BLTI2
MiAxMS4zLjEsIDExLjMuMgorICAgICAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBl
ID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3RMSFNQb3N0
Zml4KTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNp
ZGUoZXhwcikpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZh
bGlkTEhTSW5Bc3NpZ25tZW50KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
IWlzQXNzaWdubWVudFRhcmdldCkgeworICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9y
KE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBs
eShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBl
eHByKSk7CisgICAgICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxl
bWVudCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAg
ICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hQb3N0Zml4
RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAogICAgICAgICByZXR1cm4gZXhwcjsKICAgICB9CiAKLSAgICAvLyAxMS40IFVuYXJ5IE9wZXJh
dG9ycworICAgIC8vIEVDTUEtMjYyIDEyLjUgVW5hcnkgT3BlcmF0b3JzCiAKICAgICBmdW5jdGlv
biBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIG1hcmtlciwgdG9rZW4sIGV4
cHI7CisgICAgICAgIHZhciB0b2tlbiwgZXhwciwgc3RhcnRUb2tlbjsKIAogICAgICAgICBpZiAo
bG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnR5cGUgIT09
IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVBvc3RmaXhFeHByZXNz
aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWF0Y2goJysrJykgfHwgbWF0Y2goJy0t
JykpIHsKLSAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgICAgICAgICAg
ZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRj
aCgnKysnKSB8fCBtYXRjaCgnLS0nKSkgeworICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2th
aGVhZDsKICAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Ci0gICAgICAgICAgICBleHByID0gcGFy
c2VVbmFyeUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIC8vIDExLjQuNCwgMTEuNC41CisgICAg
ICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZVVuYXJ5RXhwcmVzc2lvbik7
CisgICAgICAgICAgICAvLyBFQ01BLTI2MiAxMS40LjQsIDExLjQuNQogICAgICAgICAgICAgaWYg
KHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3Rl
ZFdvcmQoZXhwci5uYW1lKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7
fSwgTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KTsKKyAgICAgICAgICAgICAgICB0b2xlcmF0ZUVy
cm9yKE1lc3NhZ2VzLlN0cmljdExIU1ByZWZpeCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAgICAgIGlm
ICghaXNBc3NpZ25tZW50VGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihN
ZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHBy
ZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWF0
Y2goJysnKSB8fCBtYXRjaCgnLScpIHx8IG1hdGNoKCd+JykgfHwgbWF0Y2goJyEnKSkgewotICAg
ICAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgICAgICAgICBleHByID0gbmV3
IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hVbmFyeUV4cHJlc3Npb24odG9rZW4udmFs
dWUsIGV4cHIpOworICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxl
bWVudCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcrJykgfHwgbWF0Y2goJy0n
KSB8fCBtYXRjaCgnficpIHx8IG1hdGNoKCchJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9rZW4g
PSBsb29rYWhlYWQ7CiAgICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAgICAgZXhw
ciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBw
bHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4
cHIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2RlbGV0ZScpIHx8
IG1hdGNoS2V5d29yZCgndm9pZCcpIHx8IG1hdGNoS2V5d29yZCgndHlwZW9mJykpIHsKLSAgICAg
ICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgICAgICAgICAgZXhwciA9IGluaGVy
aXRDb3ZlckdyYW1tYXIocGFyc2VVbmFyeUV4cHJlc3Npb24pOworICAgICAgICAgICAgZXhwciA9
IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoVW5hcnlFeHByZXNzaW9uKHRva2Vu
LnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGlu
Z0VsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoJ2RlbGV0
ZScpIHx8IG1hdGNoS2V5d29yZCgndm9pZCcpIHx8IG1hdGNoS2V5d29yZCgndHlwZW9mJykpIHsK
KyAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CiAgICAgICAgICAgICB0b2tlbiA9
IGxleCgpOwotICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7Ci0gICAg
ICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4
cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpKTsKKyAgICAgICAgICAgIGV4cHIgPSBpbmhlcml0
Q292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIGV4cHIgPSBu
ZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFVuYXJ5RXhwcmVzc2lvbih0b2tlbi52
YWx1ZSwgZXhwcik7CiAgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09
ICdkZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsK
LSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdERl
bGV0ZSk7CisgICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3REZWxl
dGUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAgICAg
ICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOwog
ICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTsKKyAg
ICAgICAgcmV0dXJuIGV4cHI7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gYmluYXJ5UHJlY2VkZW5j
ZSh0b2tlbiwgYWxsb3dJbikgewpAQCAtMzE0NSwyMTkgKzM1OTcsMTg5IEBACiAgICAgICAgIHJl
dHVybiBwcmVjOwogICAgIH0KIAotICAgIC8vIDExLjUgTXVsdGlwbGljYXRpdmUgT3BlcmF0b3Jz
Ci0gICAgLy8gMTEuNiBBZGRpdGl2ZSBPcGVyYXRvcnMKLSAgICAvLyAxMS43IEJpdHdpc2UgU2hp
ZnQgT3BlcmF0b3JzCi0gICAgLy8gMTEuOCBSZWxhdGlvbmFsIE9wZXJhdG9ycwotICAgIC8vIDEx
LjkgRXF1YWxpdHkgT3BlcmF0b3JzCi0gICAgLy8gMTEuMTAgQmluYXJ5IEJpdHdpc2UgT3BlcmF0
b3JzCi0gICAgLy8gMTEuMTEgQmluYXJ5IExvZ2ljYWwgT3BlcmF0b3JzCisgICAgLy8gRUNNQS0y
NjIgMTIuNiBNdWx0aXBsaWNhdGl2ZSBPcGVyYXRvcnMKKyAgICAvLyBFQ01BLTI2MiAxMi43IEFk
ZGl0aXZlIE9wZXJhdG9ycworICAgIC8vIEVDTUEtMjYyIDEyLjggQml0d2lzZSBTaGlmdCBPcGVy
YXRvcnMKKyAgICAvLyBFQ01BLTI2MiAxMi45IFJlbGF0aW9uYWwgT3BlcmF0b3JzCisgICAgLy8g
RUNNQS0yNjIgMTIuMTAgRXF1YWxpdHkgT3BlcmF0b3JzCisgICAgLy8gRUNNQS0yNjIgMTIuMTEg
QmluYXJ5IEJpdHdpc2UgT3BlcmF0b3JzCisgICAgLy8gRUNNQS0yNjIgMTIuMTIgQmluYXJ5IExv
Z2ljYWwgT3BlcmF0b3JzCiAKICAgICBmdW5jdGlvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKSB7
Ci0gICAgICAgIHZhciBleHByLCB0b2tlbiwgcHJlYywgcHJldmlvdXNBbGxvd0luLCBzdGFjaywg
cmlnaHQsIG9wZXJhdG9yLCBsZWZ0LCBpLAotICAgICAgICAgICAgbWFya2VyLCBtYXJrZXJzOwot
Ci0gICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47Ci0gICAgICAgIHN0YXRl
LmFsbG93SW4gPSB0cnVlOworICAgICAgICB2YXIgbWFya2VyLCBtYXJrZXJzLCBleHByLCB0b2tl
biwgcHJlYywgc3RhY2ssIHJpZ2h0LCBvcGVyYXRvciwgbGVmdCwgaTsKIAotICAgICAgICBtYXJr
ZXIgPSBtYXJrZXJDcmVhdGUoKTsKLSAgICAgICAgbGVmdCA9IHBhcnNlVW5hcnlFeHByZXNzaW9u
KCk7CisgICAgICAgIG1hcmtlciA9IGxvb2thaGVhZDsKKyAgICAgICAgbGVmdCA9IGluaGVyaXRD
b3ZlckdyYW1tYXIocGFyc2VVbmFyeUV4cHJlc3Npb24pOwogCiAgICAgICAgIHRva2VuID0gbG9v
a2FoZWFkOwotICAgICAgICBwcmVjID0gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgcHJldmlvdXNB
bGxvd0luKTsKKyAgICAgICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHN0YXRlLmFs
bG93SW4pOwogICAgICAgICBpZiAocHJlYyA9PT0gMCkgewogICAgICAgICAgICAgcmV0dXJuIGxl
ZnQ7CiAgICAgICAgIH0KKyAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxl
bWVudCA9IGZhbHNlOwogICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKICAgICAgICAgbGV4KCk7
CiAKLSAgICAgICAgbWFya2VycyA9IFttYXJrZXIsIG1hcmtlckNyZWF0ZSgpXTsKLSAgICAgICAg
cmlnaHQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICBtYXJrZXJzID0gW21hcmtl
ciwgbG9va2FoZWFkXTsKKyAgICAgICAgcmlnaHQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNl
VW5hcnlFeHByZXNzaW9uKTsKIAogICAgICAgICBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRd
OwogCi0gICAgICAgIHdoaWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkLCBw
cmV2aW91c0FsbG93SW4pKSA+IDApIHsKKyAgICAgICAgd2hpbGUgKChwcmVjID0gYmluYXJ5UHJl
Y2VkZW5jZShsb29rYWhlYWQsIHN0YXRlLmFsbG93SW4pKSA+IDApIHsKIAogICAgICAgICAgICAg
Ly8gUmVkdWNlOiBtYWtlIGEgYmluYXJ5IGV4cHJlc3Npb24gZnJvbSB0aGUgdGhyZWUgdG9wbW9z
dCBlbnRyaWVzLgogICAgICAgICAgICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAmJiAocHJl
YyA8PSBzdGFja1tzdGFjay5sZW5ndGggLSAyXS5wcmVjKSkgewogICAgICAgICAgICAgICAgIHJp
Z2h0ID0gc3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBzdGFjay5wb3Ao
KS52YWx1ZTsKICAgICAgICAgICAgICAgICBsZWZ0ID0gc3RhY2sucG9wKCk7Ci0gICAgICAgICAg
ICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxl
ZnQsIHJpZ2h0KTsKICAgICAgICAgICAgICAgICBtYXJrZXJzLnBvcCgpOwotICAgICAgICAgICAg
ICAgIG1hcmtlciA9IG1hcmtlcnMucG9wKCk7Ci0gICAgICAgICAgICAgICAgbWFya2VyQXBwbHko
bWFya2VyLCBleHByKTsKKyAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZSht
YXJrZXJzW21hcmtlcnMubGVuZ3RoIC0gMV0pLmZpbmlzaEJpbmFyeUV4cHJlc3Npb24ob3BlcmF0
b3IsIGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGV4cHIpOwotICAg
ICAgICAgICAgICAgIG1hcmtlcnMucHVzaChtYXJrZXIpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAvLyBTaGlmdC4KICAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CiAgICAgICAgICAg
ICB0b2tlbi5wcmVjID0gcHJlYzsKICAgICAgICAgICAgIHN0YWNrLnB1c2godG9rZW4pOwotICAg
ICAgICAgICAgbWFya2Vycy5wdXNoKG1hcmtlckNyZWF0ZSgpKTsKLSAgICAgICAgICAgIGV4cHIg
PSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAgICAgbWFya2Vycy5wdXNoKGxvb2th
aGVhZCk7CisgICAgICAgICAgICBleHByID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZVVuYXJ5
RXhwcmVzc2lvbik7CiAgICAgICAgICAgICBzdGFjay5wdXNoKGV4cHIpOwogICAgICAgICB9CiAK
LSAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKLQogICAgICAgICAvLyBG
aW5hbCByZWR1Y2UgdG8gY2xlYW4tdXAgdGhlIHN0YWNrLgogICAgICAgICBpID0gc3RhY2subGVu
Z3RoIC0gMTsKICAgICAgICAgZXhwciA9IHN0YWNrW2ldOwogICAgICAgICBtYXJrZXJzLnBvcCgp
OwogICAgICAgICB3aGlsZSAoaSA+IDEpIHsKLSAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5j
cmVhdGVCaW5hcnlFeHByZXNzaW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBl
eHByKTsKKyAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKG1hcmtlcnMucG9wKCkp
LmZpbmlzaEJpbmFyeUV4cHJlc3Npb24oc3RhY2tbaSAtIDFdLnZhbHVlLCBzdGFja1tpIC0gMl0s
IGV4cHIpOwogICAgICAgICAgICAgaSAtPSAyOwotICAgICAgICAgICAgbWFya2VyID0gbWFya2Vy
cy5wb3AoKTsKLSAgICAgICAgICAgIG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7CiAgICAgICAg
IH0KIAogICAgICAgICByZXR1cm4gZXhwcjsKICAgICB9CiAKIAotICAgIC8vIDExLjEyIENvbmRp
dGlvbmFsIE9wZXJhdG9yCisgICAgLy8gRUNNQS0yNjIgMTIuMTMgQ29uZGl0aW9uYWwgT3BlcmF0
b3IKIAogICAgIGZ1bmN0aW9uIHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCkgewotICAgICAg
ICB2YXIgZXhwciwgcHJldmlvdXNBbGxvd0luLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUsIG1hcmtl
ciA9IG1hcmtlckNyZWF0ZSgpOwotICAgICAgICBleHByID0gcGFyc2VCaW5hcnlFeHByZXNzaW9u
KCk7CisgICAgICAgIHZhciBleHByLCBwcmV2aW91c0FsbG93SW4sIGNvbnNlcXVlbnQsIGFsdGVy
bmF0ZSwgc3RhcnRUb2tlbjsKIAorICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisg
ICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQmluYXJ5RXhwcmVzc2lvbik7
CiAgICAgICAgIGlmIChtYXRjaCgnPycpKSB7CiAgICAgICAgICAgICBsZXgoKTsKICAgICAgICAg
ICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47CiAgICAgICAgICAgICBzdGF0ZS5h
bGxvd0luID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnNlcXVlbnQgPSBwYXJzZUFzc2lnbm1lbnRF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICBjb25zZXF1ZW50ID0gaXNvbGF0ZUNvdmVyR3JhbW1h
cihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4g
PSBwcmV2aW91c0FsbG93SW47CiAgICAgICAgICAgICBleHBlY3QoJzonKTsKLSAgICAgICAgICAg
IGFsdGVybmF0ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGFs
dGVybmF0ZSA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7
CiAKLSAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0
ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpKTsKKyAg
ICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaENvbmRp
dGlvbmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpOworICAgICAgICAg
ICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwogICAgICAg
ICB9CiAKICAgICAgICAgcmV0dXJuIGV4cHI7CiAgICAgfQogCi0gICAgLy8gMTEuMTMgQXNzaWdu
bWVudCBPcGVyYXRvcnMKLQotICAgIC8vIDEyLjE0LjUgQXNzaWdubWVudFBhdHRlcm4KKyAgICAv
LyBFQ01BLTI2MiAxNC4yIEFycm93IEZ1bmN0aW9uIERlZmluaXRpb25zCiAKLSAgICBmdW5jdGlv
biByZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKGV4cHIpIHsKLSAgICAgICAg
dmFyIGksIGxlbiwgcHJvcGVydHksIGVsZW1lbnQ7Ci0KLSAgICAgICAgaWYgKGV4cHIudHlwZSA9
PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgIGV4cHIudHlwZSA9IFN5
bnRheC5PYmplY3RQYXR0ZXJuOwotICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5w
cm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7Ci0gICAgICAgICAgICAgICAgcHJv
cGVydHkgPSBleHByLnByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5
LmtpbmQgIT09ICdpbml0JykgewotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihwcm9wZXJ0
eS52YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09
PSBTeW50YXguQXJyYXlFeHByZXNzaW9uKSB7Ci0gICAgICAgICAgICBleHByLnR5cGUgPSBTeW50
YXguQXJyYXlQYXR0ZXJuOwotICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5lbGVt
ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkgewotICAgICAgICAgICAgICAgIGVsZW1lbnQg
PSBleHByLmVsZW1lbnRzW2ldOwotICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBl
bHNlICovCi0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihlbGVtZW50KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZXhwci50eXBl
ID09PSBTeW50YXguSWRlbnRpZmllcikgewotICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdv
cmQoZXhwci5uYW1lKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKGV4cHIudHlwZSA9PT0gU3ludGF4LlNwcmVhZEVsZW1lbnQpIHsKLSAgICAgICAgICAgIHJl
aW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZXhwci5hcmd1bWVudCk7Ci0gICAg
ICAgICAgICBpZiAoZXhwci5hcmd1bWVudC50eXBlID09PSBTeW50YXguT2JqZWN0UGF0dGVybikg
ewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk9iamVjdFBhdHRlcm5B
c1NwcmVhZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
KiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLwotICAgICAgICAgICAgaWYgKGV4cHIudHlwZSAhPT0g
U3ludGF4Lk1lbWJlckV4cHJlc3Npb24gJiYgZXhwci50eXBlICE9PSBTeW50YXguQ2FsbEV4cHJl
c3Npb24gJiYgZXhwci50eXBlICE9PSBTeW50YXguTmV3RXhwcmVzc2lvbikgewotICAgICAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOwot
ICAgICAgICAgICAgfQorICAgIGZ1bmN0aW9uIHBhcnNlQ29uY2lzZUJvZHkoKSB7CisgICAgICAg
IGlmIChtYXRjaCgneycpKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvblNvdXJj
ZUVsZW1lbnRzKCk7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGlzb2xhdGVDb3ZlckdyYW1t
YXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CiAgICAgfQogCi0gICAgLy8gMTMuMi4zIEJp
bmRpbmdQYXR0ZXJuCi0KLSAgICBmdW5jdGlvbiByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFy
YW1ldGVyKG9wdGlvbnMsIGV4cHIpIHsKLSAgICAgICAgdmFyIGksIGxlbiwgcHJvcGVydHksIGVs
ZW1lbnQ7Ci0KLSAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Np
b24pIHsKLSAgICAgICAgICAgIGV4cHIudHlwZSA9IFN5bnRheC5PYmplY3RQYXR0ZXJuOwotICAg
ICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxl
bjsgaSArPSAxKSB7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBleHByLnByb3BlcnRpZXNb
aV07Ci0gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtpbmQgIT09ICdpbml0JykgewotICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3Jt
YWxzTGlzdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcHJvcGVydHkudmFsdWUpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4LkFycmF5RXhw
cmVzc2lvbikgewotICAgICAgICAgICAgZXhwci50eXBlID0gU3ludGF4LkFycmF5UGF0dGVybjsK
LSAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHIuZWxlbWVudHMubGVuZ3RoOyBpIDwg
bGVuOyBpICs9IDEpIHsKLSAgICAgICAgICAgICAgICBlbGVtZW50ID0gZXhwci5lbGVtZW50c1tp
XTsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkgewotICAgICAgICAgICAgICAgICAgICBy
ZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIGVsZW1lbnQpOworICAg
IGZ1bmN0aW9uIGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtKSB7CisgICAgICAgIHZh
ciBpOworICAgICAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHsKKyAgICAgICAgY2FzZSBTeW50YXgu
SWRlbnRpZmllcjoKKyAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0sIHBh
cmFtLm5hbWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3ludGF4LlJlc3RF
bGVtZW50OgorICAgICAgICAgICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0uYXJn
dW1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3ludGF4LkFzc2lnbm1l
bnRQYXR0ZXJuOgorICAgICAgICAgICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0u
bGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTeW50YXguQXJyYXlQYXR0
ZXJuOgorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhcmFtLmVsZW1lbnRzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtLmVsZW1lbnRzW2ldICE9PSBudWxsKSB7
CisgICAgICAgICAgICAgICAgICAgIGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmVs
ZW1lbnRzW2ldKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgewotICAgICAgICAgICAg
dmFsaWRhdGVQYXJhbShvcHRpb25zLCBleHByLCBleHByLm5hbWUpOwotICAgICAgICB9IGVsc2Ug
aWYgKGV4cHIudHlwZSA9PT0gU3ludGF4LlNwcmVhZEVsZW1lbnQpIHsKLSAgICAgICAgICAgIC8v
IEJpbmRpbmdSZXN0RWxlbWVudCBvbmx5IGFsbG93cyBCaW5kaW5nSWRlbnRpZmllcgotICAgICAg
ICAgICAgaWYgKGV4cHIuYXJndW1lbnQudHlwZSAhPT0gU3ludGF4LklkZW50aWZpZXIpIHsKLSAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JtYWxz
TGlzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTeW50YXguWWllbGRFeHBy
ZXNzaW9uOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBhc3NlcnQocGFyYW0udHlwZSA9PT0gU3ludGF4Lk9iamVjdFBhdHRlcm4sICdJbnZhbGlkIHR5
cGUnKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJhbS5wcm9wZXJ0aWVzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFy
YW0ucHJvcGVydGllc1tpXS52YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YWxp
ZGF0ZVBhcmFtKG9wdGlvbnMsIGV4cHIuYXJndW1lbnQsIGV4cHIuYXJndW1lbnQubmFtZSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZh
bGlkTEhTSW5Gb3JtYWxzTGlzdCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
IH0KKyAgICBmdW5jdGlvbiByZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChleHByKSB7Cisg
ICAgICAgIHZhciBpLCBsZW4sIHBhcmFtLCBwYXJhbXMsIGRlZmF1bHRzLCBkZWZhdWx0Q291bnQs
IG9wdGlvbnMsIHRva2VuOwogCi0gICAgZnVuY3Rpb24gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFs
c0xpc3QoZXhwcmVzc2lvbnMpIHsKLSAgICAgICAgdmFyIGksIGxlbiwgcGFyYW0sIHBhcmFtcywg
ZGVmYXVsdHMsIGRlZmF1bHRDb3VudCwgb3B0aW9ucywgcmVzdDsKLQotICAgICAgICBwYXJhbXMg
PSBbXTsKICAgICAgICAgZGVmYXVsdHMgPSBbXTsKICAgICAgICAgZGVmYXVsdENvdW50ID0gMDsK
LSAgICAgICAgcmVzdCA9IG51bGw7CisgICAgICAgIHBhcmFtcyA9IFtleHByXTsKKworICAgICAg
ICBzd2l0Y2ggKGV4cHIudHlwZSkgeworICAgICAgICBjYXNlIFN5bnRheC5JZGVudGlmaWVyOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGxhY2VIb2xkZXJzLkFycm93UGFyYW1l
dGVyUGxhY2VIb2xkZXI6CisgICAgICAgICAgICBwYXJhbXMgPSBleHByLnBhcmFtczsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICAgIH0KKwogICAgICAgICBvcHRpb25zID0gewotICAgICAgICAgICAgcGFyYW1TZXQ6
IG5ldyBTdHJpbmdNYXAoKQorICAgICAgICAgICAgcGFyYW1TZXQ6IHt9CiAgICAgICAgIH07CiAK
LSAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgbGVuOyBp
ICs9IDEpIHsKLSAgICAgICAgICAgIHBhcmFtID0gZXhwcmVzc2lvbnNbaV07Ci0gICAgICAgICAg
ICBpZiAocGFyYW0udHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMucHVzaChwYXJhbSk7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdHMucHVzaChudWxs
KTsKLSAgICAgICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBwYXJhbS5u
YW1lKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gU3ludGF4Lk9iamVj
dEV4cHJlc3Npb24gfHwgcGFyYW0udHlwZSA9PT0gU3ludGF4LkFycmF5RXhwcmVzc2lvbikgewot
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9u
cywgcGFyYW0pOwotICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKLSAgICAgICAg
ICAgICAgICBkZWZhdWx0cy5wdXNoKG51bGwpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJh
bS50eXBlID09PSBTeW50YXguU3ByZWFkRWxlbWVudCkgewotICAgICAgICAgICAgICAgIGFzc2Vy
dChpID09PSBsZW4gLSAxLCAnSXQgaXMgZ3VhcmFudGVlZCB0aGF0IFNwcmVhZEVsZW1lbnQgaXMg
bGFzdCBlbGVtZW50IGJ5IHBhcnNlRXhwcmVzc2lvbicpOwotICAgICAgICAgICAgICAgIGlmIChw
YXJhbS5hcmd1bWVudC50eXBlICE9PSBTeW50YXguSWRlbnRpZmllcikgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVj
dHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0uYXJndW1lbnQpOwotICAgICAgICAgICAgICAg
IHJlc3QgPSBwYXJhbS5hcmd1bWVudDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlw
ZSA9PT0gU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLnB1c2gocGFyYW0ubGVmdCk7CisgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcmFtcy5s
ZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkgeworICAgICAgICAgICAgcGFyYW0gPSBwYXJhbXNbaV07
CisgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3lu
dGF4LkFzc2lnbm1lbnRQYXR0ZXJuOgorICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IHBhcmFt
LmxlZnQ7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJpZ2h0LnR5cGUgPT09IFN5bnRheC5Z
aWVsZEV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJpZ2h0LmFy
Z3VtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihs
b29rYWhlYWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBh
cmFtLnJpZ2h0LnR5cGUgPSBTeW50YXguSWRlbnRpZmllcjsKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW0ucmlnaHQubmFtZSA9ICd5aWVsZCc7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBw
YXJhbS5yaWdodC5hcmd1bWVudDsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtLnJp
Z2h0LmRlbGVnYXRlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkZWZhdWx0
cy5wdXNoKHBhcmFtLnJpZ2h0KTsKICAgICAgICAgICAgICAgICArK2RlZmF1bHRDb3VudDsKLSAg
ICAgICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmxlZnQsIHBhcmFtLmxl
ZnQubmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgICAgIGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmxl
ZnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbSk7CisgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gcGFyYW07CisgICAgICAgICAgICAgICAgZGVmYXVsdHMucHVzaChu
dWxsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzdHJpY3QgfHwgIXN0YXRlLmFsbG93WWllbGQpIHsKKyAgICAgICAgICAg
IGZvciAoaSA9IDAsIGxlbiA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkgeworICAg
ICAgICAgICAgICAgIHBhcmFtID0gcGFyYW1zW2ldOworICAgICAgICAgICAgICAgIGlmIChwYXJh
bS50eXBlID09PSBTeW50YXguWWllbGRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgICAg
IHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKG9wdGlvbnMubWVzc2FnZSA9PT0g
TWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKAotICAg
ICAgICAgICAgICAgIHN0cmljdCA/IG9wdGlvbnMuc3RyaWN0ZWQgOiBvcHRpb25zLmZpcnN0UmVz
dHJpY3RlZCwKLSAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UKLSAgICAgICAgICAgICk7
CisgICAgICAgICAgICB0b2tlbiA9IHN0cmljdCA/IG9wdGlvbnMuc3RyaWN0ZWQgOiBvcHRpb25z
LmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2Vu
LCBvcHRpb25zLm1lc3NhZ2UpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRlZmF1bHRDb3Vu
dCA9PT0gMCkgewpAQCAtMzM2NywxNzEgKzM3ODksMTg5IEBACiAgICAgICAgIHJldHVybiB7CiAg
ICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKICAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0
cywKLSAgICAgICAgICAgIHJlc3Q6IHJlc3QsCiAgICAgICAgICAgICBzdHJpY3RlZDogb3B0aW9u
cy5zdHJpY3RlZCwKICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJl
c3RyaWN0ZWQsCiAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2UKICAgICAgICAg
fTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBwYXJzZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKG9w
dGlvbnMsIG1hcmtlcikgewotICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzWWll
bGRBbGxvd2VkLCBib2R5OworICAgIGZ1bmN0aW9uIHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Np
b24ob3B0aW9ucywgbm9kZSkgeworICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QsIHByZXZpb3Vz
QWxsb3dZaWVsZCwgYm9keTsKIAorICAgICAgICBpZiAoaGFzTGluZVRlcm1pbmF0b3IpIHsKKyAg
ICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7CisgICAgICAgIH0K
ICAgICAgICAgZXhwZWN0KCc9PicpOwogCiAgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0
OwotICAgICAgICBwcmV2aW91c1lpZWxkQWxsb3dlZCA9IHN0YXRlLnlpZWxkQWxsb3dlZDsKLSAg
ICAgICAgc3RhdGUueWllbGRBbGxvd2VkID0gZmFsc2U7CisgICAgICAgIHByZXZpb3VzQWxsb3dZ
aWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7CisgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSB0cnVl
OworCiAgICAgICAgIGJvZHkgPSBwYXJzZUNvbmNpc2VCb2R5KCk7CiAKICAgICAgICAgaWYgKHN0
cmljdCAmJiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICAgICAgdGhyb3dFcnJv
cihvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCwgb3B0aW9ucy5tZXNzYWdlKTsKKyAgICAgICAgICAg
IHRocm93VW5leHBlY3RlZFRva2VuKG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLCBvcHRpb25zLm1l
c3NhZ2UpOwogICAgICAgICB9CiAgICAgICAgIGlmIChzdHJpY3QgJiYgb3B0aW9ucy5zdHJpY3Rl
ZCkgewotICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KG9wdGlvbnMuc3RyaWN0ZWQsIG9w
dGlvbnMubWVzc2FnZSk7CisgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihvcHRp
b25zLnN0cmljdGVkLCBvcHRpb25zLm1lc3NhZ2UpOwogICAgICAgICB9CiAKICAgICAgICAgc3Ry
aWN0ID0gcHJldmlvdXNTdHJpY3Q7Ci0gICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZp
b3VzWWllbGRBbGxvd2VkOworICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxv
d1lpZWxkOwogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNy
ZWF0ZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKAotICAgICAgICAgICAgb3B0aW9ucy5wYXJhbXMs
Ci0gICAgICAgICAgICBvcHRpb25zLmRlZmF1bHRzLAotICAgICAgICAgICAgYm9keSwKLSAgICAg
ICAgICAgIG9wdGlvbnMucmVzdCwKLSAgICAgICAgICAgIGJvZHkudHlwZSAhPT0gU3ludGF4LkJs
b2NrU3RhdGVtZW50Ci0gICAgICAgICkpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hBcnJv
d0Z1bmN0aW9uRXhwcmVzc2lvbihvcHRpb25zLnBhcmFtcywgb3B0aW9ucy5kZWZhdWx0cywgYm9k
eSwgYm9keS50eXBlICE9PSBTeW50YXguQmxvY2tTdGF0ZW1lbnQpOwogICAgIH0KIAotICAgIGZ1
bmN0aW9uIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBtYXJrZXIs
IGV4cHIsIHRva2VuLCBwYXJhbXMsIG9sZFBhcmVudGhlc2l6ZWRDb3VudCwKLSAgICAgICAgICAg
IHN0YXJ0c1dpdGhQYXJlbiA9IGZhbHNlOworICAgIC8vIEVDTUEtMjYyIDE0LjQgWWllbGQgZXhw
cmVzc2lvbgogCi0gICAgICAgIC8vIE5vdGUgdGhhdCAneWllbGQnIGlzIHRyZWF0ZWQgYXMgYSBr
ZXl3b3JkIGluIHN0cmljdCBtb2RlLCBidXQgYQotICAgICAgICAvLyBjb250ZXh0dWFsIGtleXdv
cmQgKGlkZW50aWZpZXIpIGluIG5vbi1zdHJpY3QgbW9kZSwgc28gd2UgbmVlZAotICAgICAgICAv
LyB0byB1c2UgbWF0Y2hLZXl3b3JkIGFuZCBtYXRjaENvbnRleHR1YWxLZXl3b3JkIGFwcHJvcHJp
YXRlbHkuCi0gICAgICAgIGlmICgoc3RhdGUueWllbGRBbGxvd2VkICYmIG1hdGNoQ29udGV4dHVh
bEtleXdvcmQoJ3lpZWxkJykpIHx8IChzdHJpY3QgJiYgbWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSkg
ewotICAgICAgICAgICAgcmV0dXJuIHBhcnNlWWllbGRFeHByZXNzaW9uKCk7Ci0gICAgICAgIH0K
KyAgICBmdW5jdGlvbiBwYXJzZVlpZWxkRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGFyZ3Vt
ZW50LCBleHByLCBkZWxlZ2F0ZSwgcHJldmlvdXNBbGxvd1lpZWxkOwogCi0gICAgICAgIG9sZFBh
cmVudGhlc2l6ZWRDb3VudCA9IHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudDsKKyAgICAgICAgYXJn
dW1lbnQgPSBudWxsOworICAgICAgICBleHByID0gbmV3IE5vZGUoKTsKIAotICAgICAgICBtYXJr
ZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICAgICAgZXhwZWN0S2V5d29yZCgneWllbGQnKTsKIAot
ICAgICAgICBpZiAobWF0Y2goJygnKSkgewotICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQy
KCk7Ci0gICAgICAgICAgICBpZiAoKHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYg
dG9rZW4udmFsdWUgPT09ICcpJykgfHwgdG9rZW4udmFsdWUgPT09ICcuLi4nKSB7Ci0gICAgICAg
ICAgICAgICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1h
dGNoKCc9PicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7
CisgICAgICAgIGlmICghaGFzTGluZVRlcm1pbmF0b3IpIHsKKyAgICAgICAgICAgIHByZXZpb3Vz
QWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7CisgICAgICAgICAgICBzdGF0ZS5hbGxvd1lp
ZWxkID0gZmFsc2U7CisgICAgICAgICAgICBkZWxlZ2F0ZSA9IG1hdGNoKCcqJyk7CisgICAgICAg
ICAgICBpZiAoZGVsZWdhdGUpIHsKKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnOycpICYmICFtYXRjaCgnfScp
ICYmICFtYXRjaCgnKScpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUFycm93RnVuY3Rp
b25FeHByZXNzaW9uKHBhcmFtcywgbWFya2VyKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHN0YXJ0c1dpdGhQYXJlbiA9IHRydWU7CisgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0g
cHJldmlvdXNBbGxvd1lpZWxkOwogICAgICAgICB9CiAKKyAgICAgICAgcmV0dXJuIGV4cHIuZmlu
aXNoWWllbGRFeHByZXNzaW9uKGFyZ3VtZW50LCBkZWxlZ2F0ZSk7CisgICAgfQorCisgICAgLy8g
RUNNQS0yNjIgMTIuMTQgQXNzaWdubWVudCBPcGVyYXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0b2tlbiwgZXhwciwgcmlnaHQs
IGxpc3QsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKICAg
ICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgaWYgKCFzdGF0ZS5hbGxvd1lpZWxk
ICYmIG1hdGNoS2V5d29yZCgneWllbGQnKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlWWll
bGRFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKwogICAgICAgICBleHByID0gcGFyc2VDb25kaXRp
b25hbEV4cHJlc3Npb24oKTsKIAotICAgICAgICBpZiAobWF0Y2goJz0+JykgJiYKLSAgICAgICAg
ICAgICAgICAoc3RhdGUucGFyZW50aGVzaXplZENvdW50ID09PSBvbGRQYXJlbnRoZXNpemVkQ291
bnQgfHwKLSAgICAgICAgICAgICAgICBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQgPT09IChvbGRQ
YXJlbnRoZXNpemVkQ291bnQgKyAxKSkpIHsKLSAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09
IFN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnBy
ZXRBc0NvdmVyRm9ybWFsc0xpc3QoWyBleHByIF0pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChl
eHByLnR5cGUgPT09IFN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbiB8fAotICAgICAgICAgICAg
ICAgICAgICBleHByLnR5cGUgPT09IFN5bnRheC5BcnJheUV4cHJlc3Npb24gfHwKLSAgICAgICAg
ICAgICAgICAgICAgZXhwci50eXBlID09PSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbikgewotICAg
ICAgICAgICAgICAgIGlmICghc3RhcnRzV2l0aFBhcmVuKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRocm93VW5leHBlY3RlZChsZXgoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHBhcmFtcyA9IHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KFsgZXhwciBdKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBTeW50YXguU2VxdWVuY2VFeHByZXNz
aW9uKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFs
c0xpc3QoZXhwci5leHByZXNzaW9ucyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
cGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJl
c3Npb24ocGFyYW1zLCBtYXJrZXIpOworICAgICAgICBpZiAoZXhwci50eXBlID09PSBQbGFjZUhv
bGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciB8fCBtYXRjaCgnPT4nKSkgeworICAgICAg
ICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAg
ICAgICAgICAgbGlzdCA9IHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KGV4cHIpOworCisg
ICAgICAgICAgICBpZiAobGlzdCkgeworICAgICAgICAgICAgICAgIGZpcnN0Q292ZXJJbml0aWFs
aXplZE5hbWVFcnJvciA9IG51bGw7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyb3dG
dW5jdGlvbkV4cHJlc3Npb24obGlzdCwgbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKSk7CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBleHByOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKG1hdGNoQXNzaWduKCkpIHsKLSAgICAgICAgICAgIC8vIDExLjEzLjEKLSAgICAg
ICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBp
c1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpOworICAgICAgICAg
ICAgaWYgKCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICB0b2xlcmF0ZUVy
cm9yKE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBFQ01BLTI2MiAxMi4xLjEKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYg
ZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIGlmIChp
c1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2
ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVj
dGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBFUy5uZXh0IGRyYWYgMTEu
MTMgUnVudGltZSBTZW1hbnRpY3Mgc3RlcCAxCi0gICAgICAgICAgICBpZiAobWF0Y2goJz0nKSAm
JiAoZXhwci50eXBlID09PSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbiB8fCBleHByLnR5cGUgPT09
IFN5bnRheC5BcnJheUV4cHJlc3Npb24pKSB7Ci0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRB
c0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihleHByKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
IWlzTGVmdEhhbmRTaWRlKGV4cHIpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAgICAgICAgICBpZiAoIW1hdGNo
KCc9JykpIHsKKyAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdF
bGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlQXNzaWdu
bWVudEV4cHJlc3Npb24obGV4KCkudmFsdWUsIGV4cHIsIHBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKSkpOworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHJpZ2h0ID0g
aXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAg
ICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaEFzc2lnbm1lbnRF
eHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByLCByaWdodCk7CisgICAgICAgICAgICBmaXJzdENv
dmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOwogICAgICAgICB9CiAKICAgICAgICAgcmV0
dXJuIGV4cHI7CiAgICAgfQogCi0gICAgLy8gMTEuMTQgQ29tbWEgT3BlcmF0b3IKKyAgICAvLyBF
Q01BLTI2MiAxMi4xNSBDb21tYSBPcGVyYXRvcgogCiAgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNz
aW9uKCkgewotICAgICAgICB2YXIgbWFya2VyLCBleHByLCBleHByZXNzaW9ucywgc2VxdWVuY2Us
IHNwcmVhZEZvdW5kOworICAgICAgICB2YXIgZXhwciwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZCwg
ZXhwcmVzc2lvbnM7CiAKLSAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7Ci0gICAgICAg
IGV4cHIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgIGV4cHJlc3Npb25z
ID0gWyBleHByIF07CisgICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24pOwogCiAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7Ci0gICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGV4cHJlc3Npb25zID0g
W2V4cHJdOworCisgICAgICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkgewogICAg
ICAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkgewogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAg
ICAgICAgICBleHByID0gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAg
ICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChleHByKTsKLQotICAgICAgICAgICAgICAgIGlm
IChleHByLnR5cGUgPT09IFN5bnRheC5TcHJlYWRFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNwcmVhZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgn
KScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5F
bGVtZW50QWZ0ZXJTcHJlYWRFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZXhwcmVzc2lvbnMucHVzaChpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc2VxdWVuY2UgPSBtYXJrZXJB
cHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbihleHByZXNzaW9u
cykpOworICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmlu
aXNoU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChzcHJlYWRGb3VuZCAmJiBsb29rYWhlYWQyKCkudmFsdWUgIT09ICc9PicpIHsKLSAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxTcHJlYWQpOworICAgICAgICBy
ZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICAvLyBFQ01BLTI2MiAxMy4yIEJsb2NrCisKKyAgICBm
dW5jdGlvbiBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCkgeworICAgICAgICBpZiAobG9va2FoZWFk
LnR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFk
LnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlICdleHBvcnQnOgorICAgICAgICAgICAgICAgIGlm
IChzdGF0ZS5zb3VyY2VUeXBlICE9PSAnbW9kdWxlJykgeworICAgICAgICAgICAgICAgICAgICB0
b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQsIE1lc3NhZ2VzLklsbGVnYWxFeHBvcnRE
ZWNsYXJhdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBjYXNlICdpbXBvcnQnOgorICAg
ICAgICAgICAgICAgIGlmIChzdGF0ZS5zb3VyY2VUeXBlICE9PSAnbW9kdWxlJykgeworICAgICAg
ICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQsIE1lc3NhZ2Vz
LklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBjYXNl
ICdjb25zdCc6CisgICAgICAgICAgICBjYXNlICdsZXQnOgorICAgICAgICAgICAgICAgIHJldHVy
biBwYXJzZUxleGljYWxEZWNsYXJhdGlvbih7aW5Gb3I6IGZhbHNlfSk7CisgICAgICAgICAgICBj
YXNlICdmdW5jdGlvbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNs
YXJhdGlvbihuZXcgTm9kZSgpKTsKKyAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2VxdWVuY2UgfHwgZXhwcjsKKyAgICAgICAgcmV0
dXJuIHBhcnNlU3RhdGVtZW50KCk7CiAgICAgfQogCi0gICAgLy8gMTIuMSBCbG9jawotCiAgICAg
ZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRMaXN0KCkgewotICAgICAgICB2YXIgbGlzdCA9IFtdLAot
ICAgICAgICAgICAgc3RhdGVtZW50OwotCi0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkg
eworICAgICAgICB2YXIgbGlzdCA9IFtdOworICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxl
bmd0aCkgewogICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU291cmNl
RWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZW1lbnQgPT09ICd1bmRlZmlu
ZWQnKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsaXN0LnB1c2goc3RhdGVtZW50KTsKKyAgICAgICAgICAgIGxpc3QucHVzaChwYXJzZVN0YXRl
bWVudExpc3RJdGVtKCkpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAg
fQogCiAgICAgZnVuY3Rpb24gcGFyc2VCbG9jaygpIHsKLSAgICAgICAgdmFyIGJsb2NrLCBtYXJr
ZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICAgICAgdmFyIGJsb2NrLCBub2RlID0gbmV3IE5vZGUo
KTsKIAogICAgICAgICBleHBlY3QoJ3snKTsKIApAQCAtMzUzOSwzNjkgKzM5NzksMTc4IEBACiAK
ICAgICAgICAgZXhwZWN0KCd9Jyk7CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtl
ciwgZGVsZWdhdGUuY3JlYXRlQmxvY2tTdGF0ZW1lbnQoYmxvY2spKTsKKyAgICAgICAgcmV0dXJu
IG5vZGUuZmluaXNoQmxvY2tTdGF0ZW1lbnQoYmxvY2spOwogICAgIH0KIAotICAgIC8vIDEyLjIg
VmFyaWFibGUgU3RhdGVtZW50CisgICAgLy8gRUNNQS0yNjIgMTMuMy4yIFZhcmlhYmxlIFN0YXRl
bWVudAogCi0gICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSB7Ci0gICAgICAg
IHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSwKLSAgICAgICAgICAgIHRva2VuID0gbGV4KCk7
CisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCkgeworICAgICAgICB2
YXIgdG9rZW4sIG5vZGUgPSBuZXcgTm9kZSgpOwogCi0gICAgICAgIGlmICh0b2tlbi50eXBlICE9
PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4p
OworICAgICAgICB0b2tlbiA9IGxleCgpOworCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBU
b2tlbi5LZXl3b3JkICYmIHRva2VuLnZhbHVlID09PSAneWllbGQnKSB7CisgICAgICAgICAgICBp
ZiAoc3RyaWN0KSB7CisgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9r
ZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7CisgICAgICAgICAgICB9IGlmICghc3Rh
dGUuYWxsb3dZaWVsZCkgeworICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRv
a2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlICE9PSBU
b2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIHRva2VuLnR5cGUg
PT09IFRva2VuLktleXdvcmQgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVl
KSkgeworICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNz
YWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RyaWN0IHx8IHRva2VuLnZhbHVlICE9PSAnbGV0JyB8fCBraW5kICE9PSAn
dmFyJykgeworICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0
YXRlLnNvdXJjZVR5cGUgPT09ICdtb2R1bGUnICYmIHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50
aWZpZXIgJiYgdG9rZW4udmFsdWUgPT09ICdhd2FpdCcpIHsKKyAgICAgICAgICAgIHRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHRva2VuKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBtYXJr
ZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoSWRlbnRpZmllcih0b2tlbi52YWx1ZSk7CiAgICAg
fQogCi0gICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpIHsKLSAgICAg
ICAgdmFyIGlkLAotICAgICAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksCi0gICAgICAg
ICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgaWYgKG1hdGNoKCd7JykpIHsKLSAgICAgICAgICAg
IGlkID0gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpOwotICAgICAgICAgICAgcmVpbnRlcnByZXRB
c0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihpZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobWF0Y2go
J1snKSkgewotICAgICAgICAgICAgaWQgPSBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTsKLSAgICAg
ICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KLSAgICAg
ICAgICAgIGlkID0gc3RhdGUuYWxsb3dLZXl3b3JkID8gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5
KCkgOiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwotICAgICAgICAgICAgLy8gMTIuMi4xCi0g
ICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQoaWQubmFtZSkpIHsKLSAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdFZhck5h
bWUpOwotICAgICAgICAgICAgfQorICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlv
bihvcHRpb25zKSB7CisgICAgICAgIHZhciBpbml0ID0gbnVsbCwgaWQsIG5vZGUgPSBuZXcgTm9k
ZSgpLCBwYXJhbXMgPSBbXTsKKworICAgICAgICBpZCA9IHBhcnNlUGF0dGVybihwYXJhbXMsICd2
YXInKTsKKworICAgICAgICAvLyBFQ01BLTI2MiAxMi4yLjEKKyAgICAgICAgaWYgKHN0cmljdCAm
JiBpc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7CisgICAgICAgICAgICB0b2xlcmF0ZUVycm9y
KE1lc3NhZ2VzLlN0cmljdFZhck5hbWUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGtpbmQg
PT09ICdjb25zdCcpIHsKLSAgICAgICAgICAgIGlmICghbWF0Y2goJz0nKSkgewotICAgICAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5vVW5pbnRpYWxpemVkQ29uc3QpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZXhwZWN0KCc9Jyk7Ci0gICAgICAgICAgICBpbml0ID0g
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCc9
JykpIHsKKyAgICAgICAgaWYgKG1hdGNoKCc9JykpIHsKICAgICAgICAgICAgIGxleCgpOwotICAg
ICAgICAgICAgaW5pdCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAg
IGluaXQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwor
ICAgICAgICB9IGVsc2UgaWYgKGlkLnR5cGUgIT09IFN5bnRheC5JZGVudGlmaWVyICYmICFvcHRp
b25zLmluRm9yKSB7CisgICAgICAgICAgICBleHBlY3QoJz0nKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVZhcmlhYmxlRGVj
bGFyYXRvcihpZCwgaW5pdCkpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hWYXJpYWJsZURl
Y2xhcmF0b3IoaWQsIGluaXQpOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbkxpc3Qoa2luZCkgeworICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJh
dGlvbkxpc3Qob3B0aW9ucykgewogICAgICAgICB2YXIgbGlzdCA9IFtdOwogCiAgICAgICAgIGRv
IHsKLSAgICAgICAgICAgIGxpc3QucHVzaChwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkp
OworICAgICAgICAgICAgbGlzdC5wdXNoKHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbih7IGluRm9y
OiBvcHRpb25zLmluRm9yIH0pKTsKICAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkgewogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGV4KCk7Ci0g
ICAgICAgIH0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTsKKyAgICAgICAgfSB3aGlsZSAoc3RhcnRJ
bmRleCA8IGxlbmd0aCk7CiAKICAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAgfQogCi0gICAgZnVu
Y3Rpb24gcGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpIHsKLSAgICAgICAgdmFyIGRlY2xhcmF0aW9u
cywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZVN0
YXRlbWVudChub2RlKSB7CisgICAgICAgIHZhciBkZWNsYXJhdGlvbnM7CiAKICAgICAgICAgZXhw
ZWN0S2V5d29yZCgndmFyJyk7CiAKLSAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uTGlzdCgpOworICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxl
RGVjbGFyYXRpb25MaXN0KHsgaW5Gb3I6IGZhbHNlIH0pOwogCiAgICAgICAgIGNvbnN1bWVTZW1p
Y29sb24oKTsKIAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5j
cmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgJ3ZhcicpKTsKLSAgICB9Ci0K
LSAgICAvLyBraW5kIG1heSBiZSBgY29uc3RgIG9yIGBsZXRgCi0gICAgLy8gQm90aCBhcmUgZXhw
ZXJpbWVudGFsIGFuZCBub3QgaW4gdGhlIHNwZWNpZmljYXRpb24geWV0LgotICAgIC8vIHNlZSBo
dHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmNvbnN0Ci0gICAg
Ly8gYW5kIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6bGV0
Ci0gICAgZnVuY3Rpb24gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGtpbmQpIHsKLSAgICAgICAg
dmFyIGRlY2xhcmF0aW9ucywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7Ci0KLSAgICAgICAgZXhw
ZWN0S2V5d29yZChraW5kKTsKLQotICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxl
RGVjbGFyYXRpb25MaXN0KGtpbmQpOwotCi0gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLQot
ICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJs
ZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkpOwotICAgIH0KLQotICAgIC8vIHBlb3Bs
ZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbAotCi0gICAgZnVuY3Rpb24g
cGFyc2VNb2R1bGVTcGVjaWZpZXIoKSB7Ci0gICAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVh
dGUoKSwKLSAgICAgICAgICAgIHNwZWNpZmllcjsKLQotICAgICAgICBpZiAobG9va2FoZWFkLnR5
cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLkludmFsaWRNb2R1bGVTcGVjaWZpZXIpOwotICAgICAgICB9Ci0gICAgICAgIHNw
ZWNpZmllciA9IGRlbGVnYXRlLmNyZWF0ZU1vZHVsZVNwZWNpZmllcihsb29rYWhlYWQpOwotICAg
ICAgICBsZXgoKTsKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgc3BlY2lmaWVy
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydEJhdGNoU3BlY2lmaWVyKCkgewot
ICAgICAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7Ci0gICAgICAgIGV4cGVjdCgnKicp
OwotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVFeHBv
cnRCYXRjaFNwZWNpZmllcigpKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydFNw
ZWNpZmllcigpIHsKLSAgICAgICAgdmFyIGlkLCBuYW1lID0gbnVsbCwgbWFya2VyID0gbWFya2Vy
Q3JlYXRlKCksIGZyb207Ci0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgewot
ICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICBpZCA9IG1hcmtlckFwcGx5KG1hcmtlciwg
ZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcignZGVmYXVsdCcpKTsKLSAgICAgICAgICAgIC8vIGV4
cG9ydCB7ZGVmYXVsdH0gZnJvbSAic29tZXRoaW5nIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXMnKSkgewotICAgICAgICAgICAgbGV4KCk7
Ci0gICAgICAgICAgICBuYW1lID0gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVF
eHBvcnRTcGVjaWZpZXIoaWQsIG5hbWUpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVmFy
aWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMpOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHBh
cnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7Ci0gICAgICAgIHZhciBiYWNrdHJhY2tUb2tlbiwgaWQs
IGRlY2xhcmF0aW9uID0gbnVsbCwKLSAgICAgICAgICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIs
Ci0gICAgICAgICAgICBzcmMgPSBudWxsLCBzcGVjaWZpZXJzID0gW10sCi0gICAgICAgICAgICBt
YXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKLQotICAgICAgICBmdW5jdGlvbiByZXdpbmQodG9rZW4p
IHsKLSAgICAgICAgICAgIGluZGV4ID0gdG9rZW4ucmFuZ2VbMF07Ci0gICAgICAgICAgICBsaW5l
TnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKLSAgICAgICAgICAgIGxpbmVTdGFydCA9IHRva2Vu
LmxpbmVTdGFydDsKLSAgICAgICAgICAgIGxvb2thaGVhZCA9IHRva2VuOwotICAgICAgICB9Ci0K
LSAgICAgICAgZXhwZWN0S2V5d29yZCgnZXhwb3J0Jyk7Ci0KLSAgICAgICAgaWYgKG1hdGNoS2V5
d29yZCgnZGVmYXVsdCcpKSB7Ci0gICAgICAgICAgICAvLyBjb3ZlcnM6Ci0gICAgICAgICAgICAv
LyBleHBvcnQgZGVmYXVsdCAuLi4KLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgaWYg
KG1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSB8fCBtYXRjaEtleXdvcmQoJ2NsYXNzJykpIHsKLSAg
ICAgICAgICAgICAgICBiYWNrdHJhY2tUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgICAgICAg
ICBsZXgoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyTmFtZShsb29rYWhlYWQp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvdmVyczoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9vICgpIHt9Ci0gICAgICAgICAgICAgICAgICAg
IC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIGZvbyB7fQotICAgICAgICAgICAgICAgICAgICBpZCA9
IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOwotICAgICAgICAgICAgICAgICAgICByZXdpbmQo
YmFja3RyYWNrVG9rZW4pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHko
bWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbih0cnVlLCBwYXJzZVNvdXJj
ZUVsZW1lbnQoKSwgW2lkXSwgbnVsbCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAvLyBjb3ZlcnM6Ci0gICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rp
b24gKCkge30KLSAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyB7fQotICAg
ICAgICAgICAgICAgIHJld2luZChiYWNrdHJhY2tUb2tlbik7Ci0gICAgICAgICAgICAgICAgc3dp
dGNoIChsb29rYWhlYWQudmFsdWUpIHsKLSAgICAgICAgICAgICAgICBjYXNlICdjbGFzcyc6Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNy
ZWF0ZUV4cG9ydERlY2xhcmF0aW9uKHRydWUsIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCksIFtdLCBu
dWxsKSk7Ci0gICAgICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOgotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVFeHBvcnREZWNs
YXJhdGlvbih0cnVlLCBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpLCBbXSwgbnVsbCkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAvLyBFQ01BLTI2MiAxMy4zLjEgTGV0
IGFuZCBDb25zdCBEZWNsYXJhdGlvbnMKIAotICAgICAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVh
bEtleXdvcmQoJ2Zyb20nKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTsKLSAgICAgICAgICAgIH0KKyAg
ICBmdW5jdGlvbiBwYXJzZUxleGljYWxCaW5kaW5nKGtpbmQsIG9wdGlvbnMpIHsKKyAgICAgICAg
dmFyIGluaXQgPSBudWxsLCBpZCwgbm9kZSA9IG5ldyBOb2RlKCksIHBhcmFtcyA9IFtdOwogCi0g
ICAgICAgICAgICAvLyBjb3ZlcnM6Ci0gICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCB7fTsK
LSAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IFtdOwotICAgICAgICAgICAgaWYgKG1hdGNo
KCd7JykpIHsKLSAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlT2JqZWN0SW5pdGlh
bGlzZXIoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgewotICAgICAgICAg
ICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3VtZVNlbWljb2xv
bigpOwotICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3Jl
YXRlRXhwb3J0RGVjbGFyYXRpb24odHJ1ZSwgZGVjbGFyYXRpb24sIFtdLCBudWxsKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgaWQgPSBwYXJzZVBhdHRlcm4ocGFyYW1zLCBraW5kKTsKIAotICAgICAg
ICAvLyBub24tZGVmYXVsdCBleHBvcnQKLSAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBU
b2tlbi5LZXl3b3JkKSB7Ci0gICAgICAgICAgICAvLyBjb3ZlcnM6Ci0gICAgICAgICAgICAvLyBl
eHBvcnQgdmFyIGYgPSAxOwotICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsK
LSAgICAgICAgICAgIGNhc2UgJ2xldCc6Ci0gICAgICAgICAgICBjYXNlICdjb25zdCc6Ci0gICAg
ICAgICAgICBjYXNlICd2YXInOgotICAgICAgICAgICAgY2FzZSAnY2xhc3MnOgotICAgICAgICAg
ICAgY2FzZSAnZnVuY3Rpb24nOgotICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseSht
YXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUV4cG9ydERlY2xhcmF0aW9uKGZhbHNlLCBwYXJzZVNvdXJj
ZUVsZW1lbnQoKSwgc3BlY2lmaWVycywgbnVsbCkpOwotICAgICAgICAgICAgfQorICAgICAgICAv
LyBFQ01BLTI2MiAxMi4yLjEKKyAgICAgICAgaWYgKHN0cmljdCAmJiBpZC50eXBlID09PSBTeW50
YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7CisgICAgICAgICAg
ICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdFZhck5hbWUpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKG1hdGNoKCcqJykpIHsKLSAgICAgICAgICAgIC8vIGNvdmVyczoKLSAgICAgICAg
ICAgIC8vIGV4cG9ydCAqIGZyb20gImZvbyI7Ci0gICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2go
cGFyc2VFeHBvcnRCYXRjaFNwZWNpZmllcigpKTsKLQotICAgICAgICAgICAgaWYgKCFtYXRjaENv
bnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBsb29rYWhlYWQudmFsdWUgPwotICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5l
eHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVhZC52YWx1
ZSk7CisgICAgICAgIGlmIChraW5kID09PSAnY29uc3QnKSB7CisgICAgICAgICAgICBpZiAoIW1h
dGNoS2V5d29yZCgnaW4nKSAmJiAhbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgeworICAg
ICAgICAgICAgICAgIGV4cGVjdCgnPScpOworICAgICAgICAgICAgICAgIGluaXQgPSBpc29sYXRl
Q292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmll
cigpOwotICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotCi0gICAgICAgICAgICByZXR1
cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbihm
YWxzZSwgbnVsbCwgc3BlY2lmaWVycywgc3JjKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBleHBl
Y3QoJ3snKTsKLSAgICAgICAgaWYgKCFtYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0RnJvbUlkZW50
aWZpZXIgfHwgbWF0Y2hLZXl3b3JkKCdkZWZhdWx0Jyk7Ci0gICAgICAgICAgICAgICAgc3BlY2lm
aWVycy5wdXNoKHBhcnNlRXhwb3J0U3BlY2lmaWVyKCkpOwotICAgICAgICAgICAgfSB3aGlsZSAo
bWF0Y2goJywnKSAmJiBsZXgoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZXhwZWN0KCd9Jyk7Ci0K
LSAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkgewotICAgICAgICAg
ICAgLy8gY292ZXJpbmc6Ci0gICAgICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9IGZyb20gImZv
byI7Ci0gICAgICAgICAgICAvLyBleHBvcnQge2Zvb30gZnJvbSAiZm9vIjsKLSAgICAgICAgICAg
IGxleCgpOwotICAgICAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKLSAgICAg
ICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0V4cG9ydEZy
b21JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAvLyBjb3ZlcmluZzoKLSAgICAgICAgICAgIC8v
IGV4cG9ydCB7ZGVmYXVsdH07IC8vIG1pc3NpbmcgZnJvbUNsYXVzZQotICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgbG9va2FoZWFkLnZhbHVlID8KLSAgICAgICAgICAgICAgICAgICAgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVh
ZC52YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBjb3ZlcgotICAgICAg
ICAgICAgLy8gZXhwb3J0IHtmb299OwotICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNy
ZWF0ZUV4cG9ydERlY2xhcmF0aW9uKGZhbHNlLCBkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgc3Jj
KSk7Ci0gICAgfQotCi0KLSAgICBmdW5jdGlvbiBwYXJzZUltcG9ydFNwZWNpZmllcigpIHsKLSAg
ICAgICAgLy8gaW1wb3J0IHs8Zm9vIGFzIGJhcj59IC4uLjsKLSAgICAgICAgdmFyIGlkLCBuYW1l
ID0gbnVsbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7Ci0KLSAgICAgICAgaWQgPSBwYXJzZU5v
bkNvbXB1dGVkUHJvcGVydHkoKTsKLSAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQo
J2FzJykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgbmFtZSA9IHBhcnNlVmFy
aWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoKCFvcHRpb25zLmluRm9yICYm
IGlkLnR5cGUgIT09IFN5bnRheC5JZGVudGlmaWVyKSB8fCBtYXRjaCgnPScpKSB7CisgICAgICAg
ICAgICBleHBlY3QoJz0nKTsKKyAgICAgICAgICAgIGluaXQgPSBpc29sYXRlQ292ZXJHcmFtbWFy
KHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJu
IG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlSW1wb3J0U3BlY2lmaWVyKGlkLCBu
YW1lKSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VOYW1lZEltcG9ydHMoKSB7Ci0gICAg
ICAgIHZhciBzcGVjaWZpZXJzID0gW107Ci0gICAgICAgIC8vIHtmb28sIGJhciBhcyBiYXN9Ci0g
ICAgICAgIGV4cGVjdCgneycpOwotICAgICAgICBpZiAoIW1hdGNoKCd9JykpIHsKLSAgICAgICAg
ICAgIGRvIHsKLSAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnRTcGVj
aWZpZXIoKSk7Ci0gICAgICAgICAgICB9IHdoaWxlIChtYXRjaCgnLCcpICYmIGxleCgpKTsKLSAg
ICAgICAgfQotICAgICAgICBleHBlY3QoJ30nKTsKLSAgICAgICAgcmV0dXJuIHNwZWNpZmllcnM7
CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCk7
CiAgICAgfQogCi0gICAgZnVuY3Rpb24gcGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyKCkgewot
ICAgICAgICAvLyBpbXBvcnQgPGZvbz4gLi4uOwotICAgICAgICB2YXIgaWQsIG1hcmtlciA9IG1h
cmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBhcnNlQmluZGluZ0xpc3Qoa2luZCwgb3B0aW9u
cykgeworICAgICAgICB2YXIgbGlzdCA9IFtdOwogCi0gICAgICAgIGlkID0gcGFyc2VOb25Db21w
dXRlZFByb3BlcnR5KCk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGxpc3QucHVzaChwYXJz
ZUxleGljYWxCaW5kaW5nKGtpbmQsIG9wdGlvbnMpKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2go
JywnKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbGV4KCk7CisgICAgICAgIH0gd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpOwogCi0gICAg
ICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUltcG9ydERlZmF1
bHRTcGVjaWZpZXIoaWQpKTsKKyAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAgfQogCi0gICAgZnVu
Y3Rpb24gcGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSB7Ci0gICAgICAgIC8vIGltcG9y
dCA8KiBhcyBmb28+IC4uLjsKLSAgICAgICAgdmFyIGlkLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUo
KTsKKyAgICBmdW5jdGlvbiBwYXJzZUxleGljYWxEZWNsYXJhdGlvbihvcHRpb25zKSB7CisgICAg
ICAgIHZhciBraW5kLCBkZWNsYXJhdGlvbnMsIG5vZGUgPSBuZXcgTm9kZSgpOwogCi0gICAgICAg
IGV4cGVjdCgnKicpOwotICAgICAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzJykp
IHsKLSAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5vQXNBZnRlckltcG9ydE5h
bWVzcGFjZSk7Ci0gICAgICAgIH0KLSAgICAgICAgbGV4KCk7Ci0gICAgICAgIGlkID0gcGFyc2VO
b25Db21wdXRlZFByb3BlcnR5KCk7CisgICAgICAgIGtpbmQgPSBsZXgoKS52YWx1ZTsKKyAgICAg
ICAgYXNzZXJ0KGtpbmQgPT09ICdsZXQnIHx8IGtpbmQgPT09ICdjb25zdCcsICdMZXhpY2FsIGRl
Y2xhcmF0aW9uIG11c3QgYmUgZWl0aGVyIGxldCBvciBjb25zdCcpOworCisgICAgICAgIGRlY2xh
cmF0aW9ucyA9IHBhcnNlQmluZGluZ0xpc3Qoa2luZCwgb3B0aW9ucyk7CiAKLSAgICAgICAgcmV0
dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlSW1wb3J0TmFtZXNwYWNlU3Bl
Y2lmaWVyKGlkKSk7CisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1
cm4gbm9kZS5maW5pc2hMZXhpY2FsRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKTsKICAg
ICB9CiAKLSAgICBmdW5jdGlvbiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCkgewotICAgICAgICB2
YXIgc3BlY2lmaWVycywgc3JjLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5jdGlv
biBwYXJzZVJlc3RFbGVtZW50KHBhcmFtcykgeworICAgICAgICB2YXIgcGFyYW0sIG5vZGUgPSBu
ZXcgTm9kZSgpOwogCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpOwotICAgICAgICBz
cGVjaWZpZXJzID0gW107CisgICAgICAgIGxleCgpOwogCi0gICAgICAgIGlmIChsb29rYWhlYWQu
dHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgewotICAgICAgICAgICAgLy8gY292ZXJzOgot
ICAgICAgICAgICAgLy8gaW1wb3J0ICJmb28iOwotICAgICAgICAgICAgc3JjID0gcGFyc2VNb2R1
bGVTcGVjaWZpZXIoKTsKLSAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAg
ICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUltcG9ydERlY2xh
cmF0aW9uKHNwZWNpZmllcnMsIHNyYykpOworICAgICAgICBpZiAobWF0Y2goJ3snKSkgeworICAg
ICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5PYmplY3RQYXR0ZXJuQXNSZXN0UGFyYW1ldGVy
KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykgJiYg
aXNJZGVudGlmaWVyTmFtZShsb29rYWhlYWQpKSB7Ci0gICAgICAgICAgICAvLyBjb3ZlcnM6Ci0g
ICAgICAgICAgICAvLyBpbXBvcnQgZm9vCi0gICAgICAgICAgICAvLyBpbXBvcnQgZm9vLCAuLi4K
LSAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIo
KSk7Ci0gICAgICAgICAgICBpZiAobWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgIGxleCgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChtYXRjaCgnKicpKSB7Ci0g
ICAgICAgICAgICAvLyBjb3ZlcnM6Ci0gICAgICAgICAgICAvLyBpbXBvcnQgZm9vLCAqIGFzIGZv
bwotICAgICAgICAgICAgLy8gaW1wb3J0ICogYXMgZm9vCi0gICAgICAgICAgICBzcGVjaWZpZXJz
LnB1c2gocGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAobWF0Y2goJ3snKSkgewotICAgICAgICAgICAgLy8gY292ZXJzOgotICAgICAgICAgICAgLy8g
aW1wb3J0IGZvbywge2Jhcn0KLSAgICAgICAgICAgIC8vIGltcG9ydCB7YmFyfQotICAgICAgICAg
ICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHBhcnNlTmFtZWRJbXBvcnRzKCkpOwor
ICAgICAgICBwYXJhbXMucHVzaChsb29rYWhlYWQpOworCisgICAgICAgIHBhcmFtID0gcGFyc2VW
YXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAgICBpZiAobWF0Y2goJz0nKSkgeworICAgICAg
ICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5EZWZhdWx0UmVzdFBhcmFtZXRlcik7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkgewotICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgbG9va2FoZWFkLnZhbHVlID8KLSAgICAgICAgICAgICAg
ICAgICAgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1
c2UsIGxvb2thaGVhZC52YWx1ZSk7CisgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAg
ICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5QYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXIpOwog
ICAgICAgICB9Ci0gICAgICAgIGxleCgpOwotICAgICAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNp
ZmllcigpOwotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CiAKLSAgICAgICAgcmV0dXJuIG1h
cmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlSW1wb3J0RGVjbGFyYXRpb24oc3BlY2lm
aWVycywgc3JjKSk7CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFJlc3RFbGVtZW50KHBhcmFt
KTsKICAgICB9CiAKLSAgICAvLyAxMi4zIEVtcHR5IFN0YXRlbWVudAorICAgIC8vIEVDTUEtMjYy
IDEzLjQgRW1wdHkgU3RhdGVtZW50CiAKLSAgICBmdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50
KCkgewotICAgICAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgZnVuY3Rpb24g
cGFyc2VFbXB0eVN0YXRlbWVudChub2RlKSB7CiAgICAgICAgIGV4cGVjdCgnOycpOwotICAgICAg
ICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVFbXB0eVN0YXRlbWVu
dCgpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRW1wdHlTdGF0ZW1lbnQoKTsKICAgICB9
CiAKLSAgICAvLyAxMi40IEV4cHJlc3Npb24gU3RhdGVtZW50CisgICAgLy8gRUNNQS0yNjIgMTIu
NCBFeHByZXNzaW9uIFN0YXRlbWVudAogCi0gICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uU3Rh
dGVtZW50KCkgewotICAgICAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksIGV4cHIgPSBw
YXJzZUV4cHJlc3Npb24oKTsKKyAgICBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQo
bm9kZSkgeworICAgICAgICB2YXIgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgICBj
b25zdW1lU2VtaWNvbG9uKCk7Ci0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRl
bGVnYXRlLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcikpOworICAgICAgICByZXR1cm4g
bm9kZS5maW5pc2hFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOwogICAgIH0KIAotICAgIC8vIDEy
LjUgSWYgc3RhdGVtZW50CisgICAgLy8gRUNNQS0yNjIgMTMuNiBJZiBzdGF0ZW1lbnQKIAotICAg
IGZ1bmN0aW9uIHBhcnNlSWZTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciB0ZXN0LCBjb25zZXF1
ZW50LCBhbHRlcm5hdGUsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBh
cnNlSWZTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgdGVzdCwgY29uc2VxdWVudCwgYWx0
ZXJuYXRlOwogCiAgICAgICAgIGV4cGVjdEtleXdvcmQoJ2lmJyk7CiAKQEAgLTM5MjAsMTMgKzQx
NjksMTMgQEAKICAgICAgICAgICAgIGFsdGVybmF0ZSA9IG51bGw7CiAgICAgICAgIH0KIAotICAg
ICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVJZlN0YXRlbWVu
dCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmlu
aXNoSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTsKICAgICB9CiAKLSAg
ICAvLyAxMi42IEl0ZXJhdGlvbiBTdGF0ZW1lbnRzCisgICAgLy8gRUNNQS0yNjIgMTMuNyBJdGVy
YXRpb24gU3RhdGVtZW50cwogCi0gICAgZnVuY3Rpb24gcGFyc2VEb1doaWxlU3RhdGVtZW50KCkg
ewotICAgICAgICB2YXIgYm9keSwgdGVzdCwgb2xkSW5JdGVyYXRpb24sIG1hcmtlciA9IG1hcmtl
ckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0YXRlbWVudChub2RlKSB7Cisg
ICAgICAgIHZhciBib2R5LCB0ZXN0LCBvbGRJbkl0ZXJhdGlvbjsKIAogICAgICAgICBleHBlY3RL
ZXl3b3JkKCdkbycpOwogCkBAIC0zOTQ5LDExICs0MTk4LDExIEBACiAgICAgICAgICAgICBsZXgo
KTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVn
YXRlLmNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQoYm9keSwgdGVzdCkpOworICAgICAgICByZXR1cm4g
bm9kZS5maW5pc2hEb1doaWxlU3RhdGVtZW50KGJvZHksIHRlc3QpOwogICAgIH0KIAotICAgIGZ1
bmN0aW9uIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciB0ZXN0LCBib2R5LCBv
bGRJbkl0ZXJhdGlvbiwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgZnVuY3Rpb24gcGFy
c2VXaGlsZVN0YXRlbWVudChub2RlKSB7CisgICAgICAgIHZhciB0ZXN0LCBib2R5LCBvbGRJbkl0
ZXJhdGlvbjsKIAogICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGlsZScpOwogCkBAIC0zOTcwLDcz
ICs0MjE5LDExMSBAQAogCiAgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRp
b247CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRl
V2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSkpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hX
aGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBwYXJzZUZv
clZhcmlhYmxlRGVjbGFyYXRpb24oKSB7Ci0gICAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVh
dGUoKSwKLSAgICAgICAgICAgIHRva2VuID0gbGV4KCksCi0gICAgICAgICAgICBkZWNsYXJhdGlv
bnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CisgICAgZnVuY3Rpb24gcGFyc2VG
b3JTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgaW5pdCwgZm9ySW4sIGluaXRTZXEsIGlu
aXRTdGFydFRva2VuLCB0ZXN0LCB1cGRhdGUsIGxlZnQsIHJpZ2h0LCBraW5kLCBkZWNsYXJhdGlv
bnMsCisgICAgICAgICAgICBib2R5LCBvbGRJbkl0ZXJhdGlvbiwgcHJldmlvdXNBbGxvd0luID0g
c3RhdGUuYWxsb3dJbjsKIAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxl
Z2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgdG9rZW4udmFsdWUp
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUZvclN0YXRlbWVudChvcHRzKSB7Ci0gICAg
ICAgIHZhciBpbml0LCB0ZXN0LCB1cGRhdGUsIGxlZnQsIHJpZ2h0LCBib2R5LCBvcGVyYXRvciwg
b2xkSW5JdGVyYXRpb24sCi0gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKICAg
ICAgICAgaW5pdCA9IHRlc3QgPSB1cGRhdGUgPSBudWxsOwotICAgICAgICBleHBlY3RLZXl3b3Jk
KCdmb3InKTsKKyAgICAgICAgZm9ySW4gPSB0cnVlOwogCi0gICAgICAgIC8vIGh0dHA6Ly93aWtp
LmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPXByb3Bvc2FsczppdGVyYXRvcnNfYW5kX2dlbmVy
YXRvcnMmcz1lYWNoCi0gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdlYWNoJykp
IHsKLSAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkVhY2hOb3RBbGxvd2VkKTsK
LSAgICAgICAgfQorICAgICAgICBleHBlY3RLZXl3b3JkKCdmb3InKTsKIAogICAgICAgICBleHBl
Y3QoJygnKTsKIAogICAgICAgICBpZiAobWF0Y2goJzsnKSkgewogICAgICAgICAgICAgbGV4KCk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCd2YXInKSB8
fCBtYXRjaEtleXdvcmQoJ2xldCcpIHx8IG1hdGNoS2V5d29yZCgnY29uc3QnKSkgeworICAgICAg
ICAgICAgaWYgKG1hdGNoS2V5d29yZCgndmFyJykpIHsKKyAgICAgICAgICAgICAgICBpbml0ID0g
bmV3IE5vZGUoKTsKKyAgICAgICAgICAgICAgICBsZXgoKTsKKwogICAgICAgICAgICAgICAgIHN0
YXRlLmFsbG93SW4gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpbml0ID0gcGFyc2VGb3JWYXJp
YWJsZURlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7
CisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9u
TGlzdCh7IGluRm9yOiB0cnVlIH0pOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBw
cmV2aW91c0FsbG93SW47CiAKLSAgICAgICAgICAgICAgICBpZiAoaW5pdC5kZWNsYXJhdGlvbnMu
bGVuZ3RoID09PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2lu
JykgfHwgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0b3IgPSBsb29rYWhlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ISgob3BlcmF0b3IudmFsdWUgPT09ICdpbicgfHwgaW5pdC5raW5kICE9PSAndmFyJykgJiYgaW5p
dC5kZWNsYXJhdGlvbnNbMF0uaW5pdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9u
cy5sZW5ndGggPT09IDEgJiYgbWF0Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGluaXQgPSBpbml0LmZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zKTsK
KyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBp
bml0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgZGVjbGFyYXRpb25zWzBdLmluaXQgPT09IG51
bGwgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgeworICAgICAgICAgICAgICAgICAg
ICBpbml0ID0gaW5pdC5maW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucyk7Cisg
ICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5p
dDsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KCk7CisgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOworICAgICAgICAgICAgICAgICAg
ICBmb3JJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGluaXQgPSBpbml0LmZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25z
KTsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCc7Jyk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3Jk
KCdjb25zdCcpIHx8IG1hdGNoS2V5d29yZCgnbGV0JykpIHsKKyAgICAgICAgICAgICAgICBpbml0
ID0gbmV3IE5vZGUoKTsKKyAgICAgICAgICAgICAgICBraW5kID0gbGV4KCkudmFsdWU7CisKICAg
ICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaW5p
dCA9IHBhcnNlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0
cnVlOworICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlQmluZGluZ0xpc3Qoa2lu
ZCwge2luRm9yOiB0cnVlfSk7CisgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZp
b3VzQWxsb3dJbjsKIAotICAgICAgICAgICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3Jk
KCdvZicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gbGV4KCk7CisgICAgICAg
ICAgICAgICAgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgZGVjbGFyYXRpb25zWzBd
LmluaXQgPT09IG51bGwgJiYgbWF0Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGluaXQgPSBpbml0LmZpbmlzaExleGljYWxEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtp
bmQpOworICAgICAgICAgICAgICAgICAgICBsZXgoKTsKICAgICAgICAgICAgICAgICAgICAgbGVm
dCA9IGluaXQ7CiAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7
CiAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobWF0Y2hLZXl3b3JkKCdpbicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIExlZnRI
YW5kU2lkZUV4cHJlc3Npb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Fzc2lnbmFibGVM
ZWZ0SGFuZFNpZGUoaW5pdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckluKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgZGVjbGFyYXRpb25zWzBdLmluaXQgPT09
IG51bGwgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgeworICAgICAgICAgICAgICAg
ICAgICBpbml0ID0gaW5pdC5maW5pc2hMZXhpY2FsRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBr
aW5kKTsKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGxl
ZnQgPSBpbml0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisgICAgICAgICAg
ICAgICAgICAgIGZvckluID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworICAgICAgICAgICAgICAgICAgICBp
bml0ID0gaW5pdC5maW5pc2hMZXhpY2FsRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGluaXRTdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93
SW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbml0ID0gaW5oZXJpdENvdmVyR3JhbW1hcihw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0lu
ID0gcHJldmlvdXNBbGxvd0luOworCisgICAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgn
aW4nKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXNzaWdubWVudFRhcmdldCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5JbnZhbGlkTEhT
SW5Gb3JJbik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0b3IgPSBsZXgoKTsKKworICAgICAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpOwogICAgICAgICAg
ICAgICAgICAgICBsZWZ0ID0gaW5pdDsKICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJz
ZUV4cHJlc3Npb24oKTsKICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0
Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
QXNzaWdubWVudFRhcmdldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJv
cihNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JMb29wKTsKKyAgICAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAg
ICAgICAgICAgZXhwZWN0KCc7Jyk7CisgICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAg
ICAgICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oaW5pdCk7CisgICAg
ICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9
IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCA9
IG51bGw7CisgICAgICAgICAgICAgICAgICAgIGZvckluID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcsJykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluaXRTZXEgPSBbaW5pdF07CisgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAobWF0Y2goJywnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
eCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRTZXEucHVzaChpc29sYXRlQ292
ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBuZXcgV3JhcHBpbmdOb2Rl
KGluaXRTdGFydFRva2VuKS5maW5pc2hTZXF1ZW5jZUV4cHJlc3Npb24oaW5pdFNlcSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCc7Jyk7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTQwNTcsMTMwICs0
MzQ0LDEyNyBAQAogICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uOwog
ICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7CiAKLSAgICAgICAgaWYgKCEob3B0cyAh
PT0gdW5kZWZpbmVkICYmIG9wdHMuaWdub3JlQm9keSkpIHsKLSAgICAgICAgICAgIGJvZHkgPSBw
YXJzZVN0YXRlbWVudCgpOwotICAgICAgICB9CisgICAgICAgIGJvZHkgPSBpc29sYXRlQ292ZXJH
cmFtbWFyKHBhcnNlU3RhdGVtZW50KTsKIAogICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9s
ZEluSXRlcmF0aW9uOwogCi0gICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcp
IHsKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0
ZUZvclN0YXRlbWVudChpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChvcGVyYXRvci52YWx1ZSA9PT0gJ2luJykgewotICAgICAgICAgICAgcmV0dXJu
IG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlRm9ySW5TdGF0ZW1lbnQobGVmdCwg
cmlnaHQsIGJvZHkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFy
a2VyLCBkZWxlZ2F0ZS5jcmVhdGVGb3JPZlN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSkpOwor
ICAgICAgICByZXR1cm4gKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgPworICAgICAgICAg
ICAgICAgIG5vZGUuZmluaXNoRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkg
OgorICAgICAgICAgICAgICAgIGZvckluID8gbm9kZS5maW5pc2hGb3JJblN0YXRlbWVudChsZWZ0
LCByaWdodCwgYm9keSkgOgorICAgICAgICAgICAgICAgICAgICBub2RlLmZpbmlzaEZvck9mU3Rh
dGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTsKICAgICB9CiAKLSAgICAvLyAxMi43IFRoZSBjb250
aW51ZSBzdGF0ZW1lbnQKKyAgICAvLyBFQ01BLTI2MiAxMy44IFRoZSBjb250aW51ZSBzdGF0ZW1l
bnQKIAotICAgIGZ1bmN0aW9uIHBhcnNlQ29udGludWVTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZh
ciBsYWJlbCA9IG51bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBh
cnNlQ29udGludWVTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgbGFiZWwgPSBudWxsLCBr
ZXk7CiAKICAgICAgICAgZXhwZWN0S2V5d29yZCgnY29udGludWUnKTsKIAogICAgICAgICAvLyBP
cHRpbWl6ZSB0aGUgbW9zdCBjb21tb24gZm9ybTogJ2NvbnRpbnVlOycuCi0gICAgICAgIGlmIChz
b3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDU5KSB7CisgICAgICAgIGlmIChzb3VyY2UuY2hh
ckNvZGVBdChzdGFydEluZGV4KSA9PT0gMHgzQikgewogICAgICAgICAgICAgbGV4KCk7CiAKICAg
ICAgICAgICAgIGlmICghc3RhdGUuaW5JdGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOworICAgICAgICAgICAgICAgIHRo
cm93RXJyb3IoTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlQ29udGlu
dWVTdGF0ZW1lbnQobnVsbCkpOworICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQ29udGlu
dWVTdGF0ZW1lbnQobnVsbCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocGVla0xpbmVUZXJt
aW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKGhhc0xpbmVUZXJtaW5hdG9yKSB7CiAgICAgICAgICAg
ICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7
fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUNvbnRpbnVlU3RhdGVt
ZW50KG51bGwpKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaENvbnRpbnVlU3RhdGVt
ZW50KG51bGwpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBU
b2tlbi5JZGVudGlmaWVyKSB7CiAgICAgICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVu
dGlmaWVyKCk7CiAKLSAgICAgICAgICAgIGlmICghc3RhdGUubGFiZWxTZXQuaGFzKGxhYmVsLm5h
bWUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxh
YmVsLCBsYWJlbC5uYW1lKTsKKyAgICAgICAgICAgIGtleSA9ICckJyArIGxhYmVsLm5hbWU7Cisg
ICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0
ZS5sYWJlbFNldCwga2V5KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMu
VW5rbm93bkxhYmVsLCBsYWJlbC5uYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAg
ICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKIAogICAgICAgICBpZiAobGFiZWwgPT09IG51bGwg
JiYgIXN0YXRlLmluSXRlcmF0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5JbGxlZ2FsQ29udGludWUpOworICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5J
bGxlZ2FsQ29udGludWUpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5
KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobGFiZWwpKTsKKyAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoQ29udGludWVTdGF0ZW1lbnQobGFiZWwpOwogICAgIH0KIAot
ICAgIC8vIDEyLjggVGhlIGJyZWFrIHN0YXRlbWVudAorICAgIC8vIEVDTUEtMjYyIDEzLjkgVGhl
IGJyZWFrIHN0YXRlbWVudAogCi0gICAgZnVuY3Rpb24gcGFyc2VCcmVha1N0YXRlbWVudCgpIHsK
LSAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAg
ZnVuY3Rpb24gcGFyc2VCcmVha1N0YXRlbWVudChub2RlKSB7CisgICAgICAgIHZhciBsYWJlbCA9
IG51bGwsIGtleTsKIAogICAgICAgICBleHBlY3RLZXl3b3JkKCdicmVhaycpOwogCi0gICAgICAg
IC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWlj
b2xvbiAoY2hhciAjNTkpLgotICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09
PSA1OSkgeworICAgICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1t
ZWRpYXRlbHkgYSBzZW1pY29sb24gKFUrMDAzQikuCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNv
ZGVBdChsYXN0SW5kZXgpID09PSAweDNCKSB7CiAgICAgICAgICAgICBsZXgoKTsKIAogICAgICAg
ICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7Ci0gICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNy
ZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlz
aEJyZWFrU3RhdGVtZW50KG51bGwpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBlZWtMaW5l
VGVybWluYXRvcigpKSB7CisgICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikgewogICAgICAg
ICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7Ci0gICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNy
ZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlz
aEJyZWFrU3RhdGVtZW50KG51bGwpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxvb2thaGVh
ZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CiAgICAgICAgICAgICBsYWJlbCA9IHBhcnNl
VmFyaWFibGVJZGVudGlmaWVyKCk7CiAKLSAgICAgICAgICAgIGlmICghc3RhdGUubGFiZWxTZXQu
aGFzKGxhYmVsLm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1lKTsKKyAgICAgICAgICAgIGtleSA9ICckJyArIGxh
YmVsLm5hbWU7CisgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy
dHkuY2FsbChzdGF0ZS5sYWJlbFNldCwga2V5KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJy
b3IoTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1lKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCiAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKIAogICAgICAgICBpZiAobGFi
ZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHsK
LSAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CisgICAg
ICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CiAgICAgICAgIH0KIAot
ICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0
YXRlbWVudChsYWJlbCkpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hCcmVha1N0YXRlbWVu
dChsYWJlbCk7CiAgICAgfQogCi0gICAgLy8gMTIuOSBUaGUgcmV0dXJuIHN0YXRlbWVudAorICAg
IC8vIEVDTUEtMjYyIDEzLjEwIFRoZSByZXR1cm4gc3RhdGVtZW50CiAKLSAgICBmdW5jdGlvbiBw
YXJzZVJldHVyblN0YXRlbWVudCgpIHsKLSAgICAgICAgdmFyIGFyZ3VtZW50ID0gbnVsbCwgbWFy
a2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgZnVuY3Rpb24gcGFyc2VSZXR1cm5TdGF0ZW1lbnQo
bm9kZSkgeworICAgICAgICB2YXIgYXJndW1lbnQgPSBudWxsOwogCiAgICAgICAgIGV4cGVjdEtl
eXdvcmQoJ3JldHVybicpOwogCiAgICAgICAgIGlmICghc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsK
LSAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFJldHVy
bik7CisgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gJ3JldHVybicgZm9sbG93ZWQgYnkgYSBzcGFjZSBhbmQg
YW4gaWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi4KLSAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KSA9PT0gMzIpIHsKLSAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChz
b3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkgeworICAgICAgICBpZiAoc291cmNlLmNoYXJD
b2RlQXQobGFzdEluZGV4KSA9PT0gMHgyMCkgeworICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmll
clN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGxhc3RJbmRleCArIDEpKSkgewogICAgICAgICAgICAg
ICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICAgICAgY29uc3Vt
ZVNlbWljb2xvbigpOwotICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIs
IGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0YXRlbWVudChhcmd1bWVudCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlLmZpbmlzaFJldHVyblN0YXRlbWVudChhcmd1bWVudCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsK
LSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVJl
dHVyblN0YXRlbWVudChudWxsKSk7CisgICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikgewor
ICAgICAgICAgICAgLy8gSEFDSworICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUmV0dXJu
U3RhdGVtZW50KG51bGwpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7
CkBAIC00MTkxLDE2ICs0NDc1LDE2IEBACiAKICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwog
Ci0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVJldHVy
blN0YXRlbWVudChhcmd1bWVudCkpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hSZXR1cm5T
dGF0ZW1lbnQoYXJndW1lbnQpOwogICAgIH0KIAotICAgIC8vIDEyLjEwIFRoZSB3aXRoIHN0YXRl
bWVudAorICAgIC8vIEVDTUEtMjYyIDEzLjExIFRoZSB3aXRoIHN0YXRlbWVudAogCi0gICAgZnVu
Y3Rpb24gcGFyc2VXaXRoU3RhdGVtZW50KCkgewotICAgICAgICB2YXIgb2JqZWN0LCBib2R5LCBt
YXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5jdGlvbiBwYXJzZVdpdGhTdGF0ZW1lbnQo
bm9kZSkgeworICAgICAgICB2YXIgb2JqZWN0LCBib2R5OwogCiAgICAgICAgIGlmIChzdHJpY3Qp
IHsKLSAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TW9k
ZVdpdGgpOworICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3RNb2RlV2l0
aCk7CiAgICAgICAgIH0KIAogICAgICAgICBleHBlY3RLZXl3b3JkKCd3aXRoJyk7CkBAIC00MjEz
LDE2ICs0NDk3LDEzIEBACiAKICAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CiAKLSAg
ICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlV2l0aFN0YXRl
bWVudChvYmplY3QsIGJvZHkpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoV2l0aFN0YXRl
bWVudChvYmplY3QsIGJvZHkpOwogICAgIH0KIAotICAgIC8vIDEyLjEwIFRoZSBzd2l0aCBzdGF0
ZW1lbnQKKyAgICAvLyBFQ01BLTI2MiAxMy4xMiBUaGUgc3dpdGNoIHN0YXRlbWVudAogCiAgICAg
ZnVuY3Rpb24gcGFyc2VTd2l0Y2hDYXNlKCkgewotICAgICAgICB2YXIgdGVzdCwKLSAgICAgICAg
ICAgIGNvbnNlcXVlbnQgPSBbXSwKLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQsCi0gICAgICAg
ICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICAgICAgdmFyIHRlc3QsIGNvbnNlcXVl
bnQgPSBbXSwgc3RhdGVtZW50LCBub2RlID0gbmV3IE5vZGUoKTsKIAogICAgICAgICBpZiAobWF0
Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHsKICAgICAgICAgICAgIGxleCgpOwpAQCAtNDIzMywyMiAr
NDUxNCwxOSBAQAogICAgICAgICB9CiAgICAgICAgIGV4cGVjdCgnOicpOwogCi0gICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0
aCkgewogICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykgfHwgbWF0Y2hLZXl3b3JkKCdkZWZhdWx0
JykgfHwgbWF0Y2hLZXl3b3JkKCdjYXNlJykpIHsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1l
bnQoKTsKLSAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gJ3VuZGVmaW5l
ZCcpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNvbnNlcXVlbnQucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9
IHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKTsKKyAgICAgICAgICAgIGNvbnNlcXVlbnQucHVzaChz
dGF0ZW1lbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtl
ciwgZGVsZWdhdGUuY3JlYXRlU3dpdGNoQ2FzZSh0ZXN0LCBjb25zZXF1ZW50KSk7CisgICAgICAg
IHJldHVybiBub2RlLmZpbmlzaFN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCk7CiAgICAgfQog
Ci0gICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciBkaXNj
cmltaW5hbnQsIGNhc2VzLCBjbGF1c2UsIG9sZEluU3dpdGNoLCBkZWZhdWx0Rm91bmQsIG1hcmtl
ciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBhcnNlU3dpdGNoU3RhdGVtZW50KG5v
ZGUpIHsKKyAgICAgICAgdmFyIGRpc2NyaW1pbmFudCwgY2FzZXMsIGNsYXVzZSwgb2xkSW5Td2l0
Y2gsIGRlZmF1bHRGb3VuZDsKIAogICAgICAgICBleHBlY3RLZXl3b3JkKCdzd2l0Y2gnKTsKIApA
QCAtNDI2NCwyMSArNDU0MiwyMSBAQAogCiAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CiAgICAg
ICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRl
bGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2VzKSk7CisgICAg
ICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBj
YXNlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNo
OwogICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IHRydWU7CiAgICAgICAgIGRlZmF1bHRGb3VuZCA9
IGZhbHNlOwogCi0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICB3aGls
ZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkgewogICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNsYXVz
ZSA9IHBhcnNlU3dpdGNoQ2FzZSgpOwogICAgICAgICAgICAgaWYgKGNsYXVzZS50ZXN0ID09PSBu
dWxsKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGb3VuZCkgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gp
OworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLk11bHRpcGxlRGVmYXVs
dHNJblN3aXRjaCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGRlZmF1bHRG
b3VuZCA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC00Mjg5LDU5ICs0NTY3LDY3IEBACiAKICAg
ICAgICAgZXhwZWN0KCd9Jyk7CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwg
ZGVsZWdhdGUuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpKTsKKyAg
ICAgICAgcmV0dXJuIG5vZGUuZmluaXNoU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2Fz
ZXMpOwogICAgIH0KIAotICAgIC8vIDEyLjEzIFRoZSB0aHJvdyBzdGF0ZW1lbnQKKyAgICAvLyBF
Q01BLTI2MiAxMy4xNCBUaGUgdGhyb3cgc3RhdGVtZW50CiAKLSAgICBmdW5jdGlvbiBwYXJzZVRo
cm93U3RhdGVtZW50KCkgewotICAgICAgICB2YXIgYXJndW1lbnQsIG1hcmtlciA9IG1hcmtlckNy
ZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBhcnNlVGhyb3dTdGF0ZW1lbnQobm9kZSkgeworICAgICAg
ICB2YXIgYXJndW1lbnQ7CiAKICAgICAgICAgZXhwZWN0S2V5d29yZCgndGhyb3cnKTsKIAotICAg
ICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93KTsKKyAgICAgICAgaWYgKGhhc0xpbmVUZXJt
aW5hdG9yKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLk5ld2xpbmVBZnRlclRo
cm93KTsKICAgICAgICAgfQogCiAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7
CiAKICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwogCi0gICAgICAgIHJldHVybiBtYXJrZXJB
cHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVRocm93U3RhdGVtZW50KGFyZ3VtZW50KSk7Cisg
ICAgICAgIHJldHVybiBub2RlLmZpbmlzaFRocm93U3RhdGVtZW50KGFyZ3VtZW50KTsKICAgICB9
CiAKLSAgICAvLyAxMi4xNCBUaGUgdHJ5IHN0YXRlbWVudAorICAgIC8vIEVDTUEtMjYyIDEzLjE1
IFRoZSB0cnkgc3RhdGVtZW50CiAKICAgICBmdW5jdGlvbiBwYXJzZUNhdGNoQ2xhdXNlKCkgewot
ICAgICAgICB2YXIgcGFyYW0sIGJvZHksIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgICAg
ICB2YXIgcGFyYW0sIHBhcmFtcyA9IFtdLCBwYXJhbU1hcCA9IHt9LCBrZXksIGksIGJvZHksIG5v
ZGUgPSBuZXcgTm9kZSgpOwogCiAgICAgICAgIGV4cGVjdEtleXdvcmQoJ2NhdGNoJyk7CiAKICAg
ICAgICAgZXhwZWN0KCcoJyk7CiAgICAgICAgIGlmIChtYXRjaCgnKScpKSB7Ci0gICAgICAgICAg
ICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3Rl
ZFRva2VuKGxvb2thaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBwYXJhbSA9IHBhcnNlUGF0
dGVybihwYXJhbXMpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICBrZXkgPSAnJCcgKyBwYXJhbXNbaV0udmFsdWU7CisgICAgICAgICAg
ICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtTWFwLCBrZXkp
KSB7CisgICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5EdXBsaWNhdGVCaW5k
aW5nLCBwYXJhbXNbaV0udmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyYW1N
YXBba2V5XSA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBwYXJhbSA9IHBhcnNlRXhwcmVz
c2lvbigpOwotICAgICAgICAvLyAxMi4xNC4xCi0gICAgICAgIGlmIChzdHJpY3QgJiYgcGFyYW0u
dHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChwYXJhbS5uYW1l
KSkgewotICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RD
YXRjaFZhcmlhYmxlKTsKKyAgICAgICAgLy8gRUNNQS0yNjIgMTIuMTQuMQorICAgICAgICBpZiAo
c3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQocGFyYW0ubmFtZSkpIHsKKyAgICAgICAgICAgIHRv
bGVyYXRlRXJyb3IoTWVzc2FnZXMuU3RyaWN0Q2F0Y2hWYXJpYWJsZSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBleHBlY3QoJyknKTsKICAgICAgICAgYm9keSA9IHBhcnNlQmxvY2soKTsKLSAgICAg
ICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlQ2F0Y2hDbGF1c2Uo
cGFyYW0sIGJvZHkpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQ2F0Y2hDbGF1c2UocGFy
YW0sIGJvZHkpOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHBhcnNlVHJ5U3RhdGVtZW50KCkgewot
ICAgICAgICB2YXIgYmxvY2ssIGhhbmRsZXJzID0gW10sIGZpbmFsaXplciA9IG51bGwsIG1hcmtl
ciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBhcnNlVHJ5U3RhdGVtZW50KG5vZGUp
IHsKKyAgICAgICAgdmFyIGJsb2NrLCBoYW5kbGVyID0gbnVsbCwgZmluYWxpemVyID0gbnVsbDsK
IAogICAgICAgICBleHBlY3RLZXl3b3JkKCd0cnknKTsKIAogICAgICAgICBibG9jayA9IHBhcnNl
QmxvY2soKTsKIAogICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdjYXRjaCcpKSB7Ci0gICAgICAg
ICAgICBoYW5kbGVycy5wdXNoKHBhcnNlQ2F0Y2hDbGF1c2UoKSk7CisgICAgICAgICAgICBoYW5k
bGVyID0gcGFyc2VDYXRjaENsYXVzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1hdGNo
S2V5d29yZCgnZmluYWxseScpKSB7CkBAIC00MzQ5LDE0MSArNDYzNSwxMzQgQEAKICAgICAgICAg
ICAgIGZpbmFsaXplciA9IHBhcnNlQmxvY2soKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICho
YW5kbGVycy5sZW5ndGggPT09IDAgJiYgIWZpbmFsaXplcikgewotICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSk7CisgICAgICAgIGlmICghaGFuZGxl
ciAmJiAhZmluYWxpemVyKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLk5vQ2F0
Y2hPckZpbmFsbHkpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1h
cmtlciwgZGVsZWdhdGUuY3JlYXRlVHJ5U3RhdGVtZW50KGJsb2NrLCBbXSwgaGFuZGxlcnMsIGZp
bmFsaXplcikpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hUcnlTdGF0ZW1lbnQoYmxvY2ss
IGhhbmRsZXIsIGZpbmFsaXplcik7CiAgICAgfQogCi0gICAgLy8gMTIuMTUgVGhlIGRlYnVnZ2Vy
IHN0YXRlbWVudAorICAgIC8vIEVDTUEtMjYyIDEzLjE2IFRoZSBkZWJ1Z2dlciBzdGF0ZW1lbnQK
IAotICAgIGZ1bmN0aW9uIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciBt
YXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVt
ZW50KG5vZGUpIHsKICAgICAgICAgZXhwZWN0S2V5d29yZCgnZGVidWdnZXInKTsKIAogICAgICAg
ICBjb25zdW1lU2VtaWNvbG9uKCk7CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtl
ciwgZGVsZWdhdGUuY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQoKSk7CisgICAgICAgIHJldHVybiBu
b2RlLmZpbmlzaERlYnVnZ2VyU3RhdGVtZW50KCk7CiAgICAgfQogCi0gICAgLy8gMTIgU3RhdGVt
ZW50cworICAgIC8vIDEzIFN0YXRlbWVudHMKIAogICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50
KCkgewogICAgICAgICB2YXIgdHlwZSA9IGxvb2thaGVhZC50eXBlLAotICAgICAgICAgICAgbWFy
a2VyLAogICAgICAgICAgICAgZXhwciwKLSAgICAgICAgICAgIGxhYmVsZWRCb2R5OworICAgICAg
ICAgICAgbGFiZWxlZEJvZHksCisgICAgICAgICAgICBrZXksCisgICAgICAgICAgICBub2RlOwog
CiAgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5FT0YpIHsKLSAgICAgICAgICAgIHRocm93VW5l
eHBlY3RlZChsb29rYWhlYWQpOworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9v
a2FoZWFkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVh
dG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gJ3snKSB7CisgICAgICAgICAgICByZXR1cm4gcGFy
c2VCbG9jaygpOwogICAgICAgICB9CisgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmlu
ZGluZ0VsZW1lbnQgPSB0cnVlOworICAgICAgICBub2RlID0gbmV3IE5vZGUoKTsKIAogICAgICAg
ICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgewogICAgICAgICAgICAgc3dpdGNoIChs
b29rYWhlYWQudmFsdWUpIHsKICAgICAgICAgICAgIGNhc2UgJzsnOgotICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZUVtcHR5U3RhdGVtZW50KCk7Ci0gICAgICAgICAgICBjYXNlICd7JzoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VCbG9jaygpOworICAgICAgICAgICAgICAgIHJldHVy
biBwYXJzZUVtcHR5U3RhdGVtZW50KG5vZGUpOwogICAgICAgICAgICAgY2FzZSAnKCc6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSk7CiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgfSBl
bHNlIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGxv
b2thaGVhZC52YWx1ZSkgewogICAgICAgICAgICAgY2FzZSAnYnJlYWsnOgotICAgICAgICAgICAg
ICAgIHJldHVybiBwYXJzZUJyZWFrU3RhdGVtZW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlQnJlYWtTdGF0ZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBjYXNlICdjb250aW51ZSc6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udGludWVTdGF0ZW1lbnQoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VDb250aW51ZVN0YXRlbWVudChub2RlKTsKICAgICAgICAg
ICAgIGNhc2UgJ2RlYnVnZ2VyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VEZWJ1Z2dl
clN0YXRlbWVudCgpOworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZURlYnVnZ2VyU3RhdGVt
ZW50KG5vZGUpOwogICAgICAgICAgICAgY2FzZSAnZG8nOgotICAgICAgICAgICAgICAgIHJldHVy
biBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VE
b1doaWxlU3RhdGVtZW50KG5vZGUpOwogICAgICAgICAgICAgY2FzZSAnZm9yJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcGFyc2VGb3JTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcGFyc2VGb3JTdGF0ZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOwotICAg
ICAgICAgICAgY2FzZSAnY2xhc3MnOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNsYXNz
RGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uKG5vZGUpOwogICAgICAgICAgICAgY2FzZSAnaWYnOgotICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJzZUlmU3RhdGVtZW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSWZT
dGF0ZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBjYXNlICdyZXR1cm4nOgotICAgICAgICAgICAg
ICAgIHJldHVybiBwYXJzZVJldHVyblN0YXRlbWVudCgpOworICAgICAgICAgICAgICAgIHJldHVy
biBwYXJzZVJldHVyblN0YXRlbWVudChub2RlKTsKICAgICAgICAgICAgIGNhc2UgJ3N3aXRjaCc6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3dpdGNoU3RhdGVtZW50KCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlU3dpdGNoU3RhdGVtZW50KG5vZGUpOwogICAgICAgICAgICAg
Y2FzZSAndGhyb3cnOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRocm93U3RhdGVtZW50
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGhyb3dTdGF0ZW1lbnQobm9kZSk7CiAg
ICAgICAgICAgICBjYXNlICd0cnknOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRyeVN0
YXRlbWVudCgpOworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRyeVN0YXRlbWVudChub2Rl
KTsKICAgICAgICAgICAgIGNhc2UgJ3Zhcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
VmFyaWFibGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VWYXJpYWJs
ZVN0YXRlbWVudChub2RlKTsKICAgICAgICAgICAgIGNhc2UgJ3doaWxlJzoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcGFyc2VXaGlsZVN0YXRlbWVudCgpOworICAgICAgICAgICAgICAgIHJldHVy
biBwYXJzZVdoaWxlU3RhdGVtZW50KG5vZGUpOwogICAgICAgICAgICAgY2FzZSAnd2l0aCc6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlV2l0aFN0YXRlbWVudCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBwYXJzZVdpdGhTdGF0ZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CiAgICAgICAgIGV4cHIgPSBwYXJzZUV4cHJl
c3Npb24oKTsKIAotICAgICAgICAvLyAxMi4xMiBMYWJlbGxlZCBTdGF0ZW1lbnRzCisgICAgICAg
IC8vIEVDTUEtMjYyIDEyLjEyIExhYmVsbGVkIFN0YXRlbWVudHMKICAgICAgICAgaWYgKChleHBy
LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSAmJiBtYXRjaCgnOicpKSB7CiAgICAgICAgICAg
ICBsZXgoKTsKIAotICAgICAgICAgICAgaWYgKHN0YXRlLmxhYmVsU2V0LmhhcyhleHByLm5hbWUp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuUmVkZWNsYXJhdGlv
biwgJ0xhYmVsJywgZXhwci5uYW1lKTsKKyAgICAgICAgICAgIGtleSA9ICckJyArIGV4cHIubmFt
ZTsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo
c3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3Nh
Z2VzLlJlZGVjbGFyYXRpb24sICdMYWJlbCcsIGV4cHIubmFtZSk7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHN0YXRlLmxhYmVsU2V0LnNldChleHByLm5hbWUsIHRydWUpOworICAgICAg
ICAgICAgc3RhdGUubGFiZWxTZXRba2V5XSA9IHRydWU7CiAgICAgICAgICAgICBsYWJlbGVkQm9k
eSA9IHBhcnNlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICBzdGF0ZS5sYWJlbFNldC5kZWxldGUo
ZXhwci5uYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVn
YXRlLmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoZXhwciwgbGFiZWxlZEJvZHkpKTsKKyAgICAgICAg
ICAgIGRlbGV0ZSBzdGF0ZS5sYWJlbFNldFtrZXldOworICAgICAgICAgICAgcmV0dXJuIG5vZGUu
ZmluaXNoTGFiZWxlZFN0YXRlbWVudChleHByLCBsYWJlbGVkQm9keSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5
KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChleHByKSk7CisgICAg
ICAgIHJldHVybiBub2RlLmZpbmlzaEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcik7CiAgICAgfQog
Ci0gICAgLy8gMTMgRnVuY3Rpb24gRGVmaW5pdGlvbgotCi0gICAgZnVuY3Rpb24gcGFyc2VDb25j
aXNlQm9keSgpIHsKLSAgICAgICAgaWYgKG1hdGNoKCd7JykpIHsKLSAgICAgICAgICAgIHJldHVy
biBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgIH0KKyAgICAvLyBFQ01BLTI2MiAx
NC4xIEZ1bmN0aW9uIERlZmluaXRpb24KIAogICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Tb3Vy
Y2VFbGVtZW50cygpIHsKLSAgICAgICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRz
ID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZCwKLSAgICAgICAgICAgIG9s
ZExhYmVsU2V0LCBvbGRJbkl0ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5
LCBvbGRQYXJlbnRoZXNpemVkQ291bnQsCi0gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVh
dGUoKTsKKyAgICAgICAgdmFyIHN0YXRlbWVudCwgYm9keSA9IFtdLCB0b2tlbiwgZGlyZWN0aXZl
LCBmaXJzdFJlc3RyaWN0ZWQsCisgICAgICAgICAgICBvbGRMYWJlbFNldCwgb2xkSW5JdGVyYXRp
b24sIG9sZEluU3dpdGNoLCBvbGRJbkZ1bmN0aW9uQm9keSwgb2xkUGFyZW50aGVzaXNDb3VudCwK
KyAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpOwogCiAgICAgICAgIGV4cGVjdCgneycpOwog
Ci0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICB3aGlsZSAoc3RhcnRJ
bmRleCA8IGxlbmd0aCkgewogICAgICAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tl
bi5TdHJpbmdMaXRlcmFsKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKIAotICAgICAgICAgICAgc291cmNlRWxl
bWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOwotICAgICAgICAgICAgc291cmNlRWxlbWVudHMu
cHVzaChzb3VyY2VFbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJl
c3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9
IHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKTsKKyAgICAgICAgICAgIGJvZHkucHVzaChzdGF0ZW1l
bnQpOworICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IFN5bnRh
eC5MaXRlcmFsKSB7CiAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgZGlyZWN0aXZlCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkaXJlY3Rp
dmUgPSBzb3VyY2Uuc2xpY2UodG9rZW4ucmFuZ2VbMF0gKyAxLCB0b2tlbi5yYW5nZVsxXSAtIDEp
OworICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwg
dG9rZW4uZW5kIC0gMSk7CiAgICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNlIHN0cmlj
dCcpIHsKICAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlm
IChmaXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVy
YW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAg
ICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBN
ZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9r
ZW4ub2N0YWwpIHsKQEAgLTQ0OTYsMjMgKzQ3NzUsMTkgQEAKICAgICAgICAgb2xkSW5JdGVyYXRp
b24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsKICAgICAgICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5pblN3
aXRjaDsKICAgICAgICAgb2xkSW5GdW5jdGlvbkJvZHkgPSBzdGF0ZS5pbkZ1bmN0aW9uQm9keTsK
LSAgICAgICAgb2xkUGFyZW50aGVzaXplZENvdW50ID0gc3RhdGUucGFyZW50aGVzaXplZENvdW50
OworICAgICAgICBvbGRQYXJlbnRoZXNpc0NvdW50ID0gc3RhdGUucGFyZW50aGVzaXplZENvdW50
OwogCi0gICAgICAgIHN0YXRlLmxhYmVsU2V0ID0gbmV3IFN0cmluZ01hcCgpOworICAgICAgICBz
dGF0ZS5sYWJlbFNldCA9IHt9OwogICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IGZhbHNlOwog
ICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IGZhbHNlOwogICAgICAgICBzdGF0ZS5pbkZ1bmN0aW9u
Qm9keSA9IHRydWU7CiAgICAgICAgIHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudCA9IDA7CiAKLSAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgIHdoaWxlIChzdGFydEluZGV4
IDwgbGVuZ3RoKSB7CiAgICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkgewogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBh
cnNlU291cmNlRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50
ID09PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAg
ICAgICAgIGJvZHkucHVzaChwYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgZXhwZWN0KCd9Jyk7CkBAIC00NTIxLDE4ICs0Nzk2LDE5IEBACiAgICAgICAgIHN0
YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247CiAgICAgICAgIHN0YXRlLmluU3dpdGNo
ID0gb2xkSW5Td2l0Y2g7CiAgICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gb2xkSW5GdW5j
dGlvbkJvZHk7Ci0gICAgICAgIHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudCA9IG9sZFBhcmVudGhl
c2l6ZWRDb3VudDsKKyAgICAgICAgc3RhdGUucGFyZW50aGVzaXplZENvdW50ID0gb2xkUGFyZW50
aGVzaXNDb3VudDsKIAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0
ZS5jcmVhdGVCbG9ja1N0YXRlbWVudChzb3VyY2VFbGVtZW50cykpOworICAgICAgICByZXR1cm4g
bm9kZS5maW5pc2hCbG9ja1N0YXRlbWVudChib2R5KTsKICAgICB9CiAKICAgICBmdW5jdGlvbiB2
YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBuYW1lKSB7CisgICAgICAgIHZhciBrZXkgPSAn
JCcgKyBuYW1lOwogICAgICAgICBpZiAoc3RyaWN0KSB7CiAgICAgICAgICAgICBpZiAoaXNSZXN0
cmljdGVkV29yZChuYW1lKSkgewogICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBw
YXJhbTsKICAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQ
YXJhbU5hbWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy5wYXJhbVNl
dC5oYXMobmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blBy
b3BlcnR5LmNhbGwob3B0aW9ucy5wYXJhbVNldCwga2V5KSkgewogICAgICAgICAgICAgICAgIG9w
dGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTsKICAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2Ug
PSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7CiAgICAgICAgICAgICB9CkBAIC00NTQzLDc1ICs0
ODE5LDU4IEBACiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVkV29y
ZChuYW1lKSkgewogICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFy
YW07CiAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVz
ZXJ2ZWRXb3JkOwotICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnBhcmFtU2V0Lmhhcyhu
YW1lKSkgewotICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07
CisgICAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChvcHRpb25zLnBhcmFtU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5z
dHJpY3RlZCA9IHBhcmFtOwogICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3Nh
Z2VzLlN0cmljdFBhcmFtRHVwZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBv
cHRpb25zLnBhcmFtU2V0LnNldChuYW1lLCB0cnVlKTsKKyAgICAgICAgb3B0aW9ucy5wYXJhbVNl
dFtrZXldID0gdHJ1ZTsKICAgICB9CiAKICAgICBmdW5jdGlvbiBwYXJzZVBhcmFtKG9wdGlvbnMp
IHsKLSAgICAgICAgdmFyIHRva2VuLCByZXN0LCBwYXJhbSwgZGVmOworICAgICAgICB2YXIgdG9r
ZW4sIHBhcmFtLCBwYXJhbXMgPSBbXSwgaSwgZGVmOwogCiAgICAgICAgIHRva2VuID0gbG9va2Fo
ZWFkOwogICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICcuLi4nKSB7Ci0gICAgICAgICAgICB0
b2tlbiA9IGxleCgpOwotICAgICAgICAgICAgcmVzdCA9IHRydWU7CisgICAgICAgICAgICBwYXJh
bSA9IHBhcnNlUmVzdEVsZW1lbnQocGFyYW1zKTsKKyAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0o
b3B0aW9ucywgcGFyYW0uYXJndW1lbnQsIHBhcmFtLmFyZ3VtZW50Lm5hbWUpOworICAgICAgICAg
ICAgb3B0aW9ucy5wYXJhbXMucHVzaChwYXJhbSk7CisgICAgICAgICAgICBvcHRpb25zLmRlZmF1
bHRzLnB1c2gobnVsbCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAobWF0Y2goJ1snKSkgewotICAgICAgICAgICAgcGFyYW0gPSBwYXJzZUFycmF5
SW5pdGlhbGlzZXIoKTsKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJh
bWV0ZXIob3B0aW9ucywgcGFyYW0pOwotICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCd7JykpIHsK
LSAgICAgICAgICAgIGlmIChyZXN0KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBwYXJhbSA9IHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTsKLSAgICAgICAgICAg
IHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmll
cigpOwotICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCB0b2tlbiwgdG9rZW4udmFs
dWUpOworICAgICAgICBwYXJhbSA9IHBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcyk7Cisg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW1zW2ldLCBwYXJhbXNbaV0udmFsdWUpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1hdGNoKCc9JykpIHsKLSAgICAgICAgICAgIGlmIChyZXN0
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGxvb2thaGVhZCwgTWVzc2Fn
ZXMuRGVmYXVsdFJlc3RQYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV4
KCk7Ci0gICAgICAgICAgICBkZWYgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAg
ICAgIGlmIChwYXJhbS50eXBlID09PSBTeW50YXguQXNzaWdubWVudFBhdHRlcm4pIHsKKyAgICAg
ICAgICAgIGRlZiA9IHBhcmFtLnJpZ2h0OworICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5sZWZ0
OwogICAgICAgICAgICAgKytvcHRpb25zLmRlZmF1bHRDb3VudDsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChyZXN0KSB7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHsKLSAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5QYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3B0aW9ucy5yZXN0ID0gcGFyYW07Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQogICAgICAgICBvcHRpb25zLnBh
cmFtcy5wdXNoKHBhcmFtKTsKICAgICAgICAgb3B0aW9ucy5kZWZhdWx0cy5wdXNoKGRlZik7CisK
ICAgICAgICAgcmV0dXJuICFtYXRjaCgnKScpOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIHBhcnNl
UGFyYW1zKGZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICB2YXIgb3B0aW9ucywgbWFya2VyID0g
bWFya2VyQ3JlYXRlKCk7CisgICAgICAgIHZhciBvcHRpb25zOwogCiAgICAgICAgIG9wdGlvbnMg
PSB7CiAgICAgICAgICAgICBwYXJhbXM6IFtdLAogICAgICAgICAgICAgZGVmYXVsdENvdW50OiAw
LAogICAgICAgICAgICAgZGVmYXVsdHM6IFtdLAotICAgICAgICAgICAgcmVzdDogbnVsbCwKICAg
ICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogZmlyc3RSZXN0cmljdGVkCiAgICAgICAgIH07CiAK
ICAgICAgICAgZXhwZWN0KCcoJyk7CiAKICAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7Ci0gICAg
ICAgICAgICBvcHRpb25zLnBhcmFtU2V0ID0gbmV3IFN0cmluZ01hcCgpOwotICAgICAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBvcHRpb25zLnBhcmFtU2V0ID0g
e307CisgICAgICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkgewogICAgICAgICAg
ICAgICAgIGlmICghcGFyc2VQYXJhbShvcHRpb25zKSkgewogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00NjI1LDgyICs0ODg0LDkzIEBACiAgICAgICAg
ICAgICBvcHRpb25zLmRlZmF1bHRzID0gW107CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4g
bWFya2VyQXBwbHkobWFya2VyLCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsCisgICAgICAgICAgICBkZWZhdWx0czogb3B0aW9u
cy5kZWZhdWx0cywKKyAgICAgICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVkLAorICAg
ICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCwKKyAgICAg
ICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZQorICAgICAgICB9OwogICAgIH0KIAotICAg
IGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIHsKLSAgICAgICAgdmFyIGlkLCBi
b2R5LCB0b2tlbiwgdG1wLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHByZXZpb3VzU3RyaWN0
LCBwcmV2aW91c1lpZWxkQWxsb3dlZCwgZ2VuZXJhdG9yLAotICAgICAgICAgICAgbWFya2VyID0g
bWFya2VyQ3JlYXRlKCk7CisgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKG5v
ZGUsIGlkZW50aWZpZXJJc09wdGlvbmFsKSB7CisgICAgICAgIHZhciBpZCA9IG51bGwsIHBhcmFt
cyA9IFtdLCBkZWZhdWx0cyA9IFtdLCBib2R5LCB0b2tlbiwgc3RyaWN0ZWQsIHRtcCwgZmlyc3RS
ZXN0cmljdGVkLCBtZXNzYWdlLCBwcmV2aW91c1N0cmljdCwKKyAgICAgICAgICAgIGlzR2VuZXJh
dG9yLCBwcmV2aW91c0FsbG93WWllbGQ7CisKKyAgICAgICAgcHJldmlvdXNBbGxvd1lpZWxkID0g
c3RhdGUuYWxsb3dZaWVsZDsKIAogICAgICAgICBleHBlY3RLZXl3b3JkKCdmdW5jdGlvbicpOwog
Ci0gICAgICAgIGdlbmVyYXRvciA9IGZhbHNlOwotICAgICAgICBpZiAobWF0Y2goJyonKSkgewor
ICAgICAgICBpc0dlbmVyYXRvciA9IG1hdGNoKCcqJyk7CisgICAgICAgIGlmIChpc0dlbmVyYXRv
cikgewogICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IgPSB0cnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0KLSAgICAgICAgaWQgPSBw
YXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwotCi0gICAgICAgIGlmIChzdHJpY3QpIHsKLSAgICAg
ICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1l
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc1Jl
c3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJp
Y3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RG
dW5jdGlvbk5hbWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVk
V29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0
b2tlbjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRX
b3JkOworICAgICAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8ICFtYXRjaCgnKCcpKSB7
CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIGlkID0gcGFyc2VW
YXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1
bmN0aW9uTmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIHN0YXRlLmFsbG93
WWllbGQgPSAhaXNHZW5lcmF0b3I7CiAgICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVz
dHJpY3RlZCk7CisgICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7CisgICAgICAgIGRlZmF1bHRz
ID0gdG1wLmRlZmF1bHRzOworICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKICAgICAg
ICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDsKICAgICAgICAgaWYgKHRt
cC5tZXNzYWdlKSB7CiAgICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7CiAgICAgICAg
IH0KIAotICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKLSAgICAgICAgcHJldmlvdXNZ
aWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7Ci0gICAgICAgIHN0YXRlLnlpZWxkQWxs
b3dlZCA9IGdlbmVyYXRvcjsKIAorICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKICAg
ICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpOwotCiAgICAgICAgIGlm
IChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKGZp
cnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tl
bihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJp
Y3QgJiYgdG1wLnN0cmljdGVkKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG1w
LnN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgaWYgKHN0cmljdCAmJiBzdHJpY3RlZCkgewor
ICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oc3RyaWN0ZWQsIG1lc3NhZ2UpOwog
ICAgICAgICB9CisKICAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7Ci0gICAgICAgIHN0
YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkOworICAgICAgICBzdGF0ZS5h
bGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwogCi0gICAgICAgIHJldHVybiBtYXJrZXJB
cHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHRtcC5w
YXJhbXMsIHRtcC5kZWZhdWx0cywgYm9keSwgdG1wLnJlc3QsIGdlbmVyYXRvciwgZmFsc2UpKTsK
KyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1z
LCBkZWZhdWx0cywgYm9keSwgaXNHZW5lcmF0b3IpOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIHBh
cnNlRnVuY3Rpb25FeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgdG9rZW4sIGlkID0gbnVsbCwg
Zmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlLCB0bXAsIGJvZHksIHByZXZpb3VzU3RyaWN0LCBwcmV2
aW91c1lpZWxkQWxsb3dlZCwgZ2VuZXJhdG9yLAotICAgICAgICAgICAgbWFya2VyID0gbWFya2Vy
Q3JlYXRlKCk7CisgICAgICAgIHZhciB0b2tlbiwgaWQgPSBudWxsLCBzdHJpY3RlZCwgZmlyc3RS
ZXN0cmljdGVkLCBtZXNzYWdlLCB0bXAsCisgICAgICAgICAgICBwYXJhbXMgPSBbXSwgZGVmYXVs
dHMgPSBbXSwgYm9keSwgcHJldmlvdXNTdHJpY3QsIG5vZGUgPSBuZXcgTm9kZSgpLAorICAgICAg
ICAgICAgaXNHZW5lcmF0b3IsIHByZXZpb3VzQWxsb3dZaWVsZDsKIAotICAgICAgICBleHBlY3RL
ZXl3b3JkKCdmdW5jdGlvbicpOworICAgICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0ZS5h
bGxvd1lpZWxkOwogCi0gICAgICAgIGdlbmVyYXRvciA9IGZhbHNlOworICAgICAgICBleHBlY3RL
ZXl3b3JkKCdmdW5jdGlvbicpOwogCi0gICAgICAgIGlmIChtYXRjaCgnKicpKSB7CisgICAgICAg
IGlzR2VuZXJhdG9yID0gbWF0Y2goJyonKTsKKyAgICAgICAgaWYgKGlzR2VuZXJhdG9yKSB7CiAg
ICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIGdlbmVyYXRvciA9IHRydWU7CiAgICAgICAg
IH0KIAorICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gIWlzR2VuZXJhdG9yOwogICAgICAgICBp
ZiAoIW1hdGNoKCcoJykpIHsKICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAg
ICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgaWQgPSAo
IXN0cmljdCAmJiAhaXNHZW5lcmF0b3IgJiYgbWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSA/IHBhcnNl
Tm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIDogcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKICAgICAg
ICAgICAgIGlmIChzdHJpY3QpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29y
ZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgICAgICAg
ICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25O
YW1lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgewpAQCAtNDcxNCwyODAg
KzQ5ODQsNDIwIEBACiAgICAgICAgIH0KIAogICAgICAgICB0bXAgPSBwYXJzZVBhcmFtcyhmaXJz
dFJlc3RyaWN0ZWQpOworICAgICAgICBwYXJhbXMgPSB0bXAucGFyYW1zOworICAgICAgICBkZWZh
dWx0cyA9IHRtcC5kZWZhdWx0czsKKyAgICAgICAgc3RyaWN0ZWQgPSB0bXAuc3RyaWN0ZWQ7CiAg
ICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7CiAgICAgICAgIGlm
ICh0bXAubWVzc2FnZSkgewogICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlOwogICAg
ICAgICB9CiAKICAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7Ci0gICAgICAgIHByZXZp
b3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkOwotICAgICAgICBzdGF0ZS55aWVs
ZEFsbG93ZWQgPSBnZW5lcmF0b3I7Ci0KICAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3Vy
Y2VFbGVtZW50cygpOwotCiAgICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7
Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAg
ICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKyAgICAgICAgICAg
IHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQor
ICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKyAgICAgICAgc3RhdGUuYWxsb3dZaWVs
ZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hGdW5j
dGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHksIGlzR2VuZXJhdG9yKTsK
KyAgICB9CisKKyAgICAvLyBFQ01BLTI2MiAxNC41IENsYXNzIERlZmluaXRpb25zCisKKyAgICBm
dW5jdGlvbiBwYXJzZUNsYXNzQm9keSgpIHsKKyAgICAgICAgdmFyIGNsYXNzQm9keSwgdG9rZW4s
IGlzU3RhdGljLCBoYXNDb25zdHJ1Y3RvciA9IGZhbHNlLCBib2R5LCBtZXRob2QsIGNvbXB1dGVk
LCBrZXk7CisKKyAgICAgICAgY2xhc3NCb2R5ID0gbmV3IE5vZGUoKTsKKworICAgICAgICBleHBl
Y3QoJ3snKTsKKyAgICAgICAgYm9keSA9IFtdOworICAgICAgICB3aGlsZSAoIW1hdGNoKCd9Jykp
IHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnOycpKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1ldGhvZCA9IG5ldyBOb2Rl
KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICAgICAg
aXNTdGF0aWMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKCdbJyk7
CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcqJykpIHsKKyAgICAgICAgICAgICAgICAgICAg
bGV4KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAga2V5
ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoa2V5
Lm5hbWUgPT09ICdzdGF0aWMnICYmIChsb29rYWhlYWRQcm9wZXJ0eU5hbWUoKSB8fCBtYXRjaCgn
KicpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21wdXRlZCA9IG1hdGNoKCdbJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bWF0Y2goJyonKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
ZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbWV0aG9kID0gdHJ5UGFyc2VNZXRob2REZWZpbml0aW9uKHRva2VuLCBrZXksIGNvbXB1dGVk
LCBtZXRob2QpOworICAgICAgICAgICAgICAgIGlmIChtZXRob2QpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbWV0aG9kWydzdGF0aWMnXSA9IGlzU3RhdGljOyAvLyBqc2NzOmlnbm9yZSByZXF1aXJl
RG90Tm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5raW5kID09PSAnaW5p
dCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC5raW5kID0gJ21ldGhvZCc7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N0YXRpYykg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXRob2QuY29tcHV0ZWQgJiYgKG1ldGhv
ZC5rZXkubmFtZSB8fCBtZXRob2Qua2V5LnZhbHVlLnRvU3RyaW5nKCkpID09PSAnY29uc3RydWN0
b3InKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5raW5kICE9PSAn
bWV0aG9kJyB8fCAhbWV0aG9kLm1ldGhvZCB8fCBtZXRob2QudmFsdWUuZ2VuZXJhdG9yKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2Vu
LCBNZXNzYWdlcy5Db25zdHJ1Y3RvclNwZWNpYWxNZXRob2QpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29uc3RydWN0
b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9r
ZW4odG9rZW4sIE1lc3NhZ2VzLkR1cGxpY2F0ZUNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
YXNDb25zdHJ1Y3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC5raW5kID0gJ2NvbnN0cnVjdG9yJzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYmIChtZXRob2Qua2V5
Lm5hbWUgfHwgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSA9PT0gJ3Byb3RvdHlwZScpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbiwg
TWVzc2FnZXMuU3RhdGljUHJvdG90eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtZXRob2QudHlwZSA9IFN5
bnRheC5NZXRob2REZWZpbml0aW9uOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgbWV0aG9k
Lm1ldGhvZDsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1ldGhvZC5zaG9ydGhhbmQ7Cisg
ICAgICAgICAgICAgICAgICAgIGJvZHkucHVzaChtZXRob2QpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVh
ZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGxleCgpOworICAgICAgICByZXR1cm4gY2xhc3NCb2R5LmZpbmlzaENsYXNzQm9keShib2R5KTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUNsYXNzRGVjbGFyYXRpb24oaWRlbnRpZmllcklz
T3B0aW9uYWwpIHsKKyAgICAgICAgdmFyIGlkID0gbnVsbCwgc3VwZXJDbGFzcyA9IG51bGwsIGNs
YXNzTm9kZSA9IG5ldyBOb2RlKCksIGNsYXNzQm9keSwgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7
CisgICAgICAgIHN0cmljdCA9IHRydWU7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnY2xhc3Mn
KTsKKworICAgICAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8IGxvb2thaGVhZC50eXBl
ID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJ
ZGVudGlmaWVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdleHRl
bmRzJykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgc3VwZXJDbGFzcyA9IGlz
b2xhdGVDb3ZlckdyYW1tYXIocGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKTsK
KyAgICAgICAgfQorICAgICAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpOworICAgICAg
ICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKworICAgICAgICByZXR1cm4gY2xhc3NOb2RlLmZp
bmlzaENsYXNzRGVjbGFyYXRpb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9keSk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcGFyc2VDbGFzc0V4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBpZCA9
IG51bGwsIHN1cGVyQ2xhc3MgPSBudWxsLCBjbGFzc05vZGUgPSBuZXcgTm9kZSgpLCBjbGFzc0Jv
ZHksIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OworICAgICAgICBzdHJpY3QgPSB0cnVlOworCisg
ICAgICAgIGV4cGVjdEtleXdvcmQoJ2NsYXNzJyk7CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50
eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFi
bGVJZGVudGlmaWVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdl
eHRlbmRzJykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgc3VwZXJDbGFzcyA9
IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxs
KTsKKyAgICAgICAgfQorICAgICAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpOworICAg
ICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKworICAgICAgICByZXR1cm4gY2xhc3NOb2Rl
LmZpbmlzaENsYXNzRXhwcmVzc2lvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KTsKKyAgICB9
CisKKyAgICAvLyBFQ01BLTI2MiAxNS4yIE1vZHVsZXMKKworICAgIGZ1bmN0aW9uIHBhcnNlTW9k
dWxlU3BlY2lmaWVyKCkgeworICAgICAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCk7CisKKyAgICAg
ICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLkludmFsaWRNb2R1bGVTcGVjaWZpZXIpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaExpdGVyYWwobGV4KCkpOworICAgIH0KKwor
ICAgIC8vIEVDTUEtMjYyIDE1LjIuMyBFeHBvcnRzCisKKyAgICBmdW5jdGlvbiBwYXJzZUV4cG9y
dFNwZWNpZmllcigpIHsKKyAgICAgICAgdmFyIGV4cG9ydGVkLCBsb2NhbCwgbm9kZSA9IG5ldyBO
b2RlKCksIGRlZjsKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7CisgICAg
ICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9IGZyb20gJ3NvbWV0aGluZyc7CisgICAgICAgICAg
ICBkZWYgPSBuZXcgTm9kZSgpOworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBsb2Nh
bCA9IGRlZi5maW5pc2hJZGVudGlmaWVyKCdkZWZhdWx0Jyk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBsb2NhbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKKyAgICAgICAgICAg
IGxleCgpOworICAgICAgICAgICAgZXhwb3J0ZWQgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHko
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnRTcGVjaWZpZXIo
bG9jYWwsIGV4cG9ydGVkKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydE5hbWVk
RGVjbGFyYXRpb24obm9kZSkgeworICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSBudWxsLAorICAg
ICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciwKKyAgICAgICAgICAgIHNyYyA9IG51bGws
IHNwZWNpZmllcnMgPSBbXTsKKworICAgICAgICAvLyBub24tZGVmYXVsdCBleHBvcnQKKyAgICAg
ICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICAv
LyBjb3ZlcnM6CisgICAgICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxOworICAgICAgICAgICAg
c3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAgICAgICBjYXNlICdsZXQnOgor
ICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnN0JzoKKyAgICAgICAgICAgICAgICBjYXNlICd2YXIn
OgorICAgICAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzoKKyAgICAgICAgICAgICAgICBjYXNlICdm
dW5jdGlvbic6CisgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VTdGF0ZW1l
bnRMaXN0SXRlbSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBv
cnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBudWxsKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoc3RyaWN0ICYmIHRtcC5zdHJpY3RlZCkg
ewotICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5zdHJpY3RlZCwgbWVzc2FnZSk7
CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisgICAgICAgIHdoaWxlICghbWF0Y2goJ30nKSkgewor
ICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0RnJvbUlkZW50aWZp
ZXIgfHwgbWF0Y2hLZXl3b3JkKCdkZWZhdWx0Jyk7CisgICAgICAgICAgICBzcGVjaWZpZXJzLnB1
c2gocGFyc2VFeHBvcnRTcGVjaWZpZXIoKSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCd9Jykp
IHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0
Y2goJ30nKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJp
Y3Q7Ci0gICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkOwor
ICAgICAgICBleHBlY3QoJ30nKTsKIAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2Vy
LCBkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHRtcC5wYXJhbXMsIHRtcC5k
ZWZhdWx0cywgYm9keSwgdG1wLnJlc3QsIGdlbmVyYXRvciwgZmFsc2UpKTsKKyAgICAgICAgaWYg
KG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkgeworICAgICAgICAgICAgLy8gY292ZXJp
bmc6CisgICAgICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9IGZyb20gJ2Zvbyc7CisgICAgICAg
ICAgICAvLyBleHBvcnQge2Zvb30gZnJvbSAnZm9vJzsKKyAgICAgICAgICAgIGxleCgpOworICAg
ICAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKKyAgICAgICAgICAgIGNvbnN1
bWVTZW1pY29sb24oKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0V4cG9ydEZyb21JZGVudGlmaWVy
KSB7CisgICAgICAgICAgICAvLyBjb3ZlcmluZzoKKyAgICAgICAgICAgIC8vIGV4cG9ydCB7ZGVm
YXVsdH07IC8vIG1pc3NpbmcgZnJvbUNsYXVzZQorICAgICAgICAgICAgdGhyb3dFcnJvcihsb29r
YWhlYWQudmFsdWUgPworICAgICAgICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGNvdmVyCisgICAgICAgICAgICAvLyBleHBvcnQg
e2Zvb307CisgICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwg
c3BlY2lmaWVycywgc3JjKTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBwYXJzZVlpZWxkRXhwcmVz
c2lvbigpIHsKLSAgICAgICAgdmFyIHlpZWxkVG9rZW4sIGRlbGVnYXRlRmxhZywgZXhwciwgbWFy
a2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgZnVuY3Rpb24gcGFyc2VFeHBvcnREZWZhdWx0RGVj
bGFyYXRpb24obm9kZSkgeworICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSBudWxsLAorICAgICAg
ICAgICAgZXhwcmVzc2lvbiA9IG51bGw7CiAKLSAgICAgICAgeWllbGRUb2tlbiA9IGxleCgpOwot
ICAgICAgICBhc3NlcnQoeWllbGRUb2tlbi52YWx1ZSA9PT0gJ3lpZWxkJywgJ0NhbGxlZCBwYXJz
ZVlpZWxkRXhwcmVzc2lvbiB3aXRoIG5vbi15aWVsZCBsb29rYWhlYWQuJyk7CisgICAgICAgIC8v
IGNvdmVyczoKKyAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgLi4uCisgICAgICAgIGV4cGVjdEtl
eXdvcmQoJ2RlZmF1bHQnKTsKIAotICAgICAgICBpZiAoIXN0YXRlLnlpZWxkQWxsb3dlZCkgewot
ICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2FsWWllbGQp
OworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7CisgICAgICAgICAgICAv
LyBjb3ZlcnM6CisgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb28gKCkg
e30KKyAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHt9CisgICAgICAg
ICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihuZXcgTm9kZSgpLCB0
cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydERlZmF1bHREZWNsYXJh
dGlvbihkZWNsYXJhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgn
Y2xhc3MnKSkgeworICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZUNsYXNzRGVjbGFyYXRp
b24odHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnREZWZhdWx0RGVj
bGFyYXRpb24oZGVjbGFyYXRpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgZGVsZWdhdGVGbGFn
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChtYXRjaCgnKicpKSB7Ci0gICAgICAgICAgICBsZXgoKTsK
LSAgICAgICAgICAgIGRlbGVnYXRlRmxhZyA9IHRydWU7CisgICAgICAgIGlmIChtYXRjaENvbnRl
eHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCBsb29rYWhlYWQudmFsdWUpOwogICAgICAgICB9CiAKLSAgICAgICAg
ZXhwciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLQotICAgICAgICByZXR1cm4gbWFy
a2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVZaWVsZEV4cHJlc3Npb24oZXhwciwgZGVs
ZWdhdGVGbGFnKSk7CisgICAgICAgIC8vIGNvdmVyczoKKyAgICAgICAgLy8gZXhwb3J0IGRlZmF1
bHQge307CisgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IFtdOworICAgICAgICAvLyBleHBvcnQg
ZGVmYXVsdCAoMSArIDIpOworICAgICAgICBpZiAobWF0Y2goJ3snKSkgeworICAgICAgICAgICAg
ZXhwcmVzc2lvbiA9IHBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIoKTsKKyAgICAgICAgfSBlbHNlIGlm
IChtYXRjaCgnWycpKSB7CisgICAgICAgICAgICBleHByZXNzaW9uID0gcGFyc2VBcnJheUluaXRp
YWxpemVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleHByZXNzaW9uID0gcGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICB9CisgICAgICAgIGNvbnN1bWVTZW1p
Y29sb24oKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0RGVmYXVsdERlY2xhcmF0
aW9uKGV4cHJlc3Npb24pOwogICAgIH0KIAotICAgIC8vIDE0IEZ1bmN0aW9ucyBhbmQgY2xhc3Nl
cworICAgIGZ1bmN0aW9uIHBhcnNlRXhwb3J0QWxsRGVjbGFyYXRpb24obm9kZSkgeworICAgICAg
ICB2YXIgc3JjOwogCi0gICAgLy8gMTQuMSBGdW5jdGlvbnMgaXMgZGVmaW5lZCBhYm92ZSAoMTMg
aW4gRVM1KQotICAgIC8vIDE0LjIgQXJyb3cgRnVuY3Rpb25zIERlZmluaXRpb25zIGlzIGRlZmlu
ZWQgaW4gKDcuMyBhc3NpZ25tZW50cykKKyAgICAgICAgLy8gY292ZXJzOgorICAgICAgICAvLyBl
eHBvcnQgKiBmcm9tICdmb28nOworICAgICAgICBleHBlY3QoJyonKTsKKyAgICAgICAgaWYgKCFt
YXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Io
bG9va2FoZWFkLnZhbHVlID8KKyAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBlY3Rl
ZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVhZC52YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgbGV4KCk7CisgICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lm
aWVyKCk7CisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKIAotICAgIC8vIDE0LjMgTWV0aG9k
IERlZmluaXRpb25zCi0gICAgLy8gMTQuMy43Ci0gICAgZnVuY3Rpb24gc3BlY2lhbE1ldGhvZCht
ZXRob2REZWZpbml0aW9uKSB7Ci0gICAgICAgIHJldHVybiBtZXRob2REZWZpbml0aW9uLmtpbmQg
PT09ICdnZXQnIHx8Ci0gICAgICAgICAgICBtZXRob2REZWZpbml0aW9uLmtpbmQgPT09ICdzZXQn
IHx8Ci0gICAgICAgICAgICBtZXRob2REZWZpbml0aW9uLnZhbHVlLmdlbmVyYXRvcjsKKyAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0QWxsRGVjbGFyYXRpb24oc3JjKTsKICAgICB9CiAK
LSAgICBmdW5jdGlvbiBwYXJzZU1ldGhvZERlZmluaXRpb24oKSB7Ci0gICAgICAgIHZhciB0b2tl
biwga2V5LCBwYXJhbSwgcHJvcFR5cGUsIGNvbXB1dGVkLAotICAgICAgICAgICAgbWFya2VyID0g
bWFya2VyQ3JlYXRlKCk7Ci0KLSAgICAgICAgaWYgKGxvb2thaGVhZC52YWx1ZSA9PT0gJ3N0YXRp
YycpIHsKLSAgICAgICAgICAgIHByb3BUeXBlID0gQ2xhc3NQcm9wZXJ0eVR5cGUuc3RhdGljOwot
ICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcm9wVHlw
ZSA9IENsYXNzUHJvcGVydHlUeXBlLnByb3RvdHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtYXRjaCgnKicpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIGNvbXB1dGVk
ID0gKGxvb2thaGVhZC52YWx1ZSA9PT0gJ1snKTsKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJB
cHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZU1ldGhvZERlZmluaXRpb24oCi0gICAgICAgICAg
ICAgICAgcHJvcFR5cGUsCi0gICAgICAgICAgICAgICAgJycsCi0gICAgICAgICAgICAgICAgcGFy
c2VPYmplY3RQcm9wZXJ0eUtleSgpLAotICAgICAgICAgICAgICAgIHBhcnNlUHJvcGVydHlNZXRo
b2RGdW5jdGlvbih7IGdlbmVyYXRvcjogdHJ1ZSB9KSwKLSAgICAgICAgICAgICAgICBjb21wdXRl
ZAotICAgICAgICAgICAgKSk7CisgICAgZnVuY3Rpb24gcGFyc2VFeHBvcnREZWNsYXJhdGlvbigp
IHsKKyAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpOworICAgICAgICBpZiAoc3RhdGUuaW5G
dW5jdGlvbkJvZHkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuSWxsZWdhbEV4
cG9ydERlY2xhcmF0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIHRva2VuID0gbG9va2FoZWFk
OwotICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0KLSAgICAgICAgaWYg
KHRva2VuLnZhbHVlID09PSAnZ2V0JyAmJiAhbWF0Y2goJygnKSkgewotICAgICAgICAgICAgY29t
cHV0ZWQgPSAobG9va2FoZWFkLnZhbHVlID09PSAnWycpOwotICAgICAgICAgICAga2V5ID0gcGFy
c2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAgICBleHBlY3RLZXl3b3JkKCdleHBvcnQnKTsK
IAotICAgICAgICAgICAgZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICBleHBlY3QoJyknKTsKLSAg
ICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZU1ldGhv
ZERlZmluaXRpb24oCi0gICAgICAgICAgICAgICAgcHJvcFR5cGUsCi0gICAgICAgICAgICAgICAg
J2dldCcsCi0gICAgICAgICAgICAgICAga2V5LAotICAgICAgICAgICAgICAgIHBhcnNlUHJvcGVy
dHlGdW5jdGlvbih7IGdlbmVyYXRvcjogZmFsc2UgfSksCi0gICAgICAgICAgICAgICAgY29tcHV0
ZWQKLSAgICAgICAgICAgICkpOworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0Jykp
IHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2Rl
KTsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdzZXQnICYmICFtYXRj
aCgnKCcpKSB7Ci0gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09ICdb
Jyk7Ci0gICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0KLSAgICAg
ICAgICAgIGV4cGVjdCgnKCcpOwotICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAg
ICAgICAgICBwYXJhbSA9IFsgcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSBdOwotICAgICAgICAg
ICAgZXhwZWN0KCcpJyk7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBk
ZWxlZ2F0ZS5jcmVhdGVNZXRob2REZWZpbml0aW9uKAotICAgICAgICAgICAgICAgIHByb3BUeXBl
LAotICAgICAgICAgICAgICAgICdzZXQnLAotICAgICAgICAgICAgICAgIGtleSwKLSAgICAgICAg
ICAgICAgICBwYXJzZVByb3BlcnR5RnVuY3Rpb24oeyBwYXJhbXM6IHBhcmFtLCBnZW5lcmF0b3I6
IGZhbHNlLCBuYW1lOiB0b2tlbiB9KSwKLSAgICAgICAgICAgICAgICBjb21wdXRlZAotICAgICAg
ICAgICAgKSk7CisgICAgICAgIGlmIChtYXRjaCgnKicpKSB7CisgICAgICAgICAgICByZXR1cm4g
cGFyc2VFeHBvcnRBbGxEZWNsYXJhdGlvbihub2RlKTsKICAgICAgICAgfQotCi0gICAgICAgIGNv
bXB1dGVkID0gKHRva2VuLnZhbHVlID09PSAnWycpOwotCi0gICAgICAgIHJldHVybiBtYXJrZXJB
cHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZU1ldGhvZERlZmluaXRpb24oCi0gICAgICAgICAg
ICBwcm9wVHlwZSwKLSAgICAgICAgICAgICcnLAotICAgICAgICAgICAga2V5LAotICAgICAgICAg
ICAgcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKHsgZ2VuZXJhdG9yOiBmYWxzZSB9KSwKLSAg
ICAgICAgICAgIGNvbXB1dGVkCi0gICAgICAgICkpOworICAgICAgICByZXR1cm4gcGFyc2VFeHBv
cnROYW1lZERlY2xhcmF0aW9uKG5vZGUpOwogICAgIH0KIAotICAgIC8vIDE0LjUgQ2xhc3MgRGVm
aW5pdGlvbnMKKyAgICAvLyBFQ01BLTI2MiAxNS4yLjIgSW1wb3J0cwogCi0gICAgZnVuY3Rpb24g
cGFyc2VDbGFzc0VsZW1lbnQoKSB7Ci0gICAgICAgIGlmIChtYXRjaCgnOycpKSB7CisgICAgZnVu
Y3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7CisgICAgICAgIC8vIGltcG9ydCB7PGZvbyBh
cyBiYXI+fSAuLi47CisgICAgICAgIHZhciBsb2NhbCwgaW1wb3J0ZWQsIG5vZGUgPSBuZXcgTm9k
ZSgpOworCisgICAgICAgIGltcG9ydGVkID0gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7Cisg
ICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7CiAgICAgICAgICAgICBs
ZXgoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZU1ldGhvZERl
ZmluaXRpb24oKTsKKyAgICAgICAgICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIo
KTsKICAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlQ2xhc3NCb2R5KCkgewot
ICAgICAgICB2YXIgY2xhc3NFbGVtZW50LCBjbGFzc0VsZW1lbnRzID0gW10sIGV4aXN0aW5nUHJv
cHMgPSB7fSwKLSAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLCBwcm9wTmFtZSwg
cHJvcFR5cGU7CiAKLSAgICAgICAgZXhpc3RpbmdQcm9wc1tDbGFzc1Byb3BlcnR5VHlwZS5zdGF0
aWNdID0gbmV3IFN0cmluZ01hcCgpOwotICAgICAgICBleGlzdGluZ1Byb3BzW0NsYXNzUHJvcGVy
dHlUeXBlLnByb3RvdHlwZV0gPSBuZXcgU3RyaW5nTWFwKCk7CisgICAgICAgIHJldHVybiBub2Rl
LmZpbmlzaEltcG9ydFNwZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpOworICAgIH0KIAorICAgIGZ1
bmN0aW9uIHBhcnNlTmFtZWRJbXBvcnRzKCkgeworICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtd
OworICAgICAgICAvLyB7Zm9vLCBiYXIgYXMgYmFzfQogICAgICAgICBleHBlY3QoJ3snKTsKLQot
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaCgn
fScpKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBjbGFzc0VsZW1lbnQgPSBwYXJzZUNsYXNzRWxlbWVudChleGlzdGluZ1Byb3BzKTsKLQotICAg
ICAgICAgICAgaWYgKHR5cGVvZiBjbGFzc0VsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAg
ICAgICAgICAgICAgY2xhc3NFbGVtZW50cy5wdXNoKGNsYXNzRWxlbWVudCk7Ci0KLSAgICAgICAg
ICAgICAgICBwcm9wTmFtZSA9ICFjbGFzc0VsZW1lbnQuY29tcHV0ZWQgJiYgZ2V0RmllbGROYW1l
KGNsYXNzRWxlbWVudC5rZXkpOwotICAgICAgICAgICAgICAgIGlmIChwcm9wTmFtZSAhPT0gZmFs
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcFR5cGUgPSBjbGFzc0VsZW1lbnQuc3RhdGlj
ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NQcm9wZXJ0eVR5cGUuc3Rh
dGljIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NQcm9wZXJ0eVR5cGUu
cHJvdG90eXBlOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2NvbnN0
cnVjdG9yJyAmJiAhY2xhc3NFbGVtZW50LnN0YXRpYykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNwZWNpYWxNZXRob2QoY2xhc3NFbGVtZW50KSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRocm93RXJyb3IoY2xhc3NFbGVtZW50LCBNZXNzYWdlcy5JbGxlZ2FsQ2xhc3ND
b25zdHJ1Y3RvclByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1Byb3BzW0NsYXNzUHJvcGVydHlUeXBlLnByb3Rv
dHlwZV0uaGFzKCdjb25zdHJ1Y3RvcicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcihjbGFzc0VsZW1lbnQua2V5LCBNZXNzYWdlcy5JbGxlZ2FsRHVwbGljYXRlQ2xh
c3NQcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdQcm9wc1twcm9wVHlwZV0uc2V0KHBy
b3BOYW1lLCB0cnVlKTsKKyAgICAgICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7CisgICAgICAgICAg
ICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnRTcGVjaWZpZXIoKSk7CisgICAgICAgICAgICBp
ZiAoIW1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAg
ICAgICAgICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAgICBleHBl
Y3QoJ30nKTsKLQotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5j
cmVhdGVDbGFzc0JvZHkoY2xhc3NFbGVtZW50cykpOworICAgICAgICByZXR1cm4gc3BlY2lmaWVy
czsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBwYXJzZUNsYXNzRXhwcmVzc2lvbigpIHsKLSAgICAg
ICAgdmFyIGlkLCBwcmV2aW91c1lpZWxkQWxsb3dlZCwgc3VwZXJDbGFzcyA9IG51bGwsIG1hcmtl
ciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNp
ZmllcigpIHsKKyAgICAgICAgLy8gaW1wb3J0IDxmb28+IC4uLjsKKyAgICAgICAgdmFyIGxvY2Fs
LCBub2RlID0gbmV3IE5vZGUoKTsKIAotICAgICAgICBleHBlY3RLZXl3b3JkKCdjbGFzcycpOwor
ICAgICAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOwogCi0gICAgICAgIGlm
ICghbWF0Y2hLZXl3b3JkKCdleHRlbmRzJykgJiYgIW1hdGNoKCd7JykpIHsKLSAgICAgICAgICAg
IGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgfQorICAgICAgICByZXR1
cm4gbm9kZS5maW5pc2hJbXBvcnREZWZhdWx0U3BlY2lmaWVyKGxvY2FsKTsKKyAgICB9CiAKLSAg
ICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZXh0ZW5kcycpKSB7Ci0gICAgICAgICAgICBleHBlY3RL
ZXl3b3JkKCdleHRlbmRzJyk7Ci0gICAgICAgICAgICBwcmV2aW91c1lpZWxkQWxsb3dlZCA9IHN0
YXRlLnlpZWxkQWxsb3dlZDsKLSAgICAgICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGZhbHNl
OwotICAgICAgICAgICAgc3VwZXJDbGFzcyA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsK
LSAgICAgICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkOwor
ICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkgeworICAgICAgICAv
LyBpbXBvcnQgPCogYXMgZm9vPiAuLi47CisgICAgICAgIHZhciBsb2NhbCwgbm9kZSA9IG5ldyBO
b2RlKCk7CisKKyAgICAgICAgZXhwZWN0KCcqJyk7CisgICAgICAgIGlmICghbWF0Y2hDb250ZXh0
dWFsS2V5d29yZCgnYXMnKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5Ob0Fz
QWZ0ZXJJbXBvcnROYW1lc3BhY2UpOwogICAgICAgICB9CisgICAgICAgIGxleCgpOworICAgICAg
ICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOwogCi0gICAgICAgIHJldHVybiBt
YXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUNsYXNzRXhwcmVzc2lvbihpZCwgc3Vw
ZXJDbGFzcywgcGFyc2VDbGFzc0JvZHkoKSkpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hJ
bXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobG9jYWwpOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHBh
cnNlQ2xhc3NEZWNsYXJhdGlvbigpIHsKLSAgICAgICAgdmFyIGlkLCBwcmV2aW91c1lpZWxkQWxs
b3dlZCwgc3VwZXJDbGFzcyA9IG51bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwotCi0gICAg
ICAgIGV4cGVjdEtleXdvcmQoJ2NsYXNzJyk7Ci0KLSAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxl
SWRlbnRpZmllcigpOworICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKSB7Cisg
ICAgICAgIHZhciBzcGVjaWZpZXJzID0gW10sIHNyYywgbm9kZSA9IG5ldyBOb2RlKCk7CiAKLSAg
ICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZXh0ZW5kcycpKSB7Ci0gICAgICAgICAgICBleHBlY3RL
ZXl3b3JkKCdleHRlbmRzJyk7Ci0gICAgICAgICAgICBwcmV2aW91c1lpZWxkQWxsb3dlZCA9IHN0
YXRlLnlpZWxkQWxsb3dlZDsKLSAgICAgICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGZhbHNl
OwotICAgICAgICAgICAgc3VwZXJDbGFzcyA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsK
LSAgICAgICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkOwor
ICAgICAgICBpZiAoc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKKyAgICAgICAgICAgIHRocm93RXJy
b3IoTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUNsYXNzRGVjbGFy
YXRpb24oaWQsIHN1cGVyQ2xhc3MsIHBhcnNlQ2xhc3NCb2R5KCkpKTsKLSAgICB9CisgICAgICAg
IGV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpOwogCi0gICAgLy8gMTUgUHJvZ3JhbQorICAgICAgICBp
ZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKyAgICAgICAgICAg
IC8vIGltcG9ydCAnZm9vJzsKKyAgICAgICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVy
KCk7CisgICAgICAgIH0gZWxzZSB7CiAKLSAgICBmdW5jdGlvbiBwYXJzZVNvdXJjZUVsZW1lbnQo
KSB7Ci0gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewotICAg
ICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKLSAgICAgICAgICAgIGNhc2UgJ2Nv
bnN0JzoKLSAgICAgICAgICAgIGNhc2UgJ2xldCc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlQ29uc3RMZXREZWNsYXJhdGlvbihsb29rYWhlYWQudmFsdWUpOwotICAgICAgICAgICAgY2Fz
ZSAnZnVuY3Rpb24nOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFy
YXRpb24oKTsKLSAgICAgICAgICAgIGNhc2UgJ2V4cG9ydCc6Ci0gICAgICAgICAgICAgICAgdGhy
b3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pOwot
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7Ci0gICAgICAg
ICAgICBjYXNlICdpbXBvcnQnOgotICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7
fSwgTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VJbXBvcnREZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICht
YXRjaCgneycpKSB7CisgICAgICAgICAgICAgICAgLy8gaW1wb3J0IHtiYXJ9CisgICAgICAgICAg
ICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHBhcnNlTmFtZWRJbXBvcnRzKCkp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKicpKSB7CisgICAgICAgICAgICAgICAg
Ly8gaW1wb3J0ICogYXMgZm9vCisgICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNl
SW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0lk
ZW50aWZpZXJOYW1lKGxvb2thaGVhZCkgJiYgIW1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZvbworICAgICAgICAgICAgICAgIHNwZWNpZmllcnMu
cHVzaChwYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIoKSk7CisgICAgICAgICAgICAgICAgaWYg
KG1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtYXRjaCgnKicpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBv
cnQgZm9vLCAqIGFzIGZvbworICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNo
KHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKG1hdGNoKCd7JykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9y
dCBmb28sIHtiYXJ9CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXJzID0gc3BlY2lm
aWVycy5jb25jYXQocGFyc2VOYW1lZEltcG9ydHMoKSk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29r
YWhlYWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsZXgo
KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9va2FoZWFkLnR5
cGUgIT09IFRva2VuLkVPRikgewotICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RhdGVtZW50KCk7
Ci0gICAgICAgIH0KLSAgICB9CiAKLSAgICBmdW5jdGlvbiBwYXJzZVByb2dyYW1FbGVtZW50KCkg
ewotICAgICAgICBpZiAoZXh0cmEuaXNNb2R1bGUgJiYgbG9va2FoZWFkLnR5cGUgPT09IFRva2Vu
LktleXdvcmQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7Ci0gICAg
ICAgICAgICBjYXNlICdleHBvcnQnOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9y
dERlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICBjYXNlICdpbXBvcnQnOgotICAgICAgICAgICAg
ICAgIHJldHVybiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBpZiAoIW1h
dGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJy
b3IobG9va2FoZWFkLnZhbHVlID8KKyAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVu
ZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhlYWQudmFs
dWUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBzcmMg
PSBwYXJzZU1vZHVsZVNwZWNpZmllcigpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHBh
cnNlU291cmNlRWxlbWVudCgpOworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisgICAgICAg
IHJldHVybiBub2RlLmZpbmlzaEltcG9ydERlY2xhcmF0aW9uKHNwZWNpZmllcnMsIHNyYyk7CiAg
ICAgfQogCi0gICAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtRWxlbWVudHMoKSB7Ci0gICAgICAgIHZh
ciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBm
aXJzdFJlc3RyaWN0ZWQ7CisgICAgLy8gRUNNQS0yNjIgMTUuMSBTY3JpcHRzCiAKLSAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgZnVuY3Rpb24gcGFyc2VTY3JpcHRCb2R5KCkg
eworICAgICAgICB2YXIgc3RhdGVtZW50LCBib2R5ID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZp
cnN0UmVzdHJpY3RlZDsKKworICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkgewog
ICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CiAgICAgICAgICAgICBpZiAodG9rZW4udHlw
ZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VQcm9ncmFtRWxl
bWVudCgpOwotICAgICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsK
LSAgICAgICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4
LkxpdGVyYWwpIHsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50TGlzdEl0
ZW0oKTsKKyAgICAgICAgICAgIGJvZHkucHVzaChzdGF0ZW1lbnQpOworICAgICAgICAgICAgaWYg
KHN0YXRlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7CiAgICAgICAg
ICAgICAgICAgLy8gdGhpcyBpcyBub3QgZGlyZWN0aXZlCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xpY2UodG9r
ZW4ucmFuZ2VbMF0gKyAxLCB0b2tlbi5yYW5nZVsxXSAtIDEpOworICAgICAgICAgICAgZGlyZWN0
aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7CiAgICAg
ICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNlIHN0cmljdCcpIHsKICAgICAgICAgICAgICAg
ICBzdHJpY3QgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwg
TWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAgICAgICAgICAgICAgdG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExp
dGVyYWwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHsKQEAgLTQ5OTYs
MTAzICs1NDA2LDI1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB3aGls
ZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVBy
b2dyYW1FbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZUVsZW1lbnQgPT09
ICd1bmRlZmluZWQnKSB7CisgICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7Cisg
ICAgICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7CisgICAgICAg
ICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8KKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc3Rh
dGVtZW50ID09PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsK
KyAgICAgICAgICAgIGJvZHkucHVzaChzdGF0ZW1lbnQpOwogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBzb3VyY2VFbGVtZW50czsKKyAgICAgICAgcmV0dXJuIGJvZHk7CiAgICAgfQogCiAgICAg
ZnVuY3Rpb24gcGFyc2VQcm9ncmFtKCkgewotICAgICAgICB2YXIgYm9keSwgbWFya2VyID0gbWFy
a2VyQ3JlYXRlKCk7Ci0gICAgICAgIHN0cmljdCA9ICEhZXh0cmEuaXNNb2R1bGU7Ci0gICAgICAg
IHBlZWsoKTsKLSAgICAgICAgYm9keSA9IHBhcnNlUHJvZ3JhbUVsZW1lbnRzKCk7Ci0gICAgICAg
IHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVByb2dyYW0oYm9keSkp
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNvbGxlY3RUb2tlbigpIHsKLSAgICAgICAgdmFyIGxv
YywgdG9rZW4sIHJhbmdlLCB2YWx1ZSwgZW50cnk7Ci0KLSAgICAgICAgc2tpcENvbW1lbnQoKTsK
LSAgICAgICAgbG9jID0gewotICAgICAgICAgICAgc3RhcnQ6IHsKLSAgICAgICAgICAgICAgICBs
aW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3Rh
cnQKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB0b2tlbiA9IGV4dHJhLmFk
dmFuY2UoKTsKLSAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1i
ZXIsCi0gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLkVPRikgewotICAgICAgICAgICAgcmFu
Z2UgPSBbdG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdXTsKLSAgICAgICAgICAgIHZhbHVl
ID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdLCB0b2tlbi5yYW5nZVsxXSk7Ci0gICAgICAg
ICAgICBlbnRyeSA9IHsKLSAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbk5hbWVbdG9rZW4udHlw
ZV0sCi0gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAotICAgICAgICAgICAgICAgIHJhbmdl
OiByYW5nZSwKLSAgICAgICAgICAgICAgICBsb2M6IGxvYwotICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgIGlmICh0b2tlbi5yZWdleCkgewotICAgICAgICAgICAgICAgIGVudHJ5LnJlZ2V4ID0g
ewotICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiB0b2tlbi5yZWdleC5wYXR0ZXJuLAotICAg
ICAgICAgICAgICAgICAgICBmbGFnczogdG9rZW4ucmVnZXguZmxhZ3MKLSAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goZW50cnkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIGNvbGxlY3RSZWdleCgpIHsKLSAgICAgICAgdmFyIHBvcywgbG9jLCByZWdleCwgdG9rZW47
Ci0KLSAgICAgICAgc2tpcENvbW1lbnQoKTsKLQotICAgICAgICBwb3MgPSBpbmRleDsKLSAgICAg
ICAgbG9jID0gewotICAgICAgICAgICAgc3RhcnQ6IHsKLSAgICAgICAgICAgICAgICBsaW5lOiBs
aW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICByZWdleCA9IGV4dHJhLnNjYW5SZWdF
eHAoKTsKLSAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIs
Ci0gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgaWYgKCFleHRyYS50b2tlbml6ZSkgewotICAgICAgICAgICAgLyogaXN0YW5idWwgaWdu
b3JlIG5leHQgKi8KLSAgICAgICAgICAgIC8vIFBvcCB0aGUgcHJldmlvdXMgdG9rZW4sIHdoaWNo
IGlzIGxpa2VseSAnLycgb3IgJy89JwotICAgICAgICAgICAgaWYgKGV4dHJhLnRva2Vucy5sZW5n
dGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9r
ZW5zLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgICAgIGlmICh0b2tlbi5yYW5nZVswXSA9PT0g
cG9zICYmIHRva2VuLnR5cGUgPT09ICdQdW5jdHVhdG9yJykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAodG9rZW4udmFsdWUgPT09ICcvJyB8fCB0b2tlbi52YWx1ZSA9PT0gJy89JykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zLnBvcCgpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICB2YXIgYm9k
eSwgbm9kZTsKIAotICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goewotICAgICAgICAgICAg
ICAgIHR5cGU6ICdSZWd1bGFyRXhwcmVzc2lvbicsCi0gICAgICAgICAgICAgICAgdmFsdWU6IHJl
Z2V4LmxpdGVyYWwsCi0gICAgICAgICAgICAgICAgcmVnZXg6IHJlZ2V4LnJlZ2V4LAotICAgICAg
ICAgICAgICAgIHJhbmdlOiBbcG9zLCBpbmRleF0sCi0gICAgICAgICAgICAgICAgbG9jOiBsb2MK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgIHBlZWsoKTsKKyAgICAgICAgbm9k
ZSA9IG5ldyBOb2RlKCk7CiAKLSAgICAgICAgcmV0dXJuIHJlZ2V4OworICAgICAgICBib2R5ID0g
cGFyc2VTY3JpcHRCb2R5KCk7CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb2dyYW0oYm9k
eSwgc3RhdGUuc291cmNlVHlwZSk7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gZmlsdGVyVG9rZW5M
b2NhdGlvbigpIHsKQEAgLTUxMjIsNDggKzU0NTQsOCBAQAogICAgICAgICBleHRyYS50b2tlbnMg
PSB0b2tlbnM7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gcGF0Y2goKSB7Ci0gICAgICAgIGlmICh0
eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgZXh0cmEu
YWR2YW5jZSA9IGFkdmFuY2U7Ci0gICAgICAgICAgICBleHRyYS5zY2FuUmVnRXhwID0gc2NhblJl
Z0V4cDsKLQotICAgICAgICAgICAgYWR2YW5jZSA9IGNvbGxlY3RUb2tlbjsKLSAgICAgICAgICAg
IHNjYW5SZWdFeHAgPSBjb2xsZWN0UmVnZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiB1bnBhdGNoKCkgewotICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnNjYW5SZWdFeHAgPT09
ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgIGFkdmFuY2UgPSBleHRyYS5hZHZhbmNlOwotICAg
ICAgICAgICAgc2NhblJlZ0V4cCA9IGV4dHJhLnNjYW5SZWdFeHA7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBUaGlzIGlzIHVzZWQgdG8gbW9kaWZ5IHRoZSBkZWxlZ2F0ZS4KLQotICAgIGZ1
bmN0aW9uIGV4dGVuZChvYmplY3QsIHByb3BlcnRpZXMpIHsKLSAgICAgICAgdmFyIGVudHJ5LCBy
ZXN1bHQgPSB7fTsKLQotICAgICAgICBmb3IgKGVudHJ5IGluIG9iamVjdCkgewotICAgICAgICAg
ICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8KLSAgICAgICAgICAgIGlmIChvYmplY3QuaGFz
T3duUHJvcGVydHkoZW50cnkpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0W2VudHJ5XSA9IG9i
amVjdFtlbnRyeV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGVu
dHJ5IGluIHByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNl
ICovCi0gICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShlbnRyeSkpIHsK
LSAgICAgICAgICAgICAgICByZXN1bHRbZW50cnldID0gcHJvcGVydGllc1tlbnRyeV07Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQog
ICAgIGZ1bmN0aW9uIHRva2VuaXplKGNvZGUsIG9wdGlvbnMpIHsKICAgICAgICAgdmFyIHRvU3Ry
aW5nLAotICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgICB0b2tlbnM7CiAKICAgICAgICAg
dG9TdHJpbmcgPSBTdHJpbmc7CkBAIC01MTcxLDIxICs1NDYzLDI0IEBACiAgICAgICAgICAgICBj
b2RlID0gdG9TdHJpbmcoY29kZSk7CiAgICAgICAgIH0KIAotICAgICAgICBkZWxlZ2F0ZSA9IFN5
bnRheFRyZWVEZWxlZ2F0ZTsKICAgICAgICAgc291cmNlID0gY29kZTsKICAgICAgICAgaW5kZXgg
PSAwOwogICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwOwog
ICAgICAgICBsaW5lU3RhcnQgPSAwOworICAgICAgICBzdGFydEluZGV4ID0gaW5kZXg7CisgICAg
ICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIHN0YXJ0TGluZVN0YXJ0
ID0gbGluZVN0YXJ0OwogICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOwogICAgICAgICBs
b29rYWhlYWQgPSBudWxsOwogICAgICAgICBzdGF0ZSA9IHsKLSAgICAgICAgICAgIGFsbG93S2V5
d29yZDogdHJ1ZSwKICAgICAgICAgICAgIGFsbG93SW46IHRydWUsCi0gICAgICAgICAgICBsYWJl
bFNldDogbmV3IFN0cmluZ01hcCgpLAorICAgICAgICAgICAgYWxsb3dZaWVsZDogdHJ1ZSwKKyAg
ICAgICAgICAgIGxhYmVsU2V0OiB7fSwKICAgICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxz
ZSwKICAgICAgICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSwKICAgICAgICAgICAgIGluU3dpdGNo
OiBmYWxzZSwKLSAgICAgICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xCisgICAgICAgICAgICBs
YXN0Q29tbWVudFN0YXJ0OiAtMSwKKyAgICAgICAgICAgIGN1cmx5U3RhY2s6IFtdCiAgICAgICAg
IH07CiAKICAgICAgICAgZXh0cmEgPSB7fTsKQEAgLTUyMTEsMjIgKzU1MDYsMTkgQEAKICAgICAg
ICAgICAgIGV4dHJhLmVycm9ycyA9IFtdOwogICAgICAgICB9CiAKLSAgICAgICAgcGF0Y2goKTsK
LQogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGVlaygpOwogICAgICAgICAgICAgaWYgKGxv
b2thaGVhZC50eXBlID09PSBUb2tlbi5FT0YpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXh0
cmEudG9rZW5zOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwor
ICAgICAgICAgICAgbGV4KCk7CiAgICAgICAgICAgICB3aGlsZSAobG9va2FoZWFkLnR5cGUgIT09
IFRva2VuLkVPRikgewogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGxleCgpOwogICAgICAgICAgICAg
ICAgIH0gY2F0Y2ggKGxleEVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRva2VuID0gbG9v
a2FoZWFkOwogICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBleHRyYS5lcnJvcnMucHVzaChsZXhFcnJvcik7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZWNvcmRFcnJvcihsZXhFcnJvcik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBoYXZlIHRvIGJyZWFrIG9uIHRoZSBmaXJzdCBlcnJvcgogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTUyNDcsNyArNTUzOSw2IEBACiAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAg
ICB1bnBhdGNoKCk7CiAgICAgICAgICAgICBleHRyYSA9IHt9OwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiB0b2tlbnM7CkBAIC01MjYxLDI0ICs1NTUyLDI3IEBACiAgICAgICAgICAgICBjb2Rl
ID0gdG9TdHJpbmcoY29kZSk7CiAgICAgICAgIH0KIAotICAgICAgICBkZWxlZ2F0ZSA9IFN5bnRh
eFRyZWVEZWxlZ2F0ZTsKICAgICAgICAgc291cmNlID0gY29kZTsKICAgICAgICAgaW5kZXggPSAw
OwogICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwOwogICAg
ICAgICBsaW5lU3RhcnQgPSAwOworICAgICAgICBzdGFydEluZGV4ID0gaW5kZXg7CisgICAgICAg
IHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0g
bGluZVN0YXJ0OwogICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOwogICAgICAgICBsb29r
YWhlYWQgPSBudWxsOwogICAgICAgICBzdGF0ZSA9IHsKLSAgICAgICAgICAgIGFsbG93S2V5d29y
ZDogZmFsc2UsCiAgICAgICAgICAgICBhbGxvd0luOiB0cnVlLAotICAgICAgICAgICAgbGFiZWxT
ZXQ6IG5ldyBTdHJpbmdNYXAoKSwKLSAgICAgICAgICAgIHBhcmVudGhlc2l6ZWRDb3VudDogMCwK
KyAgICAgICAgICAgIGFsbG93WWllbGQ6IHRydWUsCisgICAgICAgICAgICBsYWJlbFNldDoge30s
CiAgICAgICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsCiAgICAgICAgICAgICBpbkl0ZXJh
dGlvbjogZmFsc2UsCiAgICAgICAgICAgICBpblN3aXRjaDogZmFsc2UsCiAgICAgICAgICAgICBs
YXN0Q29tbWVudFN0YXJ0OiAtMSwKLSAgICAgICAgICAgIHlpZWxkQWxsb3dlZDogZmFsc2UKKyAg
ICAgICAgICAgIGN1cmx5U3RhY2s6IFtdLAorICAgICAgICAgICAgc291cmNlVHlwZTogJ3Njcmlw
dCcKICAgICAgICAgfTsKKyAgICAgICAgc3RyaWN0ID0gZmFsc2U7CiAKICAgICAgICAgZXh0cmEg
PSB7fTsKICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAndW5kZWZpbmVkJykgewpAQCAt
NTI4NywxNyArNTU4MSw5IEBACiAgICAgICAgICAgICBleHRyYS5hdHRhY2hDb21tZW50ID0gKHR5
cGVvZiBvcHRpb25zLmF0dGFjaENvbW1lbnQgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5hdHRh
Y2hDb21tZW50OwogCiAgICAgICAgICAgICBpZiAoZXh0cmEubG9jICYmIG9wdGlvbnMuc291cmNl
ICE9PSBudWxsICYmIG9wdGlvbnMuc291cmNlICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAg
ICAgICBkZWxlZ2F0ZSA9IGV4dGVuZChkZWxlZ2F0ZSwgewotICAgICAgICAgICAgICAgICAgICAn
cG9zdFByb2Nlc3MnOiBmdW5jdGlvbiAobm9kZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS5sb2Muc291cmNlID0gdG9TdHJpbmcob3B0aW9ucy5zb3VyY2UpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBleHRyYS5zb3VyY2UgPSB0b1N0cmluZyhvcHRp
b25zLnNvdXJjZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChvcHRpb25zLnNv
dXJjZVR5cGUgPT09ICdtb2R1bGUnKSB7Ci0gICAgICAgICAgICAgICAgZXh0cmEuaXNNb2R1bGUg
PSB0cnVlOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRv
a2VucyA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudG9rZW5zKSB7CiAgICAgICAgICAgICAgICAg
ZXh0cmEudG9rZW5zID0gW107CiAgICAgICAgICAgICB9CkBAIC01MzE0LDkgKzU2MDAsMTMgQEAK
ICAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107CiAgICAgICAgICAg
ICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzID0gW107CiAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAob3B0aW9ucy5zb3VyY2VUeXBlID09PSAnbW9kdWxlJykgeworICAgICAgICAgICAg
ICAgIC8vIHZlcnkgcmVzdHJpY3RpdmUgY29uZGl0aW9uIGZvciBub3cKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5zb3VyY2VUeXBlID0gb3B0aW9ucy5zb3VyY2VUeXBlOworICAgICAgICAgICAgICAg
IHN0cmljdCA9IHRydWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwYXRj
aCgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcHJvZ3JhbSA9IHBhcnNlUHJvZ3JhbSgp
OwogICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcp
IHsKQEAgLTUzMzIsNyArNTYyMiw2IEBACiAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAg
ICAgIHRocm93IGU7CiAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICB1bnBhdGNoKCk7
CiAgICAgICAgICAgICBleHRyYSA9IHt9OwogICAgICAgICB9CiAKQEAgLTUzNDAsMTQgKzU2Mjks
MTQgQEAKICAgICB9CiAKICAgICAvLyBTeW5jIHdpdGggKi5qc29uIG1hbmlmZXN0cy4KLSAgICBl
eHBvcnRzLnZlcnNpb24gPSAnMS4xLjAtZGV2LWhhcm1vbnknOworICAgIGV4cG9ydHMudmVyc2lv
biA9ICcyLjYuMCc7CiAKICAgICBleHBvcnRzLnRva2VuaXplID0gdG9rZW5pemU7CiAKICAgICBl
eHBvcnRzLnBhcnNlID0gcGFyc2U7CiAKICAgICAvLyBEZWVwIGNvcHkuCi0gICAvKiBpc3RhbmJ1
bCBpZ25vcmUgbmV4dCAqLworICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCiAgICAgZXhw
b3J0cy5TeW50YXggPSAoZnVuY3Rpb24gKCkgewogICAgICAgICB2YXIgbmFtZSwgdHlwZXMgPSB7
fTsKIAo=
</data>
<flag name="review"
          id="286888"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261717</attachid>
            <date>2015-09-21 19:40:25 -0700</date>
            <delta_ts>2015-09-21 19:49:33 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>306970</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMDk4KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE1LTA5LTIxICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IHVwZGF0ZSBFc3ByaW1hIHRvIGxhdGVzdCB2ZXJzaW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5NjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFc3ByaW1hIHZlcnNpb24g
Mi42IGZ1cnRoZXIgc3VwcG9ydHMgRVM2LiBXZSdyZQorICAgICAgICB1cGRhdGluZyB0byBpdCBz
byB3ZSBjYW4gc3VwcG9ydCBtb3JlIEVTNiBmZWF0dXJlcworICAgICAgICBpbiBvdXIgc2NyaXB0
IHN5bnRheCB0cmVlLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1h
L0xJQ0VOU0U6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJp
bWEuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5fZ2F0
aGVySWRlbnRpZmllcnNJbkRlY2xhcmF0aW9uLmdhdGhlcklkZW50aWZpZXJzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5fZ2F0aGVySWRlbnRpZmll
cnNJbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
LnByb3RvdHlwZS5fcmVjdXJzZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5wcm90b3R5cGUuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZSk6CisKIDIwMTUtMDktMjEgIE1hdHQgQmFrZXIgIDxt
YXR0YmFrZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlcXVlc3RBbmlt
YXRpb25GcmFtZSBjb250aW51ZXMgdG8gYmUgY2FsbGVkIGFmdGVyIHN0b3BwaW5nIHRoZSB0aW1l
bGluZSByZWNvcmRpbmcKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0VzcHJpbWEvTElDRU5TRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL0xJQ0VOU0UJKHJldmlzaW9uIDE5
MDA2MSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Vz
cHJpbWEvTElDRU5TRQkod29ya2luZyBjb3B5KQpAQCAtMSwyMiArMSwxMyBAQAotQ29weXJpZ2h0
IChDKSAyMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgotQ29weXJp
Z2h0IChDKSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFkZGVlLnR5bEBnbWFpbC5jb20+Ci1Db3B5cmln
aHQgKEMpIDIwMTMgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNAcWl3aS5iZT4KLUNvcHlyaWdodCAo
QykgMjAxMiBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT4KLUNvcHlyaWdo
dCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPgotQ29weXJpZ2h0IChD
KSAyMDEyIEpvb3N0LVdpbSBCb2VrZXN0ZWlqbiA8am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPgot
Q29weXJpZ2h0IChDKSAyMDEyIEtyaXMgS293YWwgPGtyaXMua293YWxAY2l4YXIuY29tPgotQ29w
eXJpZ2h0IChDKSAyMDEyIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KLUNv
cHlyaWdodCAoQykgMjAxMiBBcnBhZCBCb3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVtYWlsLmNv
bT4KLUNvcHlyaWdodCAoQykgMjAxMSBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWls
LmNvbT4KK0NvcHlyaWdodCAoYykgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gYW5kIENvbnRyaWJ1
dG9ycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKIAotKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgogCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJp
bWEvZXNwcmltYS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanMJKHJldmlzaW9uIDE5MDA2MSkKKysr
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNw
cmltYS5qcwkod29ya2luZyBjb3B5KQpAQCAtMSwxMyArMSw1IEBACiAvKgotICBDb3B5cmlnaHQg
KEMpIDIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+Ci0gIENvcHly
aWdodCAoQykgMjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50eWxAZ21haWwuY29tPgotICBDb3B5
cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+Ci0g
IENvcHlyaWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPgotICBD
b3B5cmlnaHQgKEMpIDIwMTIgSm9vc3QtV2ltIEJvZWtlc3RlaWpuIDxqb29zdC13aW1AYm9la2Vz
dGVpam4ubmw+Ci0gIENvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtvd2FsIDxrcmlzLmtvd2FsQGNp
eGFyLmNvbT4KLSAgQ29weXJpZ2h0IChDKSAyMDEyIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KLSAgQ29weXJpZ2h0IChDKSAyMDEyIEFycGFkIEJvcnNvcyA8YXJwYWQuYm9y
c29zQGdvb2dsZW1haWwuY29tPgotICBDb3B5cmlnaHQgKEMpIDIwMTEgQXJpeWEgSGlkYXlhdCA8
YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoYykgalF1ZXJ5IEZvdW5kYXRp
b24sIEluYy4gYW5kIENvbnRyaWJ1dG9ycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIAogICBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CkBAIC01MSwyMSArNDMsMjkgQEAKICAgICAgICAg
VG9rZW5OYW1lLAogICAgICAgICBGbkV4cHJUb2tlbnMsCiAgICAgICAgIFN5bnRheCwKLSAgICAg
ICAgUHJvcGVydHlLaW5kLAorICAgICAgICBQbGFjZUhvbGRlcnMsCiAgICAgICAgIE1lc3NhZ2Vz
LAogICAgICAgICBSZWdleCwKLSAgICAgICAgU3ludGF4VHJlZURlbGVnYXRlLAotICAgICAgICBD
bGFzc1Byb3BlcnR5VHlwZSwKICAgICAgICAgc291cmNlLAogICAgICAgICBzdHJpY3QsCiAgICAg
ICAgIGluZGV4LAogICAgICAgICBsaW5lTnVtYmVyLAogICAgICAgICBsaW5lU3RhcnQsCisgICAg
ICAgIGhhc0xpbmVUZXJtaW5hdG9yLAorICAgICAgICBsYXN0SW5kZXgsCisgICAgICAgIGxhc3RM
aW5lTnVtYmVyLAorICAgICAgICBsYXN0TGluZVN0YXJ0LAorICAgICAgICBzdGFydEluZGV4LAor
ICAgICAgICBzdGFydExpbmVOdW1iZXIsCisgICAgICAgIHN0YXJ0TGluZVN0YXJ0LAorICAgICAg
ICBzY2FubmluZywKICAgICAgICAgbGVuZ3RoLAotICAgICAgICBkZWxlZ2F0ZSwKICAgICAgICAg
bG9va2FoZWFkLAogICAgICAgICBzdGF0ZSwKLSAgICAgICAgZXh0cmE7CisgICAgICAgIGV4dHJh
LAorICAgICAgICBpc0JpbmRpbmdFbGVtZW50LAorICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQs
CisgICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKIAogICAgIFRva2VuID0g
ewogICAgICAgICBCb29sZWFuTGl0ZXJhbDogMSwKQEAgLTkwLDYgKzkwLDcgQEAKICAgICBUb2tl
bk5hbWVbVG9rZW4uUHVuY3R1YXRvcl0gPSAnUHVuY3R1YXRvcic7CiAgICAgVG9rZW5OYW1lW1Rv
a2VuLlN0cmluZ0xpdGVyYWxdID0gJ1N0cmluZyc7CiAgICAgVG9rZW5OYW1lW1Rva2VuLlJlZ3Vs
YXJFeHByZXNzaW9uXSA9ICdSZWd1bGFyRXhwcmVzc2lvbic7CisgICAgVG9rZW5OYW1lW1Rva2Vu
LlRlbXBsYXRlXSA9ICdUZW1wbGF0ZSc7CiAKICAgICAvLyBBIGZ1bmN0aW9uIGZvbGxvd2luZyBv
bmUgb2YgdGhvc2UgdG9rZW5zIGlzIGFuIGV4cHJlc3Npb24uCiAgICAgRm5FeHByVG9rZW5zID0g
WycoJywgJ3snLCAnWycsICdpbicsICd0eXBlb2YnLCAnaW5zdGFuY2VvZicsICduZXcnLApAQCAt
MTAzLDMyICsxMDQsMzIgQEAKICAgICAgICAgICAgICAgICAgICAgJzw9JywgJzwnLCAnPicsICch
PScsICchPT0nXTsKIAogICAgIFN5bnRheCA9IHsKKyAgICAgICAgQXNzaWdubWVudEV4cHJlc3Np
b246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsCisgICAgICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiAn
QXNzaWdubWVudFBhdHRlcm4nLAogICAgICAgICBBcnJheUV4cHJlc3Npb246ICdBcnJheUV4cHJl
c3Npb24nLAogICAgICAgICBBcnJheVBhdHRlcm46ICdBcnJheVBhdHRlcm4nLAogICAgICAgICBB
cnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJywKLSAgICAg
ICAgQXNzaWdubWVudEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsCi0gICAgICAg
IEJpbmFyeUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9uJywKICAgICAgICAgQmxvY2tTdGF0
ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsCisgICAgICAgIEJpbmFyeUV4cHJlc3Npb246ICdCaW5h
cnlFeHByZXNzaW9uJywKICAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcs
CiAgICAgICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLAogICAgICAgICBDYXRj
aENsYXVzZTogJ0NhdGNoQ2xhdXNlJywKICAgICAgICAgQ2xhc3NCb2R5OiAnQ2xhc3NCb2R5JywK
ICAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogJ0NsYXNzRGVjbGFyYXRpb24nLAogICAgICAgICBD
bGFzc0V4cHJlc3Npb246ICdDbGFzc0V4cHJlc3Npb24nLAotICAgICAgICBDb21wcmVoZW5zaW9u
QmxvY2s6ICdDb21wcmVoZW5zaW9uQmxvY2snLAotICAgICAgICBDb21wcmVoZW5zaW9uRXhwcmVz
c2lvbjogJ0NvbXByZWhlbnNpb25FeHByZXNzaW9uJywKICAgICAgICAgQ29uZGl0aW9uYWxFeHBy
ZXNzaW9uOiAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJywKICAgICAgICAgQ29udGludWVTdGF0ZW1l
bnQ6ICdDb250aW51ZVN0YXRlbWVudCcsCi0gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVi
dWdnZXJTdGF0ZW1lbnQnLAogICAgICAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRl
bWVudCcsCisgICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQnLAog
ICAgICAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JywKLSAgICAgICAgRXhwb3J0
RGVjbGFyYXRpb246ICdFeHBvcnREZWNsYXJhdGlvbicsCi0gICAgICAgIEV4cG9ydEJhdGNoU3Bl
Y2lmaWVyOiAnRXhwb3J0QmF0Y2hTcGVjaWZpZXInLAorICAgICAgICBFeHBvcnRBbGxEZWNsYXJh
dGlvbjogJ0V4cG9ydEFsbERlY2xhcmF0aW9uJywKKyAgICAgICAgRXhwb3J0RGVmYXVsdERlY2xh
cmF0aW9uOiAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJywKKyAgICAgICAgRXhwb3J0TmFtZWRE
ZWNsYXJhdGlvbjogJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nLAogICAgICAgICBFeHBvcnRTcGVj
aWZpZXI6ICdFeHBvcnRTcGVjaWZpZXInLAogICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50OiAn
RXhwcmVzc2lvblN0YXRlbWVudCcsCi0gICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9ySW5TdGF0
ZW1lbnQnLAotICAgICAgICBGb3JPZlN0YXRlbWVudDogJ0Zvck9mU3RhdGVtZW50JywKICAgICAg
ICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JywKKyAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6
ICdGb3JPZlN0YXRlbWVudCcsCisgICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9ySW5TdGF0ZW1l
bnQnLAogICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbics
CiAgICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCiAgICAg
ICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJywKQEAgLTEzNywyMCArMTM4LDIyIEBACiAgICAg
ICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJywKICAg
ICAgICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVy
JywKICAgICAgICAgSW1wb3J0U3BlY2lmaWVyOiAnSW1wb3J0U3BlY2lmaWVyJywKLSAgICAgICAg
TGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAogICAgICAgICBMaXRlcmFsOiAn
TGl0ZXJhbCcsCisgICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6ICdMYWJlbGVkU3RhdGVtZW50JywK
ICAgICAgICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsCiAgICAgICAg
IE1lbWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJywKKyAgICAgICAgTWV0YVByb3Bl
cnR5OiAnTWV0YVByb3BlcnR5JywKICAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogJ01ldGhvZERl
ZmluaXRpb24nLAotICAgICAgICBNb2R1bGVTcGVjaWZpZXI6ICdNb2R1bGVTcGVjaWZpZXInLAog
ICAgICAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsCiAgICAgICAgIE9iamVjdEV4
cHJlc3Npb246ICdPYmplY3RFeHByZXNzaW9uJywKICAgICAgICAgT2JqZWN0UGF0dGVybjogJ09i
amVjdFBhdHRlcm4nLAogICAgICAgICBQcm9ncmFtOiAnUHJvZ3JhbScsCiAgICAgICAgIFByb3Bl
cnR5OiAnUHJvcGVydHknLAorICAgICAgICBSZXN0RWxlbWVudDogJ1Jlc3RFbGVtZW50JywKICAg
ICAgICAgUmV0dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50JywKICAgICAgICAgU2VxdWVu
Y2VFeHByZXNzaW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJywKICAgICAgICAgU3ByZWFkRWxlbWVu
dDogJ1NwcmVhZEVsZW1lbnQnLAorICAgICAgICBTdXBlcjogJ1N1cGVyJywKICAgICAgICAgU3dp
dGNoQ2FzZTogJ1N3aXRjaENhc2UnLAogICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hT
dGF0ZW1lbnQnLAogICAgICAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246ICdUYWdnZWRUZW1w
bGF0ZUV4cHJlc3Npb24nLApAQCAtMTY4LDE1ICsxNzEsOCBAQAogICAgICAgICBZaWVsZEV4cHJl
c3Npb246ICdZaWVsZEV4cHJlc3Npb24nCiAgICAgfTsKIAotICAgIFByb3BlcnR5S2luZCA9IHsK
LSAgICAgICAgRGF0YTogMSwKLSAgICAgICAgR2V0OiAyLAotICAgICAgICBTZXQ6IDQKLSAgICB9
OwotCi0gICAgQ2xhc3NQcm9wZXJ0eVR5cGUgPSB7Ci0gICAgICAgICdzdGF0aWMnOiAnc3RhdGlj
JywKLSAgICAgICAgcHJvdG90eXBlOiAncHJvdG90eXBlJworICAgIFBsYWNlSG9sZGVycyA9IHsK
KyAgICAgICAgQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcjogJ0Fycm93UGFyYW1ldGVyUGxhY2VI
b2xkZXInCiAgICAgfTsKIAogICAgIC8vIEVycm9yIG1lc3NhZ2VzIHNob3VsZCBiZSBpZGVudGlj
YWwgdG8gVjguCkBAIC0xOTIsNTQgKzE4OCw1MCBAQAogICAgICAgICBJbnZhbGlkUmVnRXhwOiAn
SW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nLAogICAgICAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6
ICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvJywKICAgICAgICAgSW52YWxp
ZExIU0luQXNzaWdubWVudDogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gYXNzaWdubWVudCcs
Ci0gICAgICAgIEludmFsaWRMSFNJbkZvcm1hbHNMaXN0OiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lk
ZSBpbiBmb3JtYWxzIGxpc3QnLAogICAgICAgICBJbnZhbGlkTEhTSW5Gb3JJbjogJ0ludmFsaWQg
bGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluJywKKyAgICAgICAgSW52YWxpZExIU0luRm9yTG9vcDog
J0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWxvb3AnLAogICAgICAgICBNdWx0aXBsZURl
ZmF1bHRzSW5Td2l0Y2g6ICdNb3JlIHRoYW4gb25lIGRlZmF1bHQgY2xhdXNlIGluIHN3aXRjaCBz
dGF0ZW1lbnQnLAogICAgICAgICBOb0NhdGNoT3JGaW5hbGx5OiAnTWlzc2luZyBjYXRjaCBvciBm
aW5hbGx5IGFmdGVyIHRyeScsCiAgICAgICAgIFVua25vd25MYWJlbDogJ1VuZGVmaW5lZCBsYWJl
bCBcJyUwXCcnLAogICAgICAgICBSZWRlY2xhcmF0aW9uOiAnJTAgXCclMVwnIGhhcyBhbHJlYWR5
IGJlZW4gZGVjbGFyZWQnLAogICAgICAgICBJbGxlZ2FsQ29udGludWU6ICdJbGxlZ2FsIGNvbnRp
bnVlIHN0YXRlbWVudCcsCiAgICAgICAgIElsbGVnYWxCcmVhazogJ0lsbGVnYWwgYnJlYWsgc3Rh
dGVtZW50JywKLSAgICAgICAgSWxsZWdhbER1cGxpY2F0ZUNsYXNzUHJvcGVydHk6ICdJbGxlZ2Fs
IGR1cGxpY2F0ZSBwcm9wZXJ0eSBpbiBjbGFzcyBkZWZpbml0aW9uJywKLSAgICAgICAgSWxsZWdh
bENsYXNzQ29uc3RydWN0b3JQcm9wZXJ0eTogJ0lsbGVnYWwgY29uc3RydWN0b3IgcHJvcGVydHkg
aW4gY2xhc3MgZGVmaW5pdGlvbicsCiAgICAgICAgIElsbGVnYWxSZXR1cm46ICdJbGxlZ2FsIHJl
dHVybiBzdGF0ZW1lbnQnLAotICAgICAgICBJbGxlZ2FsWWllbGQ6ICdJbGxlZ2FsIHlpZWxkIGV4
cHJlc3Npb24nLAotICAgICAgICBJbGxlZ2FsU3ByZWFkOiAnSWxsZWdhbCBzcHJlYWQgZWxlbWVu
dCcsCiAgICAgICAgIFN0cmljdE1vZGVXaXRoOiAnU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGlu
Y2x1ZGUgYSB3aXRoIHN0YXRlbWVudCcsCiAgICAgICAgIFN0cmljdENhdGNoVmFyaWFibGU6ICdD
YXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2Rl
JywKICAgICAgICAgU3RyaWN0VmFyTmFtZTogJ1ZhcmlhYmxlIG5hbWUgbWF5IG5vdCBiZSBldmFs
IG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCiAgICAgICAgIFN0cmljdFBhcmFtTmFtZTog
J1BhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmlj
dCBtb2RlJywKICAgICAgICAgU3RyaWN0UGFyYW1EdXBlOiAnU3RyaWN0IG1vZGUgZnVuY3Rpb24g
bWF5IG5vdCBoYXZlIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMnLAotICAgICAgICBQYXJhbWV0
ZXJBZnRlclJlc3RQYXJhbWV0ZXI6ICdSZXN0IHBhcmFtZXRlciBtdXN0IGJlIGZpbmFsIHBhcmFt
ZXRlciBvZiBhbiBhcmd1bWVudCBsaXN0JywKLSAgICAgICAgRGVmYXVsdFJlc3RQYXJhbWV0ZXI6
ICdSZXN0IHBhcmFtZXRlciBjYW4gbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlJywKLSAgICAgICAg
RWxlbWVudEFmdGVyU3ByZWFkRWxlbWVudDogJ1NwcmVhZCBtdXN0IGJlIHRoZSBmaW5hbCBlbGVt
ZW50IG9mIGFuIGVsZW1lbnQgbGlzdCcsCi0gICAgICAgIE9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJh
bWV0ZXI6ICdJbnZhbGlkIHJlc3QgcGFyYW1ldGVyJywKLSAgICAgICAgT2JqZWN0UGF0dGVybkFz
U3ByZWFkOiAnSW52YWxpZCBzcHJlYWQgYXJndW1lbnQnLAogICAgICAgICBTdHJpY3RGdW5jdGlv
bk5hbWU6ICdGdW5jdGlvbiBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3Ry
aWN0IG1vZGUnLAogICAgICAgICBTdHJpY3RPY3RhbExpdGVyYWw6ICdPY3RhbCBsaXRlcmFscyBh
cmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuJywKICAgICAgICAgU3RyaWN0RGVsZXRlOiAn
RGVsZXRlIG9mIGFuIHVucXVhbGlmaWVkIGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUuJywKLSAg
ICAgICAgU3RyaWN0RHVwbGljYXRlUHJvcGVydHk6ICdEdXBsaWNhdGUgZGF0YSBwcm9wZXJ0eSBp
biBvYmplY3QgbGl0ZXJhbCBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCi0gICAgICAgIEFj
Y2Vzc29yRGF0YVByb3BlcnR5OiAnT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBoYXZlIGRhdGEgYW5k
IGFjY2Vzc29yIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZScsCi0gICAgICAgIEFjY2Vzc29y
R2V0U2V0OiAnT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBoYXZlIG11bHRpcGxlIGdldC9zZXQgYWNj
ZXNzb3JzIHdpdGggdGhlIHNhbWUgbmFtZScsCiAgICAgICAgIFN0cmljdExIU0Fzc2lnbm1lbnQ6
ICdBc3NpZ25tZW50IHRvIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmlj
dCBtb2RlJywKICAgICAgICAgU3RyaWN0TEhTUG9zdGZpeDogJ1Bvc3RmaXggaW5jcmVtZW50L2Rl
Y3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3Qg
bW9kZScsCiAgICAgICAgIFN0cmljdExIU1ByZWZpeDogJ1ByZWZpeCBpbmNyZW1lbnQvZGVjcmVt
ZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2Rl
JywKICAgICAgICAgU3RyaWN0UmVzZXJ2ZWRXb3JkOiAnVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3
b3JkIGluIHN0cmljdCBtb2RlJywKLSAgICAgICAgTWlzc2luZ0Zyb21DbGF1c2U6ICdNaXNzaW5n
IGZyb20gY2xhdXNlJywKLSAgICAgICAgTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlOiAnTWlzc2lu
ZyBhcyBhZnRlciBpbXBvcnQgKicsCi0gICAgICAgIEludmFsaWRNb2R1bGVTcGVjaWZpZXI6ICdJ
bnZhbGlkIG1vZHVsZSBzcGVjaWZpZXInLAotICAgICAgICBJbGxlZ2FsSW1wb3J0RGVjbGFyYXRp
b246ICdJbGxlZ2FsIGltcG9ydCBkZWNsYXJhdGlvbicsCi0gICAgICAgIElsbGVnYWxFeHBvcnRE
ZWNsYXJhdGlvbjogJ0lsbGVnYWwgZXhwb3J0IGRlY2xhcmF0aW9uJywKLSAgICAgICAgTm9Vbmlu
dGlhbGl6ZWRDb25zdDogJ0NvbnN0IG11c3QgYmUgaW5pdGlhbGl6ZWQnLAotICAgICAgICBDb21w
cmVoZW5zaW9uUmVxdWlyZXNCbG9jazogJ0NvbXByZWhlbnNpb24gbXVzdCBoYXZlIGF0IGxlYXN0
IG9uZSBibG9jaycsCi0gICAgICAgIENvbXByZWhlbnNpb25FcnJvcjogJ0NvbXByZWhlbnNpb24g
RXJyb3InLAotICAgICAgICBFYWNoTm90QWxsb3dlZDogJ0VhY2ggaXMgbm90IHN1cHBvcnRlZCcK
KyAgICAgICAgVGVtcGxhdGVPY3RhbExpdGVyYWw6ICdPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFs
bG93ZWQgaW4gdGVtcGxhdGUgc3RyaW5ncy4nLAorICAgICAgICBQYXJhbWV0ZXJBZnRlclJlc3RQ
YXJhbWV0ZXI6ICdSZXN0IHBhcmFtZXRlciBtdXN0IGJlIGxhc3QgZm9ybWFsIHBhcmFtZXRlcics
CisgICAgICAgIERlZmF1bHRSZXN0UGFyYW1ldGVyOiAnVW5leHBlY3RlZCB0b2tlbiA9JywKKyAg
ICAgICAgT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcjogJ1VuZXhwZWN0ZWQgdG9rZW4geycs
CisgICAgICAgIER1cGxpY2F0ZVByb3RvUHJvcGVydHk6ICdEdXBsaWNhdGUgX19wcm90b19fIGZp
ZWxkcyBhcmUgbm90IGFsbG93ZWQgaW4gb2JqZWN0IGxpdGVyYWxzJywKKyAgICAgICAgQ29uc3Ry
dWN0b3JTcGVjaWFsTWV0aG9kOiAnQ2xhc3MgY29uc3RydWN0b3IgbWF5IG5vdCBiZSBhbiBhY2Nl
c3NvcicsCisgICAgICAgIER1cGxpY2F0ZUNvbnN0cnVjdG9yOiAnQSBjbGFzcyBtYXkgb25seSBo
YXZlIG9uZSBjb25zdHJ1Y3RvcicsCisgICAgICAgIFN0YXRpY1Byb3RvdHlwZTogJ0NsYXNzZXMg
bWF5IG5vdCBoYXZlIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBwcm90b3R5cGUnLAorICAgICAgICBN
aXNzaW5nRnJvbUNsYXVzZTogJ1VuZXhwZWN0ZWQgdG9rZW4nLAorICAgICAgICBOb0FzQWZ0ZXJJ
bXBvcnROYW1lc3BhY2U6ICdVbmV4cGVjdGVkIHRva2VuJywKKyAgICAgICAgSW52YWxpZE1vZHVs
ZVNwZWNpZmllcjogJ1VuZXhwZWN0ZWQgdG9rZW4nLAorICAgICAgICBJbGxlZ2FsSW1wb3J0RGVj
bGFyYXRpb246ICdVbmV4cGVjdGVkIHRva2VuJywKKyAgICAgICAgSWxsZWdhbEV4cG9ydERlY2xh
cmF0aW9uOiAnVW5leHBlY3RlZCB0b2tlbicsCisgICAgICAgIER1cGxpY2F0ZUJpbmRpbmc6ICdE
dXBsaWNhdGUgYmluZGluZyAlMCcKICAgICB9OwogCi0gICAgLy8gU2VlIGFsc28gdG9vbHMvZ2Vu
ZXJhdGUtdW5pY29kZS1yZWdleC5weS4KKyAgICAvLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11
bmljb2RlLXJlZ2V4LmpzLgogICAgIFJlZ2V4ID0gewotICAgICAgICBOb25Bc2NpaUlkZW50aWZp
ZXJTdGFydDogbmV3IFJlZ0V4cCgnW1x4YWFceGI1XHhiYVx4YzAtXHhkNlx4ZDgtXHhmNlx4Zjgt
XHUwMmMxXHUwMmM2LVx1MDJkMVx1MDJlMC1cdTAyZTRcdTAyZWNcdTAyZWVcdTAzNzAtXHUwMzc0
XHUwMzc2XHUwMzc3XHUwMzdhLVx1MDM3ZFx1MDM4Nlx1MDM4OC1cdTAzOGFcdTAzOGNcdTAzOGUt
XHUwM2ExXHUwM2EzLVx1MDNmNVx1MDNmNy1cdTA0ODFcdTA0OGEtXHUwNTI3XHUwNTMxLVx1MDU1
Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1ZDAtXHUwNWVhXHUwNWYwLVx1MDVmMlx1MDYyMC1cdTA2
NGFcdTA2NmVcdTA2NmZcdTA2NzEtXHUwNmQzXHUwNmQ1XHUwNmU1XHUwNmU2XHUwNmVlXHUwNmVm
XHUwNmZhLVx1MDZmY1x1MDZmZlx1MDcxMFx1MDcxMi1cdTA3MmZcdTA3NGQtXHUwN2E1XHUwN2Ix
XHUwN2NhLVx1MDdlYVx1MDdmNFx1MDdmNVx1MDdmYVx1MDgwMC1cdTA4MTVcdTA4MWFcdTA4MjRc
dTA4MjhcdTA4NDAtXHUwODU4XHUwOGEwXHUwOGEyLVx1MDhhY1x1MDkwNC1cdTA5MzlcdTA5M2Rc
dTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N1x1MDk3OS1cdTA5N2ZcdTA5ODUtXHUwOThj
XHUwOThmXHUwOTkwXHUwOTkzLVx1MDlhOFx1MDlhYS1cdTA5YjBcdTA5YjJcdTA5YjYtXHUwOWI5
XHUwOWJkXHUwOWNlXHUwOWRjXHUwOWRkXHUwOWRmLVx1MDllMVx1MDlmMFx1MDlmMVx1MGEwNS1c
dTBhMGFcdTBhMGZcdTBhMTBcdTBhMTMtXHUwYTI4XHUwYTJhLVx1MGEzMFx1MGEzMlx1MGEzM1x1
MGEzNVx1MGEzNlx1MGEzOFx1MGEzOVx1MGE1OS1cdTBhNWNcdTBhNWVcdTBhNzItXHUwYTc0XHUw
YTg1LVx1MGE4ZFx1MGE4Zi1cdTBhOTFcdTBhOTMtXHUwYWE4XHUwYWFhLVx1MGFiMFx1MGFiMlx1
MGFiM1x1MGFiNS1cdTBhYjlcdTBhYmRcdTBhZDBcdTBhZTBcdTBhZTFcdTBiMDUtXHUwYjBjXHUw
YjBmXHUwYjEwXHUwYjEzLVx1MGIyOFx1MGIyYS1cdTBiMzBcdTBiMzJcdTBiMzNcdTBiMzUtXHUw
YjM5XHUwYjNkXHUwYjVjXHUwYjVkXHUwYjVmLVx1MGI2MVx1MGI3MVx1MGI4M1x1MGI4NS1cdTBi
OGFcdTBiOGUtXHUwYjkwXHUwYjkyLVx1MGI5NVx1MGI5OVx1MGI5YVx1MGI5Y1x1MGI5ZVx1MGI5
Zlx1MGJhM1x1MGJhNFx1MGJhOC1cdTBiYWFcdTBiYWUtXHUwYmI5XHUwYmQwXHUwYzA1LVx1MGMw
Y1x1MGMwZS1cdTBjMTBcdTBjMTItXHUwYzI4XHUwYzJhLVx1MGMzM1x1MGMzNS1cdTBjMzlcdTBj
M2RcdTBjNThcdTBjNTlcdTBjNjBcdTBjNjFcdTBjODUtXHUwYzhjXHUwYzhlLVx1MGM5MFx1MGM5
Mi1cdTBjYThcdTBjYWEtXHUwY2IzXHUwY2I1LVx1MGNiOVx1MGNiZFx1MGNkZVx1MGNlMFx1MGNl
MVx1MGNmMVx1MGNmMlx1MGQwNS1cdTBkMGNcdTBkMGUtXHUwZDEwXHUwZDEyLVx1MGQzYVx1MGQz
ZFx1MGQ0ZVx1MGQ2MFx1MGQ2MVx1MGQ3YS1cdTBkN2ZcdTBkODUtXHUwZDk2XHUwZDlhLVx1MGRi
MVx1MGRiMy1cdTBkYmJcdTBkYmRcdTBkYzAtXHUwZGM2XHUwZTAxLVx1MGUzMFx1MGUzMlx1MGUz
M1x1MGU0MC1cdTBlNDZcdTBlODFcdTBlODJcdTBlODRcdTBlODdcdTBlODhcdTBlOGFcdTBlOGRc
dTBlOTQtXHUwZTk3XHUwZTk5LVx1MGU5Zlx1MGVhMS1cdTBlYTNcdTBlYTVcdTBlYTdcdTBlYWFc
dTBlYWJcdTBlYWQtXHUwZWIwXHUwZWIyXHUwZWIzXHUwZWJkXHUwZWMwLVx1MGVjNFx1MGVjNlx1
MGVkYy1cdTBlZGZcdTBmMDBcdTBmNDAtXHUwZjQ3XHUwZjQ5LVx1MGY2Y1x1MGY4OC1cdTBmOGNc
dTEwMDAtXHUxMDJhXHUxMDNmXHUxMDUwLVx1MTA1NVx1MTA1YS1cdTEwNWRcdTEwNjFcdTEwNjVc
dTEwNjZcdTEwNmUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4ZVx1MTBhMC1cdTEwYzVcdTEwYzdc
dTEwY2RcdTEwZDAtXHUxMGZhXHUxMGZjLVx1MTI0OFx1MTI0YS1cdTEyNGRcdTEyNTAtXHUxMjU2
XHUxMjU4XHUxMjVhLVx1MTI1ZFx1MTI2MC1cdTEyODhcdTEyOGEtXHUxMjhkXHUxMjkwLVx1MTJi
MFx1MTJiMi1cdTEyYjVcdTEyYjgtXHUxMmJlXHUxMmMwXHUxMmMyLVx1MTJjNVx1MTJjOC1cdTEy
ZDZcdTEyZDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNWFcdTEzODAtXHUxMzhmXHUx
M2EwLVx1MTNmNFx1MTQwMS1cdTE2NmNcdTE2NmYtXHUxNjdmXHUxNjgxLVx1MTY5YVx1MTZhMC1c
dTE2ZWFcdTE2ZWUtXHUxNmYwXHUxNzAwLVx1MTcwY1x1MTcwZS1cdTE3MTFcdTE3MjAtXHUxNzMx
XHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NmNcdTE3NmUtXHUxNzcwXHUxNzgwLVx1MTdiM1x1MTdk
N1x1MTdkY1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOGE4XHUxOGFhXHUxOGIwLVx1MThmNVx1MTkw
MC1cdTE5MWNcdTE5NTAtXHUxOTZkXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5YWJcdTE5YzEtXHUx
OWM3XHUxYTAwLVx1MWExNlx1MWEyMC1cdTFhNTRcdTFhYTdcdTFiMDUtXHUxYjMzXHUxYjQ1LVx1
MWI0Ylx1MWI4My1cdTFiYTBcdTFiYWVcdTFiYWZcdTFiYmEtXHUxYmU1XHUxYzAwLVx1MWMyM1x1
MWM0ZC1cdTFjNGZcdTFjNWEtXHUxYzdkXHUxY2U5LVx1MWNlY1x1MWNlZS1cdTFjZjFcdTFjZjVc
dTFjZjZcdTFkMDAtXHUxZGJmXHUxZTAwLVx1MWYxNVx1MWYxOC1cdTFmMWRcdTFmMjAtXHUxZjQ1
XHUxZjQ4LVx1MWY0ZFx1MWY1MC1cdTFmNTdcdTFmNTlcdTFmNWJcdTFmNWRcdTFmNWYtXHUxZjdk
XHUxZjgwLVx1MWZiNFx1MWZiNi1cdTFmYmNcdTFmYmVcdTFmYzItXHUxZmM0XHUxZmM2LVx1MWZj
Y1x1MWZkMC1cdTFmZDNcdTFmZDYtXHUxZmRiXHUxZmUwLVx1MWZlY1x1MWZmMi1cdTFmZjRcdTFm
ZjYtXHUxZmZjXHUyMDcxXHUyMDdmXHUyMDkwLVx1MjA5Y1x1MjEwMlx1MjEwN1x1MjEwYS1cdTIx
MTNcdTIxMTVcdTIxMTktXHUyMTFkXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJhLVx1MjEyZFx1MjEy
Zi1cdTIxMzlcdTIxM2MtXHUyMTNmXHUyMTQ1LVx1MjE0OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJj
MDAtXHUyYzJlXHUyYzMwLVx1MmM1ZVx1MmM2MC1cdTJjZTRcdTJjZWItXHUyY2VlXHUyY2YyXHUy
Y2YzXHUyZDAwLVx1MmQyNVx1MmQyN1x1MmQyZFx1MmQzMC1cdTJkNjdcdTJkNmZcdTJkODAtXHUy
ZDk2XHUyZGEwLVx1MmRhNlx1MmRhOC1cdTJkYWVcdTJkYjAtXHUyZGI2XHUyZGI4LVx1MmRiZVx1
MmRjMC1cdTJkYzZcdTJkYzgtXHUyZGNlXHUyZGQwLVx1MmRkNlx1MmRkOC1cdTJkZGVcdTJlMmZc
dTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNjXHUzMDQx
LVx1MzA5Nlx1MzA5ZC1cdTMwOWZcdTMwYTEtXHUzMGZhXHUzMGZjLVx1MzBmZlx1MzEwNS1cdTMx
MmRcdTMxMzEtXHUzMThlXHUzMWEwLVx1MzFiYVx1MzFmMC1cdTMxZmZcdTM0MDAtXHU0ZGI1XHU0
ZTAwLVx1OWZjY1x1YTAwMC1cdWE0OGNcdWE0ZDAtXHVhNGZkXHVhNTAwLVx1YTYwY1x1YTYxMC1c
dWE2MWZcdWE2MmFcdWE2MmJcdWE2NDAtXHVhNjZlXHVhNjdmLVx1YTY5N1x1YTZhMC1cdWE2ZWZc
dWE3MTctXHVhNzFmXHVhNzIyLVx1YTc4OFx1YTc4Yi1cdWE3OGVcdWE3OTAtXHVhNzkzXHVhN2Ew
LVx1YTdhYVx1YTdmOC1cdWE4MDFcdWE4MDMtXHVhODA1XHVhODA3LVx1YTgwYVx1YTgwYy1cdWE4
MjJcdWE4NDAtXHVhODczXHVhODgyLVx1YThiM1x1YThmMi1cdWE4ZjdcdWE4ZmJcdWE5MGEtXHVh
OTI1XHVhOTMwLVx1YTk0Nlx1YTk2MC1cdWE5N2NcdWE5ODQtXHVhOWIyXHVhOWNmXHVhYTAwLVx1
YWEyOFx1YWE0MC1cdWFhNDJcdWFhNDQtXHVhYTRiXHVhYTYwLVx1YWE3Nlx1YWE3YVx1YWE4MC1c
dWFhYWZcdWFhYjFcdWFhYjVcdWFhYjZcdWFhYjktXHVhYWJkXHVhYWMwXHVhYWMyXHVhYWRiLVx1
YWFkZFx1YWFlMC1cdWFhZWFcdWFhZjItXHVhYWY0XHVhYjAxLVx1YWIwNlx1YWIwOS1cdWFiMGVc
dWFiMTEtXHVhYjE2XHVhYjIwLVx1YWIyNlx1YWIyOC1cdWFiMmVcdWFiYzAtXHVhYmUyXHVhYzAw
LVx1ZDdhM1x1ZDdiMC1cdWQ3YzZcdWQ3Y2ItXHVkN2ZiXHVmOTAwLVx1ZmE2ZFx1ZmE3MC1cdWZh
ZDlcdWZiMDAtXHVmYjA2XHVmYjEzLVx1ZmIxN1x1ZmIxZFx1ZmIxZi1cdWZiMjhcdWZiMmEtXHVm
YjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0MFx1ZmI0MVx1ZmI0M1x1ZmI0NFx1ZmI0Ni1cdWZi
YjFcdWZiZDMtXHVmZDNkXHVmZDUwLVx1ZmQ4Zlx1ZmQ5Mi1cdWZkYzdcdWZkZjAtXHVmZGZiXHVm
ZTcwLVx1ZmU3NFx1ZmU3Ni1cdWZlZmNcdWZmMjEtXHVmZjNhXHVmZjQxLVx1ZmY1YVx1ZmY2Ni1c
dWZmYmVcdWZmYzItXHVmZmM3XHVmZmNhLVx1ZmZjZlx1ZmZkMi1cdWZmZDdcdWZmZGEtXHVmZmRj
XScpLAotICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OiBuZXcgUmVnRXhwKCdbXHhhYVx4
YjVceGJhXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1cdTAyYzFcdTAyYzYtXHUwMmQxXHUwMmUwLVx1
MDJlNFx1MDJlY1x1MDJlZVx1MDMwMC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN2EtXHUwMzdkXHUw
Mzg2XHUwMzg4LVx1MDM4YVx1MDM4Y1x1MDM4ZS1cdTAzYTFcdTAzYTMtXHUwM2Y1XHUwM2Y3LVx1
MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OGEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1c
dTA1ODdcdTA1OTEtXHUwNWJkXHUwNWJmXHUwNWMxXHUwNWMyXHUwNWM0XHUwNWM1XHUwNWM3XHUw
NWQwLVx1MDVlYVx1MDVmMC1cdTA1ZjJcdTA2MTAtXHUwNjFhXHUwNjIwLVx1MDY2OVx1MDY2ZS1c
dTA2ZDNcdTA2ZDUtXHUwNmRjXHUwNmRmLVx1MDZlOFx1MDZlYS1cdTA2ZmNcdTA2ZmZcdTA3MTAt
XHUwNzRhXHUwNzRkLVx1MDdiMVx1MDdjMC1cdTA3ZjVcdTA3ZmFcdTA4MDAtXHUwODJkXHUwODQw
LVx1MDg1Ylx1MDhhMFx1MDhhMi1cdTA4YWNcdTA4ZTQtXHUwOGZlXHUwOTAwLVx1MDk2M1x1MDk2
Ni1cdTA5NmZcdTA5NzEtXHUwOTc3XHUwOTc5LVx1MDk3Zlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUw
OThjXHUwOThmXHUwOTkwXHUwOTkzLVx1MDlhOFx1MDlhYS1cdTA5YjBcdTA5YjJcdTA5YjYtXHUw
OWI5XHUwOWJjLVx1MDljNFx1MDljN1x1MDljOFx1MDljYi1cdTA5Y2VcdTA5ZDdcdTA5ZGNcdTA5
ZGRcdTA5ZGYtXHUwOWUzXHUwOWU2LVx1MDlmMVx1MGEwMS1cdTBhMDNcdTBhMDUtXHUwYTBhXHUw
YTBmXHUwYTEwXHUwYTEzLVx1MGEyOFx1MGEyYS1cdTBhMzBcdTBhMzJcdTBhMzNcdTBhMzVcdTBh
MzZcdTBhMzhcdTBhMzlcdTBhM2NcdTBhM2UtXHUwYTQyXHUwYTQ3XHUwYTQ4XHUwYTRiLVx1MGE0
ZFx1MGE1MVx1MGE1OS1cdTBhNWNcdTBhNWVcdTBhNjYtXHUwYTc1XHUwYTgxLVx1MGE4M1x1MGE4
NS1cdTBhOGRcdTBhOGYtXHUwYTkxXHUwYTkzLVx1MGFhOFx1MGFhYS1cdTBhYjBcdTBhYjJcdTBh
YjNcdTBhYjUtXHUwYWI5XHUwYWJjLVx1MGFjNVx1MGFjNy1cdTBhYzlcdTBhY2ItXHUwYWNkXHUw
YWQwXHUwYWUwLVx1MGFlM1x1MGFlNi1cdTBhZWZcdTBiMDEtXHUwYjAzXHUwYjA1LVx1MGIwY1x1
MGIwZlx1MGIxMFx1MGIxMy1cdTBiMjhcdTBiMmEtXHUwYjMwXHUwYjMyXHUwYjMzXHUwYjM1LVx1
MGIzOVx1MGIzYy1cdTBiNDRcdTBiNDdcdTBiNDhcdTBiNGItXHUwYjRkXHUwYjU2XHUwYjU3XHUw
YjVjXHUwYjVkXHUwYjVmLVx1MGI2M1x1MGI2Ni1cdTBiNmZcdTBiNzFcdTBiODJcdTBiODNcdTBi
ODUtXHUwYjhhXHUwYjhlLVx1MGI5MFx1MGI5Mi1cdTBiOTVcdTBiOTlcdTBiOWFcdTBiOWNcdTBi
OWVcdTBiOWZcdTBiYTNcdTBiYTRcdTBiYTgtXHUwYmFhXHUwYmFlLVx1MGJiOVx1MGJiZS1cdTBi
YzJcdTBiYzYtXHUwYmM4XHUwYmNhLVx1MGJjZFx1MGJkMFx1MGJkN1x1MGJlNi1cdTBiZWZcdTBj
MDEtXHUwYzAzXHUwYzA1LVx1MGMwY1x1MGMwZS1cdTBjMTBcdTBjMTItXHUwYzI4XHUwYzJhLVx1
MGMzM1x1MGMzNS1cdTBjMzlcdTBjM2QtXHUwYzQ0XHUwYzQ2LVx1MGM0OFx1MGM0YS1cdTBjNGRc
dTBjNTVcdTBjNTZcdTBjNThcdTBjNTlcdTBjNjAtXHUwYzYzXHUwYzY2LVx1MGM2Zlx1MGM4Mlx1
MGM4M1x1MGM4NS1cdTBjOGNcdTBjOGUtXHUwYzkwXHUwYzkyLVx1MGNhOFx1MGNhYS1cdTBjYjNc
dTBjYjUtXHUwY2I5XHUwY2JjLVx1MGNjNFx1MGNjNi1cdTBjYzhcdTBjY2EtXHUwY2NkXHUwY2Q1
XHUwY2Q2XHUwY2RlXHUwY2UwLVx1MGNlM1x1MGNlNi1cdTBjZWZcdTBjZjFcdTBjZjJcdTBkMDJc
dTBkMDNcdTBkMDUtXHUwZDBjXHUwZDBlLVx1MGQxMFx1MGQxMi1cdTBkM2FcdTBkM2QtXHUwZDQ0
XHUwZDQ2LVx1MGQ0OFx1MGQ0YS1cdTBkNGVcdTBkNTdcdTBkNjAtXHUwZDYzXHUwZDY2LVx1MGQ2
Zlx1MGQ3YS1cdTBkN2ZcdTBkODJcdTBkODNcdTBkODUtXHUwZDk2XHUwZDlhLVx1MGRiMVx1MGRi
My1cdTBkYmJcdTBkYmRcdTBkYzAtXHUwZGM2XHUwZGNhXHUwZGNmLVx1MGRkNFx1MGRkNlx1MGRk
OC1cdTBkZGZcdTBkZjJcdTBkZjNcdTBlMDEtXHUwZTNhXHUwZTQwLVx1MGU0ZVx1MGU1MC1cdTBl
NTlcdTBlODFcdTBlODJcdTBlODRcdTBlODdcdTBlODhcdTBlOGFcdTBlOGRcdTBlOTQtXHUwZTk3
XHUwZTk5LVx1MGU5Zlx1MGVhMS1cdTBlYTNcdTBlYTVcdTBlYTdcdTBlYWFcdTBlYWJcdTBlYWQt
XHUwZWI5XHUwZWJiLVx1MGViZFx1MGVjMC1cdTBlYzRcdTBlYzZcdTBlYzgtXHUwZWNkXHUwZWQw
LVx1MGVkOVx1MGVkYy1cdTBlZGZcdTBmMDBcdTBmMThcdTBmMTlcdTBmMjAtXHUwZjI5XHUwZjM1
XHUwZjM3XHUwZjM5XHUwZjNlLVx1MGY0N1x1MGY0OS1cdTBmNmNcdTBmNzEtXHUwZjg0XHUwZjg2
LVx1MGY5N1x1MGY5OS1cdTBmYmNcdTBmYzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5ZFx1MTBh
MC1cdTEwYzVcdTEwYzdcdTEwY2RcdTEwZDAtXHUxMGZhXHUxMGZjLVx1MTI0OFx1MTI0YS1cdTEy
NGRcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVhLVx1MTI1ZFx1MTI2MC1cdTEyODhcdTEyOGEtXHUx
MjhkXHUxMjkwLVx1MTJiMFx1MTJiMi1cdTEyYjVcdTEyYjgtXHUxMmJlXHUxMmMwXHUxMmMyLVx1
MTJjNVx1MTJjOC1cdTEyZDZcdTEyZDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNWFc
dTEzNWQtXHUxMzVmXHUxMzgwLVx1MTM4Zlx1MTNhMC1cdTEzZjRcdTE0MDEtXHUxNjZjXHUxNjZm
LVx1MTY3Zlx1MTY4MS1cdTE2OWFcdTE2YTAtXHUxNmVhXHUxNmVlLVx1MTZmMFx1MTcwMC1cdTE3
MGNcdTE3MGUtXHUxNzE0XHUxNzIwLVx1MTczNFx1MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZjXHUx
NzZlLVx1MTc3MFx1MTc3Mlx1MTc3M1x1MTc4MC1cdTE3ZDNcdTE3ZDdcdTE3ZGNcdTE3ZGRcdTE3
ZTAtXHUxN2U5XHUxODBiLVx1MTgwZFx1MTgxMC1cdTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1
MThhYVx1MThiMC1cdTE4ZjVcdTE5MDAtXHUxOTFjXHUxOTIwLVx1MTkyYlx1MTkzMC1cdTE5M2Jc
dTE5NDYtXHUxOTZkXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5YWJcdTE5YjAtXHUxOWM5XHUxOWQw
LVx1MTlkOVx1MWEwMC1cdTFhMWJcdTFhMjAtXHUxYTVlXHUxYTYwLVx1MWE3Y1x1MWE3Zi1cdTFh
ODlcdTFhOTAtXHUxYTk5XHUxYWE3XHUxYjAwLVx1MWI0Ylx1MWI1MC1cdTFiNTlcdTFiNmItXHUx
YjczXHUxYjgwLVx1MWJmM1x1MWMwMC1cdTFjMzdcdTFjNDAtXHUxYzQ5XHUxYzRkLVx1MWM3ZFx1
MWNkMC1cdTFjZDJcdTFjZDQtXHUxY2Y2XHUxZDAwLVx1MWRlNlx1MWRmYy1cdTFmMTVcdTFmMTgt
XHUxZjFkXHUxZjIwLVx1MWY0NVx1MWY0OC1cdTFmNGRcdTFmNTAtXHUxZjU3XHUxZjU5XHUxZjVi
XHUxZjVkXHUxZjVmLVx1MWY3ZFx1MWY4MC1cdTFmYjRcdTFmYjYtXHUxZmJjXHUxZmJlXHUxZmMy
LVx1MWZjNFx1MWZjNi1cdTFmY2NcdTFmZDAtXHUxZmQzXHUxZmQ2LVx1MWZkYlx1MWZlMC1cdTFm
ZWNcdTFmZjItXHUxZmY0XHUxZmY2LVx1MWZmY1x1MjAwY1x1MjAwZFx1MjAzZlx1MjA0MFx1MjA1
NFx1MjA3MVx1MjA3Zlx1MjA5MC1cdTIwOWNcdTIwZDAtXHUyMGRjXHUyMGUxXHUyMGU1LVx1MjBm
MFx1MjEwMlx1MjEwN1x1MjEwYS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFkXHUyMTI0XHUyMTI2
XHUyMTI4XHUyMTJhLVx1MjEyZFx1MjEyZi1cdTIxMzlcdTIxM2MtXHUyMTNmXHUyMTQ1LVx1MjE0
OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJjMDAtXHUyYzJlXHUyYzMwLVx1MmM1ZVx1MmM2MC1cdTJj
ZTRcdTJjZWItXHUyY2YzXHUyZDAwLVx1MmQyNVx1MmQyN1x1MmQyZFx1MmQzMC1cdTJkNjdcdTJk
NmZcdTJkN2YtXHUyZDk2XHUyZGEwLVx1MmRhNlx1MmRhOC1cdTJkYWVcdTJkYjAtXHUyZGI2XHUy
ZGI4LVx1MmRiZVx1MmRjMC1cdTJkYzZcdTJkYzgtXHUyZGNlXHUyZGQwLVx1MmRkNlx1MmRkOC1c
dTJkZGVcdTJkZTAtXHUyZGZmXHUyZTJmXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMmZcdTMwMzEt
XHUzMDM1XHUzMDM4LVx1MzAzY1x1MzA0MS1cdTMwOTZcdTMwOTlcdTMwOWFcdTMwOWQtXHUzMDlm
XHUzMGExLVx1MzBmYVx1MzBmYy1cdTMwZmZcdTMxMDUtXHUzMTJkXHUzMTMxLVx1MzE4ZVx1MzFh
MC1cdTMxYmFcdTMxZjAtXHUzMWZmXHUzNDAwLVx1NGRiNVx1NGUwMC1cdTlmY2NcdWEwMDAtXHVh
NDhjXHVhNGQwLVx1YTRmZFx1YTUwMC1cdWE2MGNcdWE2MTAtXHVhNjJiXHVhNjQwLVx1YTY2Zlx1
YTY3NC1cdWE2N2RcdWE2N2YtXHVhNjk3XHVhNjlmLVx1YTZmMVx1YTcxNy1cdWE3MWZcdWE3MjIt
XHVhNzg4XHVhNzhiLVx1YTc4ZVx1YTc5MC1cdWE3OTNcdWE3YTAtXHVhN2FhXHVhN2Y4LVx1YTgy
N1x1YTg0MC1cdWE4NzNcdWE4ODAtXHVhOGM0XHVhOGQwLVx1YThkOVx1YThlMC1cdWE4ZjdcdWE4
ZmJcdWE5MDAtXHVhOTJkXHVhOTMwLVx1YTk1M1x1YTk2MC1cdWE5N2NcdWE5ODAtXHVhOWMwXHVh
OWNmLVx1YTlkOVx1YWEwMC1cdWFhMzZcdWFhNDAtXHVhYTRkXHVhYTUwLVx1YWE1OVx1YWE2MC1c
dWFhNzZcdWFhN2FcdWFhN2JcdWFhODAtXHVhYWMyXHVhYWRiLVx1YWFkZFx1YWFlMC1cdWFhZWZc
dWFhZjItXHVhYWY2XHVhYjAxLVx1YWIwNlx1YWIwOS1cdWFiMGVcdWFiMTEtXHVhYjE2XHVhYjIw
LVx1YWIyNlx1YWIyOC1cdWFiMmVcdWFiYzAtXHVhYmVhXHVhYmVjXHVhYmVkXHVhYmYwLVx1YWJm
OVx1YWMwMC1cdWQ3YTNcdWQ3YjAtXHVkN2M2XHVkN2NiLVx1ZDdmYlx1ZjkwMC1cdWZhNmRcdWZh
NzAtXHVmYWQ5XHVmYjAwLVx1ZmIwNlx1ZmIxMy1cdWZiMTdcdWZiMWQtXHVmYjI4XHVmYjJhLVx1
ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZiNDBcdWZiNDFcdWZiNDNcdWZiNDRcdWZiNDYtXHVm
YmIxXHVmYmQzLVx1ZmQzZFx1ZmQ1MC1cdWZkOGZcdWZkOTItXHVmZGM3XHVmZGYwLVx1ZmRmYlx1
ZmUwMC1cdWZlMGZcdWZlMjAtXHVmZTI2XHVmZTMzXHVmZTM0XHVmZTRkLVx1ZmU0Zlx1ZmU3MC1c
dWZlNzRcdWZlNzYtXHVmZWZjXHVmZjEwLVx1ZmYxOVx1ZmYyMS1cdWZmM2FcdWZmM2ZcdWZmNDEt
XHVmZjVhXHVmZjY2LVx1ZmZiZVx1ZmZjMi1cdWZmYzdcdWZmY2EtXHVmZmNmXHVmZmQyLVx1ZmZk
N1x1ZmZkYS1cdWZmZGNdJykKKyAgICAgICAgLy8gRUNNQVNjcmlwdCA2L1VuaWNvZGUgdjcuMC4w
IE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OgorICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFy
dDogL1tceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAy
RDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3
QS1cdTAzN0RcdTAzN0ZcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNB
My1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1
NjEtXHUwNTg3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUw
NjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRVx1MDZFRlx1MDZGQS1cdTA2
RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3
RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQw
LVx1MDg1OFx1MDhBMC1cdTA4QjJcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2
MVx1MDk3MS1cdTA5ODBcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlB
QS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURG
LVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4
XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1MEE1OS1c
dTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMt
XHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBc
dTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1c
dTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1
MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1
MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBC
QUUtXHUwQkI5XHUwQkQwXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUw
QzJBLVx1MEMzOVx1MEMzRFx1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBD
OEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUw
Q0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBE
MTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBE
OTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUw
RTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4
OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM1x1MEVB
NVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAt
XHUwRUM0XHUwRUM2XHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZD
XHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1
RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXHUxMDhFXHUxMEEw
LVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0
RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEy
OERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUx
MkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1
MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEt
XHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjhcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcx
MVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3
ODAtXHUxN0IzXHUxN0Q3XHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4
QjAtXHUxOEY1XHUxOTAwLVx1MTkxRVx1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1
MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1c
dTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRlx1MUJCQS1cdTFCRTVc
dTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXHUxQ0VF
LVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYx
RFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1
RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFG
QzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUx
RkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZcdTIwOTAtXHUyMDlDXHUyMTAyXHUy
MTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOC1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIx
MkEtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUyMTg4XHUy
QzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1
MkNGM1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1
MkQ5Nlx1MkRBMC1cdTJEQTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVc
dTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUzMDA1
LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMw
OTZcdTMwOUItXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXHUz
MTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1c
dTlGQ0NcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFG
XHVBNjJBXHVBNjJCXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OURcdUE2QTAtXHVBNkVGXHVBNzE3
LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTdBRFx1QTdCMFx1QTdC
MVx1QTdGNy1cdUE4MDFcdUE4MDMtXHVBODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4
NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJcdUE5MEEtXHVBOTI1XHVB
OTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBOUUwLVx1QTlFNFx1
QTlFNi1cdUE5RUZcdUE5RkEtXHVBOUZFXHVBQTAwLVx1QUEyOFx1QUE0MC1cdUFBNDJcdUFBNDQt
XHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE3RS1cdUFBQUZcdUFBQjFcdUFBQjVcdUFBQjZc
dUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjIt
XHVBQUY0XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIy
Nlx1QUIyOC1cdUFCMkVcdUFCMzAtXHVBQjVBXHVBQjVDLVx1QUI1Rlx1QUI2NFx1QUI2NVx1QUJD
MC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVG
QTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1
RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVG
QjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1
RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYyMS1cdUZGM0FcdUZGNDEt
XHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZE
N1x1RkZEQS1cdUZGRENdfFx1RDgwMFtcdURDMDAtXHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1c
dURDM0FcdURDM0NcdURDM0RcdURDM0YtXHVEQzREXHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFc
dURENDAtXHVERDc0XHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURGMDAtXHVERjFGXHVERjMw
LVx1REY0QVx1REY1MC1cdURGNzVcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURG
Q0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVEQzAwLVx1REM5RFx1REQwMC1cdUREMjdcdUREMzAt
XHVERDYzXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XXxcdUQ4MDJbXHVE
QzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVE
QzU1XHVEQzYwLVx1REM3Nlx1REM4MC1cdURDOUVcdUREMDAtXHVERDE1XHVERDIwLVx1REQzOVx1
REQ4MC1cdUREQjdcdUREQkVcdUREQkZcdURFMDBcdURFMTAtXHVERTEzXHVERTE1LVx1REUxN1x1
REUxOS1cdURFMzNcdURFNjAtXHVERTdDXHVERTgwLVx1REU5Q1x1REVDMC1cdURFQzdcdURFQzkt
XHVERUU0XHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNjAtXHVERjcyXHVERjgwLVx1REY5
MV18XHVEODAzW1x1REMwMC1cdURDNDhdfFx1RDgwNFtcdURDMDMtXHVEQzM3XHVEQzgzLVx1RENB
Rlx1RENEMC1cdURDRThcdUREMDMtXHVERDI2XHVERDUwLVx1REQ3Mlx1REQ3Nlx1REQ4My1cdURE
QjJcdUREQzEtXHVEREM0XHVERERBXHVERTAwLVx1REUxMVx1REUxMy1cdURFMkJcdURFQjAtXHVE
RURFXHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVE
RjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1REY1RC1cdURGNjFdfFx1RDgwNVtcdURDODAt
XHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVERDgwLVx1RERBRVx1REUwMC1cdURFMkZcdURFNDRc
dURFODAtXHVERUFBXXxcdUQ4MDZbXHVEQ0EwLVx1RENERlx1RENGRlx1REVDMC1cdURFRjhdfFx1
RDgwOFtcdURDMDAtXHVERjk4XXxcdUQ4MDlbXHVEQzAwLVx1REM2RV18W1x1RDgwQ1x1RDg0MC1c
dUQ4NjhcdUQ4NkEtXHVEODZDXVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRV18
XHVEODFBW1x1REMwMC1cdURFMzhcdURFNDAtXHVERTVFXHVERUQwLVx1REVFRFx1REYwMC1cdURG
MkZcdURGNDAtXHVERjQzXHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltcdURGMDAt
XHVERjQ0XHVERjUwXHVERjkzLVx1REY5Rl18XHVEODJDW1x1REMwMFx1REMwMV18XHVEODJGW1x1
REMwMC1cdURDNkFcdURDNzAtXHVEQzdDXHVEQzgwLVx1REM4OFx1REM5MC1cdURDOTldfFx1RDgz
NVtcdURDMDAtXHVEQzU0XHVEQzU2LVx1REM5Q1x1REM5RVx1REM5Rlx1RENBMlx1RENBNVx1RENB
Nlx1RENBOS1cdURDQUNcdURDQUUtXHVEQ0I5XHVEQ0JCXHVEQ0JELVx1RENDM1x1RENDNS1cdURE
MDVcdUREMDctXHVERDBBXHVERDBELVx1REQxNFx1REQxNi1cdUREMUNcdUREMUUtXHVERDM5XHVE
RDNCLVx1REQzRVx1REQ0MC1cdURENDRcdURENDZcdURENEEtXHVERDUwXHVERDUyLVx1REVBNVx1
REVBOC1cdURFQzBcdURFQzItXHVERURBXHVERURDLVx1REVGQVx1REVGQy1cdURGMTRcdURGMTYt
XHVERjM0XHVERjM2LVx1REY0RVx1REY1MC1cdURGNkVcdURGNzAtXHVERjg4XHVERjhBLVx1REZB
OFx1REZBQS1cdURGQzJcdURGQzQtXHVERkNCXXxcdUQ4M0FbXHVEQzAwLVx1RENDNF18XHVEODNC
W1x1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5
LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJc
dURFNEQtXHVERTRGXHVERTUxXHVERTUyXHVERTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVE
RTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVE
RTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1
REVBM1x1REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxcdUQ4NjlbXHVEQzAwLVx1REVENlx1REYw
MC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVERjM0XHVERjQwLVx1REZGRl18XHVEODZFW1x1REMw
MC1cdURDMURdfFx1RDg3RVtcdURDMDAtXHVERTFEXS8sCisKKyAgICAgICAgLy8gRUNNQVNjcmlw
dCA2L1VuaWNvZGUgdjcuMC4wIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6CisgICAgICAgIE5vbkFz
Y2lpSWRlbnRpZmllclBhcnQ6IC9bXHhBQVx4QjVceEI3XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4
RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzMDAtXHUw
Mzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3Rlx1MDM4Ni1cdTAzOEFcdTAzOENcdTAz
OEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0ODMtXHUwNDg3XHUwNDhBLVx1
MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNTkxLVx1MDVCRFx1MDVCRlx1
MDVDMVx1MDVDMlx1MDVDNFx1MDVDNVx1MDVDN1x1MDVEMC1cdTA1RUFcdTA1RjAtXHUwNUYyXHUw
NjEwLVx1MDYxQVx1MDYyMC1cdTA2NjlcdTA2NkUtXHUwNkQzXHUwNkQ1LVx1MDZEQ1x1MDZERi1c
dTA2RThcdTA2RUEtXHUwNkZDXHUwNkZGXHUwNzEwLVx1MDc0QVx1MDc0RC1cdTA3QjFcdTA3QzAt
XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgyRFx1MDg0MC1cdTA4NUJcdTA4QTAtXHUwOEIyXHUwOEU0
LVx1MDk2M1x1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTgzXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5
MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCQy1cdTA5
QzRcdTA5QzdcdTA5QzhcdTA5Q0ItXHUwOUNFXHUwOUQ3XHUwOURDXHUwOUREXHUwOURGLVx1MDlF
M1x1MDlFNi1cdTA5RjFcdTBBMDEtXHUwQTAzXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEEx
My1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5
XHUwQTNDXHUwQTNFLVx1MEE0Mlx1MEE0N1x1MEE0OFx1MEE0Qi1cdTBBNERcdTBBNTFcdTBBNTkt
XHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE3NVx1MEE4MS1cdTBBODNcdTBBODUtXHUwQThEXHUwQThG
LVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFC
OVx1MEFCQy1cdTBBQzVcdTBBQzctXHUwQUM5XHUwQUNCLVx1MEFDRFx1MEFEMFx1MEFFMC1cdTBB
RTNcdTBBRTYtXHUwQUVGXHUwQjAxLVx1MEIwM1x1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBC
MTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0MtXHUw
QjQ0XHUwQjQ3XHUwQjQ4XHUwQjRCLVx1MEI0RFx1MEI1Nlx1MEI1N1x1MEI1Q1x1MEI1RFx1MEI1
Ri1cdTBCNjNcdTBCNjYtXHUwQjZGXHUwQjcxXHUwQjgyXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4
RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEz
XHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCQkUtXHUwQkMyXHUwQkM2LVx1MEJD
OFx1MEJDQS1cdTBCQ0RcdTBCRDBcdTBCRDdcdTBCRTYtXHUwQkVGXHUwQzAwLVx1MEMwM1x1MEMw
NS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzlcdTBDM0QtXHUw
QzQ0XHUwQzQ2LVx1MEM0OFx1MEM0QS1cdTBDNERcdTBDNTVcdTBDNTZcdTBDNThcdTBDNTlcdTBD
NjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4MS1cdTBDODNcdTBDODUtXHUwQzhDXHUwQzhFLVx1
MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCQy1cdTBDQzRc
dTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENENVx1MENENlx1MENERVx1MENFMC1cdTBDRTNc
dTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDAxLVx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUt
XHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRC1cdTBENDRcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0
RVx1MEQ1N1x1MEQ2MC1cdTBENjNcdTBENjYtXHUwRDZGXHUwRDdBLVx1MEQ3Rlx1MEQ4Mlx1MEQ4
M1x1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBE
QzZcdTBEQ0FcdTBEQ0YtXHUwREQ0XHUwREQ2XHUwREQ4LVx1MERERlx1MERFNi1cdTBERUZcdTBE
RjJcdTBERjNcdTBFMDEtXHUwRTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBF
ODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5
Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJC
LVx1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVE
Qy1cdTBFREZcdTBGMDBcdTBGMThcdTBGMTlcdTBGMjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5
XHUwRjNFLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5
OS1cdTBGQkNcdTBGQzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEw
QzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUx
MjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1
MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1c
dTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVG
XHUxMzY5LVx1MTM3MVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q1x1MTY2
Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjhcdTE3MDAtXHUx
NzBDXHUxNzBFLVx1MTcxNFx1MTcyMC1cdTE3MzRcdTE3NDAtXHUxNzUzXHUxNzYwLVx1MTc2Q1x1
MTc2RS1cdTE3NzBcdTE3NzJcdTE3NzNcdTE3ODAtXHUxN0QzXHUxN0Q3XHUxN0RDXHUxN0REXHUx
N0UwLVx1MTdFOVx1MTgwQi1cdTE4MERcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3N1x1MTg4MC1c
dTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxRVx1MTkyMC1cdTE5MkJcdTE5MzAtXHUxOTNC
XHUxOTQ2LVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1MTlE
MC1cdTE5REFcdTFBMDAtXHUxQTFCXHUxQTIwLVx1MUE1RVx1MUE2MC1cdTFBN0NcdTFBN0YtXHUx
QTg5XHUxQTkwLVx1MUE5OVx1MUFBN1x1MUFCMC1cdTFBQkRcdTFCMDAtXHUxQjRCXHUxQjUwLVx1
MUI1OVx1MUI2Qi1cdTFCNzNcdTFCODAtXHUxQkYzXHUxQzAwLVx1MUMzN1x1MUM0MC1cdTFDNDlc
dTFDNEQtXHUxQzdEXHUxQ0QwLVx1MUNEMlx1MUNENC1cdTFDRjZcdTFDRjhcdTFDRjlcdTFEMDAt
XHUxREY1XHUxREZDLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0
RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZC
NFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFG
RDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUy
MDBDXHUyMDBEXHUyMDNGXHUyMDQwXHUyMDU0XHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjBE
MC1cdTIwRENcdTIwRTFcdTIwRTUtXHUyMEYwXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjEx
NVx1MjExOC1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTM5XHUyMTNDLVx1MjEz
Rlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUyMTg4XHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJD
NUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNGM1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJE
MzAtXHUyRDY3XHUyRDZGXHUyRDdGLVx1MkQ5Nlx1MkRBMC1cdTJEQTZcdTJEQTgtXHUyREFFXHUy
REIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1c
dTJERDZcdTJERDgtXHUyRERFXHUyREUwLVx1MkRGRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDJG
XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUzMDk5LVx1MzA5Rlx1MzBB
MS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxQTAtXHUz
MUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXHVBMDAwLVx1QTQ4Q1x1
QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYyQlx1QTY0MC1cdUE2NkZcdUE2NzQt
XHVBNjdEXHVBNjdGLVx1QTY5RFx1QTY5Ri1cdUE2RjFcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4
OFx1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBN0FEXHVBN0IwXHVBN0IxXHVBN0Y3LVx1QTgyN1x1QTg0
MC1cdUE4NzNcdUE4ODAtXHVBOEM0XHVBOEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE5
MDAtXHVBOTJEXHVBOTMwLVx1QTk1M1x1QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1
QTlEOVx1QTlFMC1cdUE5RkVcdUFBMDAtXHVBQTM2XHVBQTQwLVx1QUE0RFx1QUE1MC1cdUFBNTlc
dUFBNjAtXHVBQTc2XHVBQTdBLVx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVGXHVBQUYy
LVx1QUFGNlx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFC
MjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1cdUFCNUZcdUFCNjRcdUFCNjVcdUFC
QzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVE
N0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1
RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0Vc
dUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1c
dUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVGRTJE
XHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjEw
LVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZD
Mi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdfFx1RDgwMFtc
dURDMDAtXHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1cdURDM0FcdURDM0NcdURDM0RcdURDM0Yt
XHVEQzREXHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFcdURENDAtXHVERDc0XHVEREZEXHVERTgw
LVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTBcdURGMDAtXHVERjFGXHVERjMwLVx1REY0QVx1REY1
MC1cdURGN0FcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVE
RkQ1XXxcdUQ4MDFbXHVEQzAwLVx1REM5RFx1RENBMC1cdURDQTlcdUREMDAtXHVERDI3XHVERDMw
LVx1REQ2M1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N118XHVEODAyW1x1
REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNGLVx1
REM1NVx1REM2MC1cdURDNzZcdURDODAtXHVEQzlFXHVERDAwLVx1REQxNVx1REQyMC1cdUREMzlc
dUREODAtXHVEREI3XHVEREJFXHVEREJGXHVERTAwLVx1REUwM1x1REUwNVx1REUwNlx1REUwQy1c
dURFMTNcdURFMTUtXHVERTE3XHVERTE5LVx1REUzM1x1REUzOC1cdURFM0FcdURFM0ZcdURFNjAt
XHVERTdDXHVERTgwLVx1REU5Q1x1REVDMC1cdURFQzdcdURFQzktXHVERUU2XHVERjAwLVx1REYz
NVx1REY0MC1cdURGNTVcdURGNjAtXHVERjcyXHVERjgwLVx1REY5MV18XHVEODAzW1x1REMwMC1c
dURDNDhdfFx1RDgwNFtcdURDMDAtXHVEQzQ2XHVEQzY2LVx1REM2Rlx1REM3Ri1cdURDQkFcdURD
RDAtXHVEQ0U4XHVEQ0YwLVx1RENGOVx1REQwMC1cdUREMzRcdUREMzYtXHVERDNGXHVERDUwLVx1
REQ3M1x1REQ3Nlx1REQ4MC1cdUREQzRcdURERDAtXHVERERBXHVERTAwLVx1REUxMVx1REUxMy1c
dURFMzdcdURFQjAtXHVERUVBXHVERUYwLVx1REVGOVx1REYwMS1cdURGMDNcdURGMDUtXHVERjBD
XHVERjBGXHVERjEwXHVERjEzLVx1REYyOFx1REYyQS1cdURGMzBcdURGMzJcdURGMzNcdURGMzUt
XHVERjM5XHVERjNDLVx1REY0NFx1REY0N1x1REY0OFx1REY0Qi1cdURGNERcdURGNTdcdURGNUQt
XHVERjYzXHVERjY2LVx1REY2Q1x1REY3MC1cdURGNzRdfFx1RDgwNVtcdURDODAtXHVEQ0M1XHVE
Q0M3XHVEQ0QwLVx1RENEOVx1REQ4MC1cdUREQjVcdUREQjgtXHVEREMwXHVERTAwLVx1REU0MFx1
REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVERUI3XHVERUMwLVx1REVDOV18XHVEODA2W1x1RENB
MC1cdURDRTlcdURDRkZcdURFQzAtXHVERUY4XXxcdUQ4MDhbXHVEQzAwLVx1REY5OF18XHVEODA5
W1x1REMwMC1cdURDNkVdfFtcdUQ4MENcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q11bXHVEQzAw
LVx1REZGRl18XHVEODBEW1x1REMwMC1cdURDMkVdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQw
LVx1REU1RVx1REU2MC1cdURFNjlcdURFRDAtXHVERUVEXHVERUYwLVx1REVGNFx1REYwMC1cdURG
MzZcdURGNDAtXHVERjQzXHVERjUwLVx1REY1OVx1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxc
dUQ4MUJbXHVERjAwLVx1REY0NFx1REY1MC1cdURGN0VcdURGOEYtXHVERjlGXXxcdUQ4MkNbXHVE
QzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4
XHVEQzkwLVx1REM5OVx1REM5RFx1REM5RV18XHVEODM0W1x1REQ2NS1cdURENjlcdURENkQtXHVE
RDcyXHVERDdCLVx1REQ4Mlx1REQ4NS1cdUREOEJcdUREQUEtXHVEREFEXHVERTQyLVx1REU0NF18
XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1
XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1
LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdURE
MzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVE
RUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1
REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEt
XHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JcdURGQ0UtXHVERkZGXXxcdUQ4M0FbXHVE
QzAwLVx1RENDNFx1RENEMC1cdURDRDZdfFx1RDgzQltcdURFMDAtXHVERTAzXHVERTA1LVx1REUx
Rlx1REUyMVx1REUyMlx1REUyNFx1REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5
XHVERTNCXHVERTQyXHVERTQ3XHVERTQ5XHVERTRCXHVERTRELVx1REU0Rlx1REU1MVx1REU1Mlx1
REU1NFx1REU1N1x1REU1OVx1REU1Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2
Ny1cdURFNkFcdURFNkMtXHVERTcyXHVERTc0LVx1REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURF
ODAtXHVERTg5XHVERThCLVx1REU5Qlx1REVBMS1cdURFQTNcdURFQTUtXHVERUE5XHVERUFCLVx1
REVCQl18XHVEODY5W1x1REMwMC1cdURFRDZcdURGMDAtXHVERkZGXXxcdUQ4NkRbXHVEQzAwLVx1
REYzNFx1REY0MC1cdURGRkZdfFx1RDg2RVtcdURDMDAtXHVEQzFEXXxcdUQ4N0VbXHVEQzAwLVx1
REUxRF18XHVEQjQwW1x1REQwMC1cdURERUZdLwogICAgIH07CiAKICAgICAvLyBFbnN1cmUgdGhl
IGNvbmRpdGlvbiBpcyB0cnVlLCBvdGhlcndpc2UgdGhyb3cgYW4gZXJyb3IuCkBAIC0yNTQsMzMg
KzI0Niw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmdW5jdGlvbiBTdHJpbmdNYXAoKSB7
Ci0gICAgICAgIHRoaXMuJGRhdGEgPSB7fTsKLSAgICB9Ci0KLSAgICBTdHJpbmdNYXAucHJvdG90
eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgICAga2V5ID0gJyQnICsga2V5OwotICAg
ICAgICByZXR1cm4gdGhpcy4kZGF0YVtrZXldOwotICAgIH07Ci0KLSAgICBTdHJpbmdNYXAucHJv
dG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0gICAgICAgIGtleSA9ICckJyAr
IGtleTsKLSAgICAgICAgdGhpcy4kZGF0YVtrZXldID0gdmFsdWU7Ci0gICAgICAgIHJldHVybiB0
aGlzOwotICAgIH07Ci0KLSAgICBTdHJpbmdNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChr
ZXkpIHsKLSAgICAgICAga2V5ID0gJyQnICsga2V5OwotICAgICAgICByZXR1cm4gT2JqZWN0LnBy
b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuJGRhdGEsIGtleSk7Ci0gICAgfTsKLQot
ICAgIFN0cmluZ01hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkgewotICAgICAg
ICBrZXkgPSAnJCcgKyBrZXk7Ci0gICAgICAgIHJldHVybiBkZWxldGUgdGhpcy4kZGF0YVtrZXld
OwotICAgIH07Ci0KICAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkgewotICAgICAgICBy
ZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45CisgICAgICAgIHJldHVybiAo
Y2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KTsgICAvLyAwLi45CiAgICAgfQogCiAgICAgZnVuY3Rp
b24gaXNIZXhEaWdpdChjaCkgewpAQCAtMjkxLDUxICsyNTgsNzMgQEAKICAgICAgICAgcmV0dXJu
ICcwMTIzNDU2NycuaW5kZXhPZihjaCkgPj0gMDsKICAgICB9CiAKKyAgICBmdW5jdGlvbiBvY3Rh
bFRvRGVjaW1hbChjaCkgeworICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVl
bmNlCisgICAgICAgIHZhciBvY3RhbCA9IChjaCAhPT0gJzAnKSwgY29kZSA9ICcwMTIzNDU2Nycu
aW5kZXhPZihjaCk7CisKKyAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxEaWdp
dChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgb2N0YWwgPSB0cnVlOworICAgICAgICAg
ICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7
CisKKyAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcg
c3RhcnRzCisgICAgICAgICAgICAvLyB3aXRoIDAsIDEsIDIsIDMKKyAgICAgICAgICAgIGlmICgn
MDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJgorICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxl
bmd0aCAmJgorICAgICAgICAgICAgICAgICAgICBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkp
IHsKKyAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yo
c291cmNlW2luZGV4KytdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICBjb2RlOiBjb2RlLAorICAgICAgICAgICAgb2N0YWw6IG9jdGFs
CisgICAgICAgIH07CisgICAgfQogCi0gICAgLy8gNy4yIFdoaXRlIFNwYWNlCisgICAgLy8gRUNN
QS0yNjIgMTEuMiBXaGl0ZSBTcGFjZQogCiAgICAgZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7
Ci0gICAgICAgIHJldHVybiAoY2ggPT09IDMyKSB8fCAgLy8gc3BhY2UKLSAgICAgICAgICAgIChj
aCA9PT0gOSkgfHwgICAgICAvLyB0YWIKLSAgICAgICAgICAgIChjaCA9PT0gMHhCKSB8fAotICAg
ICAgICAgICAgKGNoID09PSAweEMpIHx8Ci0gICAgICAgICAgICAoY2ggPT09IDB4QTApIHx8Ci0g
ICAgICAgICAgICAoY2ggPj0gMHgxNjgwICYmICdcdTE2ODBcdTE4MEVcdTIwMDBcdTIwMDFcdTIw
MDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZc
dTIwNUZcdTMwMDBcdUZFRkYnLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpID4gMCk7
CisgICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09
PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhBMCkgfHwKKyAgICAgICAgICAg
IChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBFLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAy
LCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDks
IDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZGXS5pbmRleE9mKGNoKSA+PSAw
KTsKICAgICB9CiAKLSAgICAvLyA3LjMgTGluZSBUZXJtaW5hdG9ycworICAgIC8vIEVDTUEtMjYy
IDExLjMgTGluZSBUZXJtaW5hdG9ycwogCiAgICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihj
aCkgewotICAgICAgICByZXR1cm4gKGNoID09PSAxMCkgfHwgKGNoID09PSAxMykgfHwgKGNoID09
PSAweDIwMjgpIHx8IChjaCA9PT0gMHgyMDI5KTsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgw
QSkgfHwgKGNoID09PSAweDBEKSB8fCAoY2ggPT09IDB4MjAyOCkgfHwgKGNoID09PSAweDIwMjkp
OwogICAgIH0KIAotICAgIC8vIDcuNiBJZGVudGlmaWVyIE5hbWVzIGFuZCBJZGVudGlmaWVycwor
ICAgIC8vIEVDTUEtMjYyIDExLjYgSWRlbnRpZmllciBOYW1lcyBhbmQgSWRlbnRpZmllcnMKKwor
ICAgIGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoY3ApIHsKKyAgICAgICAgcmV0dXJuIChjcCA8IDB4
MTAwMDApID8gU3RyaW5nLmZyb21DaGFyQ29kZShjcCkgOgorICAgICAgICAgICAgU3RyaW5nLmZy
b21DaGFyQ29kZSgweEQ4MDAgKyAoKGNwIC0gMHgxMDAwMCkgPj4gMTApKSArCisgICAgICAgICAg
ICBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4REMwMCArICgoY3AgLSAweDEwMDAwKSAmIDEwMjMpKTsK
KyAgICB9CiAKICAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkgewotICAgICAgICBy
ZXR1cm4gKGNoID09PSAzNikgfHwgKGNoID09PSA5NSkgfHwgIC8vICQgKGRvbGxhcikgYW5kIF8g
KHVuZGVyc2NvcmUpCi0gICAgICAgICAgICAoY2ggPj0gNjUgJiYgY2ggPD0gOTApIHx8ICAgICAg
ICAgLy8gQS4uWgotICAgICAgICAgICAgKGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgICAgICAg
IC8vIGEuLnoKLSAgICAgICAgICAgIChjaCA9PT0gOTIpIHx8ICAgICAgICAgICAgICAgICAgICAv
LyBcIChiYWNrc2xhc2gpCi0gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFz
Y2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTsKKyAgICAg
ICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFy
KSBhbmQgXyAodW5kZXJzY29yZSkKKyAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4
NUEpIHx8ICAgICAgICAgLy8gQS4uWgorICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0g
MHg3QSkgfHwgICAgICAgICAvLyBhLi56CisgICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAg
ICAgICAgICAgICAgICAgICAgIC8vIFwgKGJhY2tzbGFzaCkKKyAgICAgICAgICAgICgoY2ggPj0g
MHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdChmcm9tQ29kZVBvaW50
KGNoKSkpOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclBhcnQoY2gpIHsKLSAg
ICAgICAgcmV0dXJuIChjaCA9PT0gMzYpIHx8IChjaCA9PT0gOTUpIHx8ICAvLyAkIChkb2xsYXIp
IGFuZCBfICh1bmRlcnNjb3JlKQotICAgICAgICAgICAgKGNoID49IDY1ICYmIGNoIDw9IDkwKSB8
fCAgICAgICAgIC8vIEEuLloKLSAgICAgICAgICAgIChjaCA+PSA5NyAmJiBjaCA8PSAxMjIpIHx8
ICAgICAgICAvLyBhLi56Ci0gICAgICAgICAgICAoY2ggPj0gNDggJiYgY2ggPD0gNTcpIHx8ICAg
ICAgICAgLy8gMC4uOQotICAgICAgICAgICAgKGNoID09PSA5MikgfHwgICAgICAgICAgICAgICAg
ICAgIC8vIFwgKGJhY2tzbGFzaCkKLSAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXgu
Tm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7Cisg
ICAgICAgIHJldHVybiAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0gMHg1RikgfHwgIC8vICQgKGRv
bGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpCisgICAgICAgICAgICAoY2ggPj0gMHg0MSAmJiBjaCA8
PSAweDVBKSB8fCAgICAgICAgIC8vIEEuLloKKyAgICAgICAgICAgIChjaCA+PSAweDYxICYmIGNo
IDw9IDB4N0EpIHx8ICAgICAgICAgLy8gYS4uegorICAgICAgICAgICAgKGNoID49IDB4MzAgJiYg
Y2ggPD0gMHgzOSkgfHwgICAgICAgICAvLyAwLi45CisgICAgICAgICAgICAoY2ggPT09IDB4NUMp
IHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFwgKGJhY2tzbGFzaCkKKyAgICAgICAgICAgICgo
Y2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KGZyb21Db2Rl
UG9pbnQoY2gpKSk7CiAgICAgfQogCi0gICAgLy8gNy42LjEuMiBGdXR1cmUgUmVzZXJ2ZWQgV29y
ZHMKKyAgICAvLyBFQ01BLTI2MiAxMS42LjIuMiBGdXR1cmUgUmVzZXJ2ZWQgV29yZHMKIAogICAg
IGZ1bmN0aW9uIGlzRnV0dXJlUmVzZXJ2ZWRXb3JkKGlkKSB7CiAgICAgICAgIHN3aXRjaCAoaWQp
IHsKLSAgICAgICAgY2FzZSAnY2xhc3MnOgogICAgICAgICBjYXNlICdlbnVtJzoKICAgICAgICAg
Y2FzZSAnZXhwb3J0JzoKLSAgICAgICAgY2FzZSAnZXh0ZW5kcyc6CiAgICAgICAgIGNhc2UgJ2lt
cG9ydCc6CiAgICAgICAgIGNhc2UgJ3N1cGVyJzoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMzY1LDE2ICszNTQsMTIgQEAKICAgICAgICAgcmV0dXJuIGlkID09PSAnZXZhbCcgfHwgaWQg
PT09ICdhcmd1bWVudHMnOwogICAgIH0KIAotICAgIC8vIDcuNi4xLjEgS2V5d29yZHMKKyAgICAv
LyBFQ01BLTI2MiAxMS42LjIuMSBLZXl3b3JkcwogCiAgICAgZnVuY3Rpb24gaXNLZXl3b3JkKGlk
KSB7Ci0gICAgICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkKSkg
ewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KIAogICAgICAgICAvLyAnY29u
c3QnIGlzIHNwZWNpYWxpemVkIGFzIEtleXdvcmQgaW4gVjguCi0gICAgICAgIC8vICd5aWVsZCcg
aXMgb25seSB0cmVhdGVkIGFzIGEga2V5d29yZCBpbiBzdHJpY3QgbW9kZS4KLSAgICAgICAgLy8g
J2xldCcgaXMgZm9yIGNvbXBhdGlibGl0eSB3aXRoIFNwaWRlck1vbmtleSBhbmQgRVMubmV4dC4K
KyAgICAgICAgLy8gJ3lpZWxkJyBhbmQgJ2xldCcgYXJlIGZvciBjb21wYXRpYmlsaXR5IHdpdGgg
U3BpZGVyTW9ua2V5IGFuZCBFUy5uZXh0LgogICAgICAgICAvLyBTb21lIG90aGVycyBhcmUgZnJv
bSBmdXR1cmUgcmVzZXJ2ZWQgd29yZHMuCiAKICAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHsK
QEAgLTM4OCw3ICszNzMsNyBAQAogICAgICAgICAgICAgICAgIChpZCA9PT0gJ3ZvaWQnKSB8fCAo
aWQgPT09ICd3aXRoJykgfHwgKGlkID09PSAnZW51bScpOwogICAgICAgICBjYXNlIDU6CiAgICAg
ICAgICAgICByZXR1cm4gKGlkID09PSAnd2hpbGUnKSB8fCAoaWQgPT09ICdicmVhaycpIHx8IChp
ZCA9PT0gJ2NhdGNoJykgfHwKLSAgICAgICAgICAgICAgICAoaWQgPT09ICd0aHJvdycpIHx8IChp
ZCA9PT0gJ2NvbnN0JykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICd0aHJvdycpIHx8IChp
ZCA9PT0gJ2NvbnN0JykgfHwgKGlkID09PSAneWllbGQnKSB8fAogICAgICAgICAgICAgICAgIChp
ZCA9PT0gJ2NsYXNzJykgfHwgKGlkID09PSAnc3VwZXInKTsKICAgICAgICAgY2FzZSA2OgogICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3JldHVybicpIHx8IChpZCA9PT0gJ3R5cGVvZicpIHx8
IChpZCA9PT0gJ2RlbGV0ZScpIHx8CkBAIC00MDQsMTkgKzM4OSwxMyBAQAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgLy8gNy40IENvbW1lbnRzCisgICAgLy8gRUNNQS0yNjIgMTEuNCBDb21tZW50
cwogCiAgICAgZnVuY3Rpb24gYWRkQ29tbWVudCh0eXBlLCB2YWx1ZSwgc3RhcnQsIGVuZCwgbG9j
KSB7CiAgICAgICAgIHZhciBjb21tZW50OworCiAgICAgICAgIGFzc2VydCh0eXBlb2Ygc3RhcnQg
PT09ICdudW1iZXInLCAnQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb24nKTsKIAotICAg
ICAgICAvLyBCZWNhdXNlIHRoZSB3YXkgdGhlIGFjdHVhbCB0b2tlbiBpcyBzY2FubmVkLCBvZnRl
biB0aGUgY29tbWVudHMKLSAgICAgICAgLy8gKGlmIGFueSkgYXJlIHNraXBwZWQgdHdpY2UgZHVy
aW5nIHRoZSBsZXhpY2FsIGFuYWx5c2lzLgotICAgICAgICAvLyBUaHVzLCB3ZSBuZWVkIHRvIHNr
aXAgYWRkaW5nIGEgY29tbWVudCBpZiB0aGUgY29tbWVudCBhcnJheSBhbHJlYWR5Ci0gICAgICAg
IC8vIGhhbmRsZWQgaXQuCi0gICAgICAgIGlmIChzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID49IHN0
YXJ0KSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICAgICAgc3RhdGUubGFz
dENvbW1lbnRTdGFydCA9IHN0YXJ0OwogCiAgICAgICAgIGNvbW1lbnQgPSB7CkBAIC00MzYsMTQg
KzQxNSwxNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgZnVuY3Rpb24gc2tpcFNpbmdsZUxp
bmVDb21tZW50KCkgeworICAgIGZ1bmN0aW9uIHNraXBTaW5nbGVMaW5lQ29tbWVudChvZmZzZXQp
IHsKICAgICAgICAgdmFyIHN0YXJ0LCBsb2MsIGNoLCBjb21tZW50OwogCi0gICAgICAgIHN0YXJ0
ID0gaW5kZXggLSAyOworICAgICAgICBzdGFydCA9IGluZGV4IC0gb2Zmc2V0OwogICAgICAgICBs
b2MgPSB7CiAgICAgICAgICAgICBzdGFydDogewogICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVO
dW1iZXIsCi0gICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDIKKyAg
ICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gb2Zmc2V0CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH07CiAKQEAgLTQ1MSw4ICs0MzAsOSBAQAogICAgICAgICAgICAgY2gg
PSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CiAgICAgICAgICAgICArK2luZGV4OwogICAgICAg
ICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgaGFzTGlu
ZVRlcm1pbmF0b3IgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChleHRyYS5jb21tZW50cykg
ewotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgMiwg
aW5kZXggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShz
dGFydCArIG9mZnNldCwgaW5kZXggLSAxKTsKICAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMQpAQCAtNDY5LDcgKzQ0
OSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKLSAgICAg
ICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAyLCBpbmRleCk7CisgICAgICAg
ICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0LCBpbmRleCk7CiAgICAg
ICAgICAgICBsb2MuZW5kID0gewogICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCiAg
ICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydApAQCAtNDk0LDE4ICs0NzQs
MTYgQEAKICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgICAgICBjaCA9
IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5h
dG9yKGNoKSkgewotICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMTMgJiYgc291cmNlLmNoYXJD
b2RlQXQoaW5kZXggKyAxKSA9PT0gMTApIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4
MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgwQSkgewogICAgICAgICAg
ICAgICAgICAgICArK2luZGV4OwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBo
YXNMaW5lVGVybWluYXRvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOwog
ICAgICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5k
ZXg7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FM
Jyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gNDIp
IHsKLSAgICAgICAgICAgICAgICAvLyBCbG9jayBjb21tZW50IGVuZHMgd2l0aCAnKi8nIChjaGFy
ICM0MiwgY2hhciAjNDcpLgotICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChp
bmRleCArIDEpID09PSA0NykgeworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkg
eworICAgICAgICAgICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRoICcqLycuCisgICAg
ICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MkYpIHsK
ICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7CkBAIC01MjQsMzcg
KzUwMiw3MCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAvLyBS
YW4gb2ZmIHRoZSBlbmQgb2YgdGhlIGZpbGUgLSB0aGUgd2hvbGUgdGhpbmcgaXMgYSBjb21tZW50
CisgICAgICAgIGlmIChleHRyYS5jb21tZW50cykgeworICAgICAgICAgICAgbG9jLmVuZCA9IHsK
KyAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVt
bjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBjb21tZW50
ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgMiwgaW5kZXgpOworICAgICAgICAgICAgYWRkQ29tbWVu
dCgnQmxvY2snLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7CisgICAgICAgIH0KKyAgICAg
ICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTsKICAgICB9CiAKICAgICBmdW5jdGlvbiBza2lw
Q29tbWVudCgpIHsKLSAgICAgICAgdmFyIGNoOworICAgICAgICB2YXIgY2gsIHN0YXJ0OworICAg
ICAgICBoYXNMaW5lVGVybWluYXRvciA9IGZhbHNlOwogCisgICAgICAgIHN0YXJ0ID0gKGluZGV4
ID09PSAwKTsKICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgICAgICBj
aCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKIAogICAgICAgICAgICAgaWYgKGlzV2hpdGVT
cGFjZShjaCkpIHsKICAgICAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICAgICAgfSBlbHNl
IGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgIGhhc0xpbmVUZXJt
aW5hdG9yID0gdHJ1ZTsKICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAg
IGlmIChjaCA9PT0gMTMgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAxMCkgeworICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkg
PT09IDB4MEEpIHsKICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOwogICAgICAgICAgICAgICAgIGxpbmVT
dGFydCA9IGluZGV4OwotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gNDcpIHsgLy8gNDcg
aXMgJy8nCisgICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNl
IGlmIChjaCA9PT0gMHgyRikgeyAvLyBVKzAwMkYgaXMgJy8nCiAgICAgICAgICAgICAgICAgY2gg
PSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9
PT0gNDcpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MkYpIHsKICAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAg
ICAgICAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChjaCA9PT0gNDIpIHsgIC8vIDQyIGlzICcqJworICAgICAgICAgICAgICAgICAgICBz
a2lwU2luZ2xlTGluZUNvbW1lbnQoMik7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7ICAvLyBVKzAwMkEg
aXMgJyonCiAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgICAgICAgICAgICAg
ICsraW5kZXg7CiAgICAgICAgICAgICAgICAgICAgIHNraXBNdWx0aUxpbmVDb21tZW50KCk7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCAmJiBjaCA9PT0gMHgy
RCkgeyAvLyBVKzAwMkQgaXMgJy0nCisgICAgICAgICAgICAgICAgLy8gVSswMDNFIGlzICc+Jwor
ICAgICAgICAgICAgICAgIGlmICgoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgy
RCkgJiYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMikgPT09IDB4M0UpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vICctLT4nIGlzIGEgc2luZ2xlLWxpbmUgY29tbWVudAorICAgICAgICAg
ICAgICAgICAgICBpbmRleCArPSAzOworICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGlu
ZUNvbW1lbnQoMyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9
PT0gMHgzQykgeyAvLyBVKzAwM0MgaXMgJzwnCisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5z
bGljZShpbmRleCArIDEsIGluZGV4ICsgNCkgPT09ICchLS0nKSB7CisgICAgICAgICAgICAgICAg
ICAgICsraW5kZXg7IC8vIGA8YAorICAgICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgIWAK
KyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1gCisgICAgICAgICAgICAgICAgICAg
ICsraW5kZXg7IC8vIGAtYAorICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1l
bnQoNCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU3NywxNCArNTg4LDE0IEBACiAgICAgfQog
CiAgICAgZnVuY3Rpb24gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKSB7Ci0gICAgICAgIHZh
ciBjaCwgY29kZSwgY3UxLCBjdTI7CisgICAgICAgIHZhciBjaCwgY29kZTsKIAogICAgICAgICBj
aCA9IHNvdXJjZVtpbmRleF07CiAgICAgICAgIGNvZGUgPSAwOwogCiAgICAgICAgIC8vIEF0IGxl
YXN0LCBvbmUgaGV4IGRpZ2l0IGlzIHJlcXVpcmVkLgogICAgICAgICBpZiAoY2ggPT09ICd9Jykg
ewotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAn
SUxMRUdBTCcpOworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAg
fQogCiAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewpAQCAtNTk2LDU1ICs2MDcsNzgg
QEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09ICd9
JykgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2Vu
LCAnSUxMRUdBTCcpOworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIC8vIFVURi0xNiBFbmNvZGluZwotICAgICAgICBpZiAoY29kZSA8PSAw
eEZGRkYpIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOwor
ICAgICAgICByZXR1cm4gZnJvbUNvZGVQb2ludChjb2RlKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBjb2RlUG9pbnRBdChpKSB7CisgICAgICAgIHZhciBjcCwgZmlyc3QsIHNlY29uZDsKKworICAg
ICAgICBjcCA9IHNvdXJjZS5jaGFyQ29kZUF0KGkpOworICAgICAgICBpZiAoY3AgPj0gMHhEODAw
ICYmIGNwIDw9IDB4REJGRikgeworICAgICAgICAgICAgc2Vjb25kID0gc291cmNlLmNoYXJDb2Rl
QXQoaSArIDEpOworICAgICAgICAgICAgaWYgKHNlY29uZCA+PSAweERDMDAgJiYgc2Vjb25kIDw9
IDB4REZGRikgeworICAgICAgICAgICAgICAgIGZpcnN0ID0gY3A7CisgICAgICAgICAgICAgICAg
Y3AgPSAoZmlyc3QgLSAweEQ4MDApICogMHg0MDAgKyBzZWNvbmQgLSAweERDMDAgKyAweDEwMDAw
OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGN1MSA9ICgoY29kZSAtIDB4MTAw
MDApID4+IDEwKSArIDB4RDgwMDsKLSAgICAgICAgY3UyID0gKChjb2RlIC0gMHgxMDAwMCkgJiAx
MDIzKSArIDB4REMwMDsKLSAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3UxLCBj
dTIpOworCisgICAgICAgIHJldHVybiBjcDsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBnZXRFc2Nh
cGVkSWRlbnRpZmllcigpIHsKLSAgICAgICAgdmFyIGNoLCBpZDsKKyAgICBmdW5jdGlvbiBnZXRD
b21wbGV4SWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIGNwLCBjaCwgaWQ7CiAKLSAgICAgICAg
Y2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCsrKTsKLSAgICAgICAgaWQgPSBTdHJpbmcuZnJv
bUNoYXJDb2RlKGNoKTsKKyAgICAgICAgY3AgPSBjb2RlUG9pbnRBdChpbmRleCk7CisgICAgICAg
IGlkID0gZnJvbUNvZGVQb2ludChjcCk7CisgICAgICAgIGluZGV4ICs9IGlkLmxlbmd0aDsKIAot
ICAgICAgICAvLyAnXHUnIChjaGFyICM5MiwgY2hhciAjMTE3KSBkZW5vdGVzIGFuIGVzY2FwZWQg
Y2hhcmFjdGVyLgotICAgICAgICBpZiAoY2ggPT09IDkyKSB7Ci0gICAgICAgICAgICBpZiAoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAxMTcpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIC8v
ICdcdScgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorICAg
ICAgICBpZiAoY3AgPT09IDB4NUMpIHsKKyAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVB
dChpbmRleCkgIT09IDB4NzUpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tl
bigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGNo
ID0gc2NhbkhleEVzY2FwZSgndScpOwotICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xc
JyB8fCAhaXNJZGVudGlmaWVyU3RhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7
CisgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7CisgICAgICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICBjaCA9IHNjYW5Vbmljb2RlQ29kZVBvaW50RXNj
YXBlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNoID0gc2Nhbkhl
eEVzY2FwZSgndScpOworICAgICAgICAgICAgICAgIGNwID0gY2guY2hhckNvZGVBdCgwKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJTdGFy
dChjcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZCA9IGNoOwogICAg
ICAgICB9CiAKICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBj
aCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKLSAgICAgICAgICAgIGlmICghaXNJZGVudGlm
aWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgIGNwID0gY29kZVBvaW50QXQoaW5kZXgpOworICAg
ICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJQYXJ0KGNwKSkgewogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGlk
ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOworICAgICAgICAgICAgY2ggPSBmcm9tQ29kZVBv
aW50KGNwKTsKKyAgICAgICAgICAgIGlkICs9IGNoOworICAgICAgICAgICAgaW5kZXggKz0gY2gu
bGVuZ3RoOwogCi0gICAgICAgICAgICAvLyAnXHUnIChjaGFyICM5MiwgY2hhciAjMTE3KSBkZW5v
dGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgotICAgICAgICAgICAgaWYgKGNoID09PSA5Mikgewor
ICAgICAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBj
aGFyYWN0ZXIuCisgICAgICAgICAgICBpZiAoY3AgPT09IDB4NUMpIHsKICAgICAgICAgICAgICAg
ICBpZCA9IGlkLnN1YnN0cigwLCBpZC5sZW5ndGggLSAxKTsKLSAgICAgICAgICAgICAgICBpZiAo
c291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAxMTcpIHsKLSAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICBjaCA9IHNjYW5I
ZXhFc2NhcGUoJ3UnKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8
ICFpc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsK
KyAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7CisgICAgICAgICAg
ICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGNoID0gc2NhblVuaWNvZGVD
b2RlUG9pbnRFc2NhcGUoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAgICAgICAgICAgICAgY3Ag
PSBjaC5jaGFyQ29kZUF0KDApOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09
PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJQYXJ0KGNwKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZCArPSBjaDsKICAgICAgICAgICAgIH0KQEAg
LTY1OSwxMCArNjkzLDE0IEBACiAgICAgICAgIHN0YXJ0ID0gaW5kZXgrKzsKICAgICAgICAgd2hp
bGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4KTsKLSAgICAgICAgICAgIGlmIChjaCA9PT0gOTIpIHsKLSAgICAgICAgICAgICAgICAv
LyBCbGFja3NsYXNoIChjaGFyICM5MikgbWFya3MgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuCisg
ICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKKyAgICAgICAgICAgICAgICAvLyBCbGFja3Ns
YXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLgogICAgICAgICAgICAg
ICAgIGluZGV4ID0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldEVzY2FwZWRJZGVu
dGlmaWVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBsZXhJZGVudGlmaWVyKCk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID49IDB4RDgwMCAmJiBjaCA8IDB4REZGRikgewor
ICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gaGFuZGxlIHN1cnJvZ2F0ZSBwYWlycy4KKyAgICAg
ICAgICAgICAgICBpbmRleCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb21w
bGV4SWRlbnRpZmllcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzSWRlbnRp
ZmllclBhcnQoY2gpKSB7CiAgICAgICAgICAgICAgICAgKytpbmRleDsKQEAgLTY3OSw4ICs3MTcs
OCBAQAogCiAgICAgICAgIHN0YXJ0ID0gaW5kZXg7CiAKLSAgICAgICAgLy8gQmFja3NsYXNoIChj
aGFyICM5Mikgc3RhcnRzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgotICAgICAgICBpZCA9IChzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCkgPT09IDkyKSA/IGdldEVzY2FwZWRJZGVudGlmaWVyKCkgOiBn
ZXRJZGVudGlmaWVyKCk7CisgICAgICAgIC8vIEJhY2tzbGFzaCAoVSswMDVDKSBzdGFydHMgYW4g
ZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgIGlkID0gKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
KSA9PT0gMHg1QykgPyBnZXRDb21wbGV4SWRlbnRpZmllcigpIDogZ2V0SWRlbnRpZmllcigpOwog
CiAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQgb3IgbGl0ZXJhbCB3aXRoIG9ubHkgb25l
IGNoYXJhY3Rlci4KICAgICAgICAgLy8gVGh1cywgaXQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLgpA
QCAtNzAxLDIxNSArNzM5LDExMyBAQAogICAgICAgICAgICAgdmFsdWU6IGlkLAogICAgICAgICAg
ICAgbGluZU51bWJlcjogbGluZU51bWJlciwKICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0
YXJ0LAotICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAgICAgICBzdGFy
dDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CiAgICAgICAgIH07CiAgICAgfQogCiAK
LSAgICAvLyA3LjcgUHVuY3R1YXRvcnMKKyAgICAvLyBFQ01BLTI2MiAxMS43IFB1bmN0dWF0b3Jz
CiAKICAgICBmdW5jdGlvbiBzY2FuUHVuY3R1YXRvcigpIHsKLSAgICAgICAgdmFyIHN0YXJ0ID0g
aW5kZXgsCi0gICAgICAgICAgICBjb2RlID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpLAotICAg
ICAgICAgICAgY29kZTIsCi0gICAgICAgICAgICBjaDEgPSBzb3VyY2VbaW5kZXhdLAotICAgICAg
ICAgICAgY2gyLAotICAgICAgICAgICAgY2gzLAotICAgICAgICAgICAgY2g0OworICAgICAgICB2
YXIgdG9rZW4sIHN0cjsKKworICAgICAgICB0b2tlbiA9IHsKKyAgICAgICAgICAgIHR5cGU6IFRv
a2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICB2YWx1ZTogJycsCisgICAgICAgICAgICBsaW5l
TnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisg
ICAgICAgICAgICBzdGFydDogaW5kZXgsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAg
IH07CiAKLSAgICAgICAgc3dpdGNoIChjb2RlKSB7CiAgICAgICAgIC8vIENoZWNrIGZvciBtb3N0
IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgotICAgICAgICBjYXNlIDQwOiAg
IC8vICggb3BlbiBicmFja2V0Ci0gICAgICAgIGNhc2UgNDE6ICAgLy8gKSBjbG9zZSBicmFja2V0
Ci0gICAgICAgIGNhc2UgNTk6ICAgLy8gOyBzZW1pY29sb24KLSAgICAgICAgY2FzZSA0NDogICAv
LyAsIGNvbW1hCi0gICAgICAgIGNhc2UgMTIzOiAgLy8geyBvcGVuIGN1cmx5IGJyYWNlCi0gICAg
ICAgIGNhc2UgMTI1OiAgLy8gfSBjbG9zZSBjdXJseSBicmFjZQotICAgICAgICBjYXNlIDkxOiAg
IC8vIFsKLSAgICAgICAgY2FzZSA5MzogICAvLyBdCi0gICAgICAgIGNhc2UgNTg6ICAgLy8gOgot
ICAgICAgICBjYXNlIDYzOiAgIC8vID8KLSAgICAgICAgY2FzZSAxMjY6ICAvLyB+Ci0gICAgICAg
ICAgICArK2luZGV4OworICAgICAgICBzdHIgPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBzd2l0
Y2ggKHN0cikgeworCisgICAgICAgIGNhc2UgJygnOgogICAgICAgICAgICAgaWYgKGV4dHJhLnRv
a2VuaXplKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IDQwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDEyMykgewotICAgICAgICAgICAgICAg
ICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IGV4dHJhLnRva2Vucy5sZW5ndGg7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gZXh0cmEu
dG9rZW5zLmxlbmd0aDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgICAgICB2YWx1
ZTogU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSwKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAg
ICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQotICAgICAgICAgICAgfTsKLQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY29kZTIgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCArIDEpOwotCi0gICAgICAgICAgICAvLyAnPScgKGNoYXIgIzYxKSBtYXJrcyBhbiBhc3NpZ25t
ZW50IG9yIGNvbXBhcmlzb24gb3BlcmF0b3IuCi0gICAgICAgICAgICBpZiAoY29kZTIgPT09IDYx
KSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSAzNzogIC8vICUKLSAgICAgICAgICAgICAgICBjYXNlIDM4OiAgLy8gJgotICAgICAgICAgICAg
ICAgIGNhc2UgNDI6ICAvLyAqOgotICAgICAgICAgICAgICAgIGNhc2UgNDM6ICAvLyArCi0gICAg
ICAgICAgICAgICAgY2FzZSA0NTogIC8vIC0KLSAgICAgICAgICAgICAgICBjYXNlIDQ3OiAgLy8g
LwotICAgICAgICAgICAgICAgIGNhc2UgNjA6ICAvLyA8Ci0gICAgICAgICAgICAgICAgY2FzZSA2
MjogIC8vID4KLSAgICAgICAgICAgICAgICBjYXNlIDk0OiAgLy8gXgotICAgICAgICAgICAgICAg
IGNhc2UgMTI0OiAvLyB8Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tl
bi5QdW5jdHVhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9t
Q2hhckNvZGUoY29kZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUyKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdl
OiBbc3RhcnQsIGluZGV4XQotICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAg
ICAgY2FzZSAzMzogLy8gIQotICAgICAgICAgICAgICAgIGNhc2UgNjE6IC8vID0KLSAgICAgICAg
ICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICAvLyAhPT0gYW5kID09PQotICAgICAgICAg
ICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSA2MSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2Uuc2xp
Y2Uoc3RhcnQsIGluZGV4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxp
bmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQotICAgICAgICAg
ICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAneyc6CisgICAgICAg
ICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHsKKyAgICAgICAgICAgICAgICBleHRyYS5vcGVuQ3Vy
bHlUb2tlbiA9IGV4dHJhLnRva2Vucy5sZW5ndGg7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBzdGF0ZS5jdXJseVN0YWNrLnB1c2goJ3snKTsKKyAgICAgICAgICAgICsraW5kZXg7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBlZWsgbW9yZSBjaGFyYWN0
ZXJzLgogCi0gICAgICAgIGNoMiA9IHNvdXJjZVtpbmRleCArIDFdOwotICAgICAgICBjaDMgPSBz
b3VyY2VbaW5kZXggKyAyXTsKLSAgICAgICAgY2g0ID0gc291cmNlW2luZGV4ICsgM107Ci0KLSAg
ICAgICAgLy8gNC1jaGFyYWN0ZXIgcHVuY3R1YXRvcjogPj4+PQotCi0gICAgICAgIGlmIChjaDEg
PT09ICc+JyAmJiBjaDIgPT09ICc+JyAmJiBjaDMgPT09ICc+JykgewotICAgICAgICAgICAgaWYg
KGNoNCA9PT0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgaW5kZXggKz0gNDsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9y
LAotICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJz4+Pj0nLAotICAgICAgICAgICAgICAgICAg
ICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6
IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCi0g
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09ICcuJyAmJiBzb3VyY2VbaW5kZXgg
KyAxXSA9PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgLy8gU3ByZWFkIG9wZXJhdG9yOiAuLi4K
KyAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAgIHN0ciA9ICcuLi4n
OwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMy1jaGFyYWN0ZXIgcHVu
Y3R1YXRvcnM6ID09PSAhPT0gPj4+IDw8PSA+Pj0KLQotICAgICAgICBpZiAoY2gxID09PSAnPicg
JiYgY2gyID09PSAnPicgJiYgY2gzID09PSAnPicpIHsKLSAgICAgICAgICAgIGluZGV4ICs9IDM7
Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0
dWF0b3IsCi0gICAgICAgICAgICAgICAgdmFsdWU6ICc+Pj4nLAotICAgICAgICAgICAgICAgIGxp
bmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3Rh
cnQsCi0gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCi0gICAgICAgICAgICB9
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNoMSA9PT0gJzwnICYmIGNoMiA9PT0gJzwnICYm
IGNoMyA9PT0gJz0nKSB7Ci0gICAgICAgICAgICBpbmRleCArPSAzOwotICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAgICAg
ICAgICAgIHZhbHVlOiAnPDw9JywKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLAotICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAg
ICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChjaDEgPT09ICc+JyAmJiBjaDIgPT09ICc+JyAmJiBjaDMgPT09ICc9Jykgewot
ICAgICAgICAgICAgaW5kZXggKz0gMzsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgICAgICB2YWx1ZTogJz4+
PScsCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAg
ICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0
LCBpbmRleF0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgIGlmIChjaDEgPT09ICcuJyAmJiBjaDIgPT09ICcuJyAmJiBjaDMgPT09ICcuJykg
ewotICAgICAgICAgICAgaW5kZXggKz0gMzsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgICAgICB2YWx1ZTog
Jy4uLicsCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAg
ICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICByYW5nZTogW3N0
YXJ0LCBpbmRleF0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KKyAgICAgICAgY2FzZSAnfSc6
CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wb3Ao
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcpJzoKKyAgICAgICAgY2FzZSAn
Oyc6CisgICAgICAgIGNhc2UgJywnOgorICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgY2FzZSAn
XSc6CisgICAgICAgIGNhc2UgJzonOgorICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgY2FzZSAn
fic6CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
Ly8gT3RoZXIgMi1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6ICsrIC0tIDw8ID4+ICYmIHx8CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyA0LWNoYXJhY3RlciBwdW5jdHVhdG9yLgorICAg
ICAgICAgICAgc3RyID0gc291cmNlLnN1YnN0cihpbmRleCwgNCk7CisgICAgICAgICAgICBpZiAo
c3RyID09PSAnPj4+PScpIHsKKyAgICAgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAgICAg
ICAgfSBlbHNlIHsKIAotICAgICAgICBpZiAoY2gxID09PSBjaDIgJiYgKCcrLTw+JnwnLmluZGV4
T2YoY2gxKSA+PSAwKSkgewotICAgICAgICAgICAgaW5kZXggKz0gMjsKLSAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAg
ICAgICAgICB2YWx1ZTogY2gxICsgY2gyLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxp
bmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAg
ICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCi0gICAgICAgICAgICB9OwotICAgICAgICB9
CisgICAgICAgICAgICAgICAgLy8gMy1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuCisgICAgICAgICAg
ICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCAzKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyID09
PSAnPT09JyB8fCBzdHIgPT09ICchPT0nIHx8IHN0ciA9PT0gJz4+PicgfHwKKyAgICAgICAgICAg
ICAgICAgICAgc3RyID09PSAnPDw9JyB8fCBzdHIgPT09ICc+Pj0nKSB7CisgICAgICAgICAgICAg
ICAgICAgIGluZGV4ICs9IDM7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICBp
ZiAoY2gxID09PSAnPScgJiYgY2gyID09PSAnPicpIHsKLSAgICAgICAgICAgIGluZGV4ICs9IDI7
Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0
dWF0b3IsCi0gICAgICAgICAgICAgICAgdmFsdWU6ICc9PicsCi0gICAgICAgICAgICAgICAgbGlu
ZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFy
dCwKLSAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KLSAgICAgICAgICAgIH07
Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gMi1jaGFyYWN0ZXIgcHVuY3R1YXRv
cnMuCisgICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMik7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzdHIgPT09ICcmJicgfHwgc3RyID09PSAnfHwnIHx8IHN0ciA9PT0g
Jz09JyB8fCBzdHIgPT09ICchPScgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0g
Jys9JyB8fCBzdHIgPT09ICctPScgfHwgc3RyID09PSAnKj0nIHx8IHN0ciA9PT0gJy89JyB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnKysnIHx8IHN0ciA9PT0gJy0tJyB8fCBz
dHIgPT09ICc8PCcgfHwgc3RyID09PSAnPj4nIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgPT09ICcmPScgfHwgc3RyID09PSAnfD0nIHx8IHN0ciA9PT0gJ149JyB8fCBzdHIgPT09ICcl
PScgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJzw9JyB8fCBzdHIgPT09ICc+
PScgfHwgc3RyID09PSAnPT4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAy
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIGlmICgnPD49ISstKiUm
fF4vJy5pbmRleE9mKGNoMSkgPj0gMCkgewotICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKLSAg
ICAgICAgICAgICAgICB2YWx1ZTogY2gxLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxp
bmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAg
ICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCi0gICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gMS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuCisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCc8Pj0hKy0qJSZ8Xi8nLmluZGV4T2Yoc3RyKSA+PSAwKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIGlmIChjaDEgPT09ICcuJykgewotICAgICAgICAgICAgKytpbmRleDsKLSAg
ICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRv
ciwKLSAgICAgICAgICAgICAgICB2YWx1ZTogY2gxLAotICAgICAgICAgICAgICAgIGxpbmVOdW1i
ZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0g
ICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCi0gICAgICAgICAgICB9OworICAg
ICAgICBpZiAoaW5kZXggPT09IHRva2VuLnN0YXJ0KSB7CisgICAgICAgICAgICB0aHJvd1VuZXhw
ZWN0ZWRUb2tlbigpOwogICAgICAgICB9CiAKLSAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB0b2tlbi5lbmQgPSBpbmRl
eDsKKyAgICAgICAgdG9rZW4udmFsdWUgPSBzdHI7CisgICAgICAgIHJldHVybiB0b2tlbjsKICAg
ICB9CiAKLSAgICAvLyA3LjguMyBOdW1lcmljIExpdGVyYWxzCisgICAgLy8gRUNNQS0yNjIgMTEu
OC4zIE51bWVyaWMgTGl0ZXJhbHMKIAogICAgIGZ1bmN0aW9uIHNjYW5IZXhMaXRlcmFsKHN0YXJ0
KSB7CiAgICAgICAgIHZhciBudW1iZXIgPSAnJzsKQEAgLTkyMiwxMSArODU4LDExIEBACiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkgewotICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAg
ICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7Ci0gICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7
CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICB9CiAKICAgICAg
ICAgcmV0dXJuIHsKQEAgLTkzNCw3ICs4NzAsOCBAQAogICAgICAgICAgICAgdmFsdWU6IHBhcnNl
SW50KCcweCcgKyBudW1iZXIsIDE2KSwKICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1i
ZXIsCiAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgIHJhbmdl
OiBbc3RhcnQsIGluZGV4XQorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAg
ZW5kOiBpbmRleAogICAgICAgICB9OwogICAgIH0KIApAQCAtOTUzLDE0ICs4OTAsMTQgQEAKIAog
ICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgLy8gb25seSAw
YiBvciAwQgotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRv
a2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewogICAgICAgICAgICAgY2gg
PSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CiAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25v
cmUgZWxzZSAqLwogICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBpc0Rl
Y2ltYWxEaWdpdChjaCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdl
cy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgdGhyb3dVbmV4
cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC05NjksNyArOTA2
LDggQEAKICAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDIpLAogICAgICAgICAg
ICAgbGluZU51bWJlcjogbGluZU51bWJlciwKICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0
YXJ0LAotICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAgICAgICBzdGFy
dDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CiAgICAgICAgIH07CiAgICAgfQogCkBA
IC05OTQsMTEgKzkzMiwxMSBAQAogCiAgICAgICAgIGlmICghb2N0YWwgJiYgbnVtYmVyLmxlbmd0
aCA9PT0gMCkgewogICAgICAgICAgICAgLy8gb25seSAwbyBvciAwTwotICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAg
ICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChp
c0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IGlzRGVjaW1hbERp
Z2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgIHRo
cm93VW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gewpAQCAt
MTAwNywxMCArOTQ1LDI5IEBACiAgICAgICAgICAgICBvY3RhbDogb2N0YWwsCiAgICAgICAgICAg
ICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAogICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3Rh
cnQsCi0gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgICAgIHN0YXJ0
OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKICAgICAgICAgfTsKICAgICB9CiAKKyAg
ICBmdW5jdGlvbiBpc0ltcGxpY2l0T2N0YWxMaXRlcmFsKCkgeworICAgICAgICB2YXIgaSwgY2g7
CisKKyAgICAgICAgLy8gSW1wbGljaXQgb2N0YWwsIHVubGVzcyB0aGVyZSBpcyBhIG5vbi1vY3Rh
bCBkaWdpdC4KKyAgICAgICAgLy8gKEFubmV4IEIuMS4xIG9uIE51bWVyaWMgTGl0ZXJhbHMpCisg
ICAgICAgIGZvciAoaSA9IGluZGV4ICsgMTsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICBjaCA9IHNvdXJjZVtpXTsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJzgnIHx8IGNoID09PSAn
OScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIWlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKwogICAgIGZ1bmN0aW9uIHNjYW5OdW1lcmljTGl0ZXJhbCgpIHsKICAgICAgICAgdmFy
IG51bWJlciwgc3RhcnQsIGNoOwogCkBAIC0xMDM3LDEyICs5OTQsMTQgQEAKICAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5CaW5hcnlM
aXRlcmFsKHN0YXJ0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNo
ID09PSAnbycgfHwgY2ggPT09ICdPJyB8fCBpc09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAnbycgfHwgY2ggPT09ICdPJykgewogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJhbChjaCwgc3RhcnQpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAvLyBkZWNpbWFsIG51bWJlciBzdGFydHMgd2l0aCAnMCcgc3VjaCBh
cyAnMDknIGlzIGlsbGVnYWwuCi0gICAgICAgICAgICAgICAgaWYgKGNoICYmIGlzRGVjaW1hbERp
Z2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKworICAgICAgICAgICAg
ICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0lt
cGxpY2l0T2N0YWxMaXRlcmFsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
Y2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTEwNzIsMTIgKzEwMzEsMTIgQEAKICAg
ICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAg
ICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsK
LSAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lM
TEVHQUwnKTsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgIH0K
IAogICAgICAgICByZXR1cm4gewpAQCAtMTA4NSwxNCArMTA0NCwxNSBAQAogICAgICAgICAgICAg
dmFsdWU6IHBhcnNlRmxvYXQobnVtYmVyKSwKICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVO
dW1iZXIsCiAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgIHJh
bmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAg
ICAgZW5kOiBpbmRleAogICAgICAgICB9OwogICAgIH0KIAotICAgIC8vIDcuOC40IFN0cmluZyBM
aXRlcmFscworICAgIC8vIEVDTUEtMjYyIDExLjguNCBTdHJpbmcgTGl0ZXJhbHMKIAogICAgIGZ1
bmN0aW9uIHNjYW5TdHJpbmdMaXRlcmFsKCkgewotICAgICAgICB2YXIgc3RyID0gJycsIHF1b3Rl
LCBzdGFydCwgY2gsIGNvZGUsIHVuZXNjYXBlZCwgcmVzdG9yZSwgb2N0YWwgPSBmYWxzZTsKKyAg
ICAgICAgdmFyIHN0ciA9ICcnLCBxdW90ZSwgc3RhcnQsIGNoLCB1bmVzY2FwZWQsIG9jdFRvRGVj
LCBvY3RhbCA9IGZhbHNlOwogCiAgICAgICAgIHF1b3RlID0gc291cmNlW2luZGV4XTsKICAgICAg
ICAgYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90ZSA9PT0gJyInKSwKQEAgLTExMTEsMzEg
KzEwNzEsMjggQEAKICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKICAgICAg
ICAgICAgICAgICBpZiAoIWNoIHx8ICFpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkp
KSB7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xuJzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzoK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHInOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyICs9ICdcdCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J3gnOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09ICd7Jykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyICs9IHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3RvcmUgPSBpbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZWQgPSBz
Y2FuSGV4RXNjYXBlKGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2Nh
cGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1bmVz
Y2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhyb3dVbmV4
cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlICduJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXG4nOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOgor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdccic7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgKz0gJ1x0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSAnXGInOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTQ1LDMwICsx
MTAyLDE4IEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOgogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyICs9ICdceDBCJzsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlICc4JzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAn
OSc6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZSA9ICcwMTIzNDU2NycuaW5kZXhPZihjaCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2N0YWwgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RUb0RlYyA9IG9jdGFsVG9EZWNpbWFsKGNo
KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNl
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlz
T2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvY3RhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUg
PSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQg
d2hlbiBzdHJpbmcgc3RhcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdp
dGggMCwgMSwgMiwgMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzAxMjMn
LmluZGV4T2YoY2gpID49IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleCA8IGxlbmd0aCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNv
dXJjZVtpbmRleCsrXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2N0YWwgPSBvY3RUb0RlYy5vY3RhbCB8fCBvY3RhbDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShvY3RUb0RlYy5jb2RlKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RyICs9IGNoOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTE4OSwzNiArMTEzNCw0
MyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHF1b3RlICE9PSAnJykgewotICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwor
ICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgfQogCiAgICAgICAg
IHJldHVybiB7CiAgICAgICAgICAgICB0eXBlOiBUb2tlbi5TdHJpbmdMaXRlcmFsLAogICAgICAg
ICAgICAgdmFsdWU6IHN0ciwKICAgICAgICAgICAgIG9jdGFsOiBvY3RhbCwKLSAgICAgICAgICAg
IGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFy
dCwKLSAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICAgICAgbGluZU51
bWJlcjogc3RhcnRMaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBzdGFydExpbmVT
dGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgK
ICAgICAgICAgfTsKICAgICB9CiAKKyAgICAvLyBFQ01BLTI2MiAxMS44LjYgVGVtcGxhdGUgTGl0
ZXJhbCBMZXhpY2FsIENvbXBvbmVudHMKKwogICAgIGZ1bmN0aW9uIHNjYW5UZW1wbGF0ZSgpIHsK
LSAgICAgICAgdmFyIGNvb2tlZCA9ICcnLCBjaCwgc3RhcnQsIHRlcm1pbmF0ZWQsIHRhaWwsIHJl
c3RvcmUsIHVuZXNjYXBlZCwgY29kZSwgb2N0YWw7CisgICAgICAgIHZhciBjb29rZWQgPSAnJywg
Y2gsIHN0YXJ0LCByYXdPZmZzZXQsIHRlcm1pbmF0ZWQsIGhlYWQsIHRhaWwsIHJlc3RvcmUsIHVu
ZXNjYXBlZDsKIAogICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2U7CiAgICAgICAgIHRhaWwgPSBm
YWxzZTsKICAgICAgICAgc3RhcnQgPSBpbmRleDsKKyAgICAgICAgaGVhZCA9IChzb3VyY2VbaW5k
ZXhdID09PSAnYCcpOworICAgICAgICByYXdPZmZzZXQgPSAyOwogCiAgICAgICAgICsraW5kZXg7
CiAKICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgICAgICBjaCA9IHNv
dXJjZVtpbmRleCsrXTsKICAgICAgICAgICAgIGlmIChjaCA9PT0gJ2AnKSB7CisgICAgICAgICAg
ICAgICAgcmF3T2Zmc2V0ID0gMTsKICAgICAgICAgICAgICAgICB0YWlsID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICckJykgewogICAgICAgICAgICAgICAgIGlmIChz
b3VyY2VbaW5kZXhdID09PSAneycpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuY3VybHlT
dGFjay5wdXNoKCckeycpOwogICAgICAgICAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICAg
ICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMjY0LDI4ICsxMjE2LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
ID0gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY29kZSAhPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvY3RhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNPY3RhbERpZ2l0KHNv
dXJjZVtpbmRleF0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFsID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsg
JzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0cmluZyBz
dGFydHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCAwLCAxLCAyLCAz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnMDEyMycuaW5kZXhPZihjaCkg
Pj0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwg
bGVuZ3RoICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPY3Rh
bERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2luZGV4Kytd
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAnMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsOiBcMDEgXDAyIGFuZCBzbyBvbgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLlRlbXBsYXRlT2N0
YWxMaXRlcmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29va2VkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcMCc7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJbGxlZ2FsOiBcMSBcMgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3IoTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQg
Kz0gY2g7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMzExLDcwICsxMjUwLDcwIEBA
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHsKLSAgICAgICAgICAgIHRo
cm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAg
ICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IWhlYWQpIHsKKyAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucG9wKCk7CiAgICAgICAgIH0K
IAogICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgdHlwZTogVG9rZW4uVGVtcGxhdGUsCiAg
ICAgICAgICAgICB2YWx1ZTogewogICAgICAgICAgICAgICAgIGNvb2tlZDogY29va2VkLAotICAg
ICAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHN0YXJ0ICsgMSwgaW5kZXggLSAoKHRhaWwp
ID8gMSA6IDIpKQorICAgICAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHN0YXJ0ICsgMSwg
aW5kZXggLSByYXdPZmZzZXQpCiAgICAgICAgICAgICB9LAorICAgICAgICAgICAgaGVhZDogaGVh
ZCwKICAgICAgICAgICAgIHRhaWw6IHRhaWwsCi0gICAgICAgICAgICBvY3RhbDogb2N0YWwsCiAg
ICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAogICAgICAgICAgICAgbGluZVN0YXJ0
OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAg
ICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKICAgICAgICAgfTsKICAg
ICB9CiAKLSAgICBmdW5jdGlvbiBzY2FuVGVtcGxhdGVFbGVtZW50KG9wdGlvbikgewotICAgICAg
ICB2YXIgc3RhcnRzV2l0aCwgdGVtcGxhdGU7Ci0KLSAgICAgICAgbG9va2FoZWFkID0gbnVsbDsK
LSAgICAgICAgc2tpcENvbW1lbnQoKTsKLQotICAgICAgICBzdGFydHNXaXRoID0gKG9wdGlvbi5o
ZWFkKSA/ICdgJyA6ICd9JzsKLQotICAgICAgICBpZiAoc291cmNlW2luZGV4XSAhPT0gc3RhcnRz
V2l0aCkgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRv
a2VuLCAnSUxMRUdBTCcpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGUgPSBzY2FuVGVt
cGxhdGUoKTsKLQotICAgICAgICBwZWVrKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRlbXBsYXRlOwot
ICAgIH0KKyAgICAvLyBFQ01BLTI2MiAxMS44LjUgUmVndWxhciBFeHByZXNzaW9uIExpdGVyYWxz
CiAKICAgICBmdW5jdGlvbiB0ZXN0UmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7Ci0gICAgICAgIHZh
ciB0bXAgPSBwYXR0ZXJuLAotICAgICAgICAgICAgdmFsdWU7CisgICAgICAgIC8vIFRoZSBCTVAg
Y2hhcmFjdGVyIHRvIHVzZSBhcyBhIHJlcGxhY2VtZW50IGZvciBhc3RyYWwgc3ltYm9scyB3aGVu
CisgICAgICAgIC8vIHRyYW5zbGF0aW5nIGFuIEVTNiAidSItZmxhZ2dlZCBwYXR0ZXJuIHRvIGFu
IEVTNS1jb21wYXRpYmxlCisgICAgICAgIC8vIGFwcHJveGltYXRpb24uCisgICAgICAgIC8vIE5v
dGU6IHJlcGxhY2luZyB3aXRoICdcdUZGRkYnIGVuYWJsZXMgZmFsc2UgcG9zaXRpdmVzIGluIHVu
bGlrZWx5CisgICAgICAgIC8vIHNjZW5hcmlvcy4gRm9yIGV4YW1wbGUsIGBbXHV7MTA0NGZ9LVx1
ezEwNDQwfV1gIGlzIGFuIGludmFsaWQKKyAgICAgICAgLy8gcGF0dGVybiB0aGF0IHdvdWxkIG5v
dCBiZSBkZXRlY3RlZCBieSB0aGlzIHN1YnN0aXR1dGlvbi4KKyAgICAgICAgdmFyIGFzdHJhbFN1
YnN0aXR1dGUgPSAnXHVGRkZGJywKKyAgICAgICAgICAgIHRtcCA9IHBhdHRlcm47CiAKICAgICAg
ICAgaWYgKGZsYWdzLmluZGV4T2YoJ3UnKSA+PSAwKSB7Ci0gICAgICAgICAgICAvLyBSZXBsYWNl
IGVhY2ggYXN0cmFsIHN5bWJvbCBhbmQgZXZlcnkgVW5pY29kZSBjb2RlIHBvaW50Ci0gICAgICAg
ICAgICAvLyBlc2NhcGUgc2VxdWVuY2Ugd2l0aCBhIHNpbmdsZSBBU0NJSSBzeW1ib2wgdG8gYXZv
aWQgdGhyb3dpbmcgb24KLSAgICAgICAgICAgIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBh
cmUgb25seSB2YWxpZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQotICAgICAgICAgICAgLy8gYC91
YCBmbGFnLgotICAgICAgICAgICAgLy8gTm90ZTogcmVwbGFjaW5nIHdpdGggdGhlIEFTQ0lJIHN5
bWJvbCBgeGAgbWlnaHQgY2F1c2UgZmFsc2UKLSAgICAgICAgICAgIC8vIG5lZ2F0aXZlcyBpbiB1
bmxpa2VseSBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1x1ezYxfS1iXWAgaXMgYQotICAgICAg
ICAgICAgLy8gcGVyZmVjdGx5IHZhbGlkIHBhdHRlcm4gdGhhdCBpcyBlcXVpdmFsZW50IHRvIGBb
YS1iXWAsIGJ1dCBpdAotICAgICAgICAgICAgLy8gd291bGQgYmUgcmVwbGFjZWQgYnkgYFt4LWJd
YCB3aGljaCB0aHJvd3MgYW4gZXJyb3IuCiAgICAgICAgICAgICB0bXAgPSB0bXAKLSAgICAgICAg
ICAgICAgICAucmVwbGFjZSgvXFx1XHsoWzAtOWEtZkEtRl0rKVx9L2csIGZ1bmN0aW9uICgkMCwg
JDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KCQxLCAxNikgPD0gMHgxMEZG
RkYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAneCc7CisgICAgICAgICAgICAg
ICAgLy8gUmVwbGFjZSBldmVyeSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlcXVp
dmFsZW50CisgICAgICAgICAgICAgICAgLy8gQk1QIGNoYXJhY3RlciBvciBhIGNvbnN0YW50IEFT
Q0lJIGNvZGUgcG9pbnQgaW4gdGhlIGNhc2Ugb2YKKyAgICAgICAgICAgICAgICAvLyBhc3RyYWwg
c3ltYm9scy4gKFNlZSB0aGUgYWJvdmUgbm90ZSBvbiBgYXN0cmFsU3Vic3RpdHV0ZWAKKyAgICAg
ICAgICAgICAgICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4pCisgICAgICAgICAgICAgICAgLnJl
cGxhY2UoL1xcdVx7KFswLTlhLWZBLUZdKylcfXxcXHUoW2EtZkEtRjAtOV17NH0pL2csIGZ1bmN0
aW9uICgkMCwgJDEsICQyKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBw
YXJzZUludCgkMSB8fCAkMiwgMTYpOworICAgICAgICAgICAgICAgICAgICBpZiAoY29kZVBvaW50
ID4gMHgxMEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRv
a2VuKG51bGwsIE1lc3NhZ2VzLkludmFsaWRSZWdFeHApOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhGRkZGKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlUG9pbnQpOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLkludmFsaWRSZWdFeHApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXN0
cmFsU3Vic3RpdHV0ZTsKICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIC5yZXBs
YWNlKC9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZywgJ3gnKTsKKyAgICAgICAgICAg
ICAgICAvLyBSZXBsYWNlIGVhY2ggcGFpcmVkIHN1cnJvZ2F0ZSB3aXRoIGEgc2luZ2xlIEFTQ0lJ
IHN5bWJvbCB0bworICAgICAgICAgICAgICAgIC8vIGF2b2lkIHRocm93aW5nIG9uIHJlZ3VsYXIg
ZXhwcmVzc2lvbnMgdGhhdCBhcmUgb25seSB2YWxpZCBpbgorICAgICAgICAgICAgICAgIC8vIGNv
bWJpbmF0aW9uIHdpdGggdGhlICJ1IiBmbGFnLgorICAgICAgICAgICAgICAgIC5yZXBsYWNlKAor
ICAgICAgICAgICAgICAgICAgICAvW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csCisg
ICAgICAgICAgICAgICAgICAgIGFzdHJhbFN1YnN0aXR1dGUKKyAgICAgICAgICAgICAgICApOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gRmlyc3QsIGRldGVjdCBpbnZhbGlkIHJlZ3VsYXIgZXhw
cmVzc2lvbnMuCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IG5ldyBSZWdFeHAo
dG1wKTsKKyAgICAgICAgICAgIFJlZ0V4cCh0bXApOwogICAgICAgICB9IGNhdGNoIChlKSB7Ci0g
ICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTsKKyAgICAg
ICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKG51bGwsIE1lc3NhZ2VzLkludmFsaWRSZWdFeHAp
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIG9i
amVjdCBmb3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3IKQEAgLTE0MDMsMTEgKzEzNDIsMTEg
QEAKICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKICAgICAgICAgICAgICAg
ICAvLyBFQ01BLTI2MiA3LjguNQogICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9y
KGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICAgICAgICAgIHRocm93
VW5leHBlY3RlZFRva2VuKG51bGwsIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAg
ICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obnVsbCwgTWVzc2FnZXMuVW50ZXJtaW5h
dGVkUmVnRXhwKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY2ggPT09ICddJykgewogICAgICAgICAgICAgICAgICAgICBjbGFzc01h
cmtlciA9IGZhbHNlOwpAQCAtMTQyMyw3ICsxMzYyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghdGVybWluYXRlZCkgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKG51
bGwsIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLgpAQCAtMTQ2MiwxMCArMTQwMSwx
MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gJ3UnOwogICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyICs9ICdcXHUnOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRv
a2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRU
b2tlbigpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSAnXFwnOwotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1l
c3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICAgICAg
dG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoOwpAQCAtMTQ4MSw2ICsxNDIw
LDcgQEAKIAogICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHAoKSB7CiAgICAgICAgIHZhciBzdGFydCwg
Ym9keSwgZmxhZ3MsIHZhbHVlOworICAgICAgICBzY2FubmluZyA9IHRydWU7CiAKICAgICAgICAg
bG9va2FoZWFkID0gbnVsbDsKICAgICAgICAgc2tpcENvbW1lbnQoKTsKQEAgLTE0ODksNyArMTQy
OSw3IEBACiAgICAgICAgIGJvZHkgPSBzY2FuUmVnRXhwQm9keSgpOwogICAgICAgICBmbGFncyA9
IHNjYW5SZWdFeHBGbGFncygpOwogICAgICAgICB2YWx1ZSA9IHRlc3RSZWdFeHAoYm9keS52YWx1
ZSwgZmxhZ3MudmFsdWUpOwotCisgICAgICAgIHNjYW5uaW5nID0gZmFsc2U7CiAgICAgICAgIGlm
IChleHRyYS50b2tlbml6ZSkgewogICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAg
ICB0eXBlOiBUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbiwKQEAgLTE1MDAsNyArMTQ0MCw4IEBACiAg
ICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVy
LAogICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgICAg
IHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAg
ICAgICAgICAgICAgICBlbmQ6IGluZGV4CiAgICAgICAgICAgICB9OwogICAgICAgICB9CiAKQEAg
LTE1MTEsMzggKzE0NTIsODYgQEAKICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBib2R5LnZhbHVl
LAogICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncy52YWx1ZQogICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0
LAorICAgICAgICAgICAgZW5kOiBpbmRleAogICAgICAgICB9OwogICAgIH0KIAotICAgIGZ1bmN0
aW9uIGlzSWRlbnRpZmllck5hbWUodG9rZW4pIHsKLSAgICAgICAgcmV0dXJuIHRva2VuLnR5cGUg
PT09IFRva2VuLklkZW50aWZpZXIgfHwKLSAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2Vu
LktleXdvcmQgfHwKLSAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRl
cmFsIHx8Ci0gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbDsKLSAg
ICB9CisgICAgZnVuY3Rpb24gY29sbGVjdFJlZ2V4KCkgeworICAgICAgICB2YXIgcG9zLCBsb2Ms
IHJlZ2V4LCB0b2tlbjsKIAotICAgIGZ1bmN0aW9uIGFkdmFuY2VTbGFzaCgpIHsKLSAgICAgICAg
dmFyIHByZXZUb2tlbiwKLSAgICAgICAgICAgIGNoZWNrVG9rZW47Ci0gICAgICAgIC8vIFVzaW5n
IHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgotICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20v
bW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnbgotICAgICAgICBwcmV2VG9rZW4gPSBleHRyYS50
b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdOwotICAgICAgICBpZiAoIXByZXZUb2tlbikg
ewotICAgICAgICAgICAgLy8gTm90aGluZyBiZWZvcmUgdGhhdDogaXQgY2Fubm90IGJlIGEgZGl2
aXNpb24uCi0gICAgICAgICAgICByZXR1cm4gc2NhblJlZ0V4cCgpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gJ1B1bmN0dWF0b3InKSB7Ci0gICAgICAgICAgICBp
ZiAocHJldlRva2VuLnZhbHVlID09PSAnKScpIHsKLSAgICAgICAgICAgICAgICBjaGVja1Rva2Vu
ID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5QYXJlblRva2VuIC0gMV07Ci0gICAgICAgICAgICAg
ICAgaWYgKGNoZWNrVG9rZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4u
dHlwZSA9PT0gJ0tleXdvcmQnICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tUb2tl
bi52YWx1ZSA9PT0gJ2lmJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4u
dmFsdWUgPT09ICd3aGlsZScgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2Vu
LnZhbHVlID09PSAnZm9yJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4u
dmFsdWUgPT09ICd3aXRoJykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5SZWdF
eHAoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIHNraXBDb21tZW50KCk7CisKKyAgICAg
ICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7Cisg
ICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46
IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAg
cmVnZXggPSBzY2FuUmVnRXhwKCk7CisKKyAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAg
IGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0
CisgICAgICAgIH07CisKKyAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICAg
ICAgaWYgKCFleHRyYS50b2tlbml6ZSkgeworICAgICAgICAgICAgLy8gUG9wIHRoZSBwcmV2aW91
cyB0b2tlbiwgd2hpY2ggaXMgbGlrZWx5ICcvJyBvciAnLz0nCisgICAgICAgICAgICBpZiAoZXh0
cmEudG9rZW5zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGV4dHJhLnRv
a2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgaWYgKHRva2Vu
LnJhbmdlWzBdID09PSBwb3MgJiYgdG9rZW4udHlwZSA9PT0gJ1B1bmN0dWF0b3InKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJy8nIHx8IHRva2VuLnZhbHVlID09
PSAnLz0nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnMucG9wKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICB0eXBlOiAn
UmVndWxhckV4cHJlc3Npb24nLAorICAgICAgICAgICAgICAgIHZhbHVlOiByZWdleC5saXRlcmFs
LAorICAgICAgICAgICAgICAgIHJlZ2V4OiByZWdleC5yZWdleCwKKyAgICAgICAgICAgICAgICBy
YW5nZTogW3BvcywgaW5kZXhdLAorICAgICAgICAgICAgICAgIGxvYzogbG9jCisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZWdleDsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7CisgICAgICAgIHJldHVybiB0b2tlbi50
eXBlID09PSBUb2tlbi5JZGVudGlmaWVyIHx8CisgICAgICAgICAgICB0b2tlbi50eXBlID09PSBU
b2tlbi5LZXl3b3JkIHx8CisgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5Cb29sZWFu
TGl0ZXJhbCB8fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWw7
CisgICAgfQorCisgICAgZnVuY3Rpb24gYWR2YW5jZVNsYXNoKCkgeworICAgICAgICB2YXIgcHJl
dlRva2VuLAorICAgICAgICAgICAgY2hlY2tUb2tlbjsKKyAgICAgICAgLy8gVXNpbmcgdGhlIGZv
bGxvd2luZyBhbGdvcml0aG06CisgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxh
L3N3ZWV0LmpzL3dpa2kvZGVzaWduCisgICAgICAgIHByZXZUb2tlbiA9IGV4dHJhLnRva2Vuc1tl
eHRyYS50b2tlbnMubGVuZ3RoIC0gMV07CisgICAgICAgIGlmICghcHJldlRva2VuKSB7CisgICAg
ICAgICAgICAvLyBOb3RoaW5nIGJlZm9yZSB0aGF0OiBpdCBjYW5ub3QgYmUgYSBkaXZpc2lvbi4K
KyAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocHJldlRva2VuLnR5cGUgPT09ICdQdW5jdHVhdG9yJykgeworICAgICAgICAgICAgaWYgKHBy
ZXZUb2tlbi52YWx1ZSA9PT0gJ10nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5j
dHVhdG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJldlRva2VuLnZhbHVl
ID09PSAnKScpIHsKKyAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4
dHJhLm9wZW5QYXJlblRva2VuIC0gMV07CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrVG9rZW4g
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udHlwZSA9PT0gJ0tleXdvcmQn
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2lmJyB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICd3aGlsZScg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnZm9yJyB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICd3aXRoJykp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICd9JykgewpAQCAt
MTU2MCw3ICsxNTQ5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gTmFtZWQgZnVuY3Rpb24u
CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3Bl
bkN1cmx5VG9rZW4gLSA1XTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGVja1Rva2VuKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblJlZ0V4cCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNjYW5QdW5jdHVhdG9yKCk7CkBAIC0xNTcyLDgxOSArMTU2MSw5MzggQEAKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIC8vIEl0IGlzIGEgZGVjbGFyYXRpb24uCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHNjYW5SZWdFeHAoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NhblJlZ0V4cCgpOworICAgICAg
ICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChwcmV2
VG9rZW4udHlwZSA9PT0gJ0tleXdvcmQnICYmIHByZXZUb2tlbi52YWx1ZSAhPT0gJ3RoaXMnKSB7
Ci0gICAgICAgICAgICByZXR1cm4gc2NhblJlZ0V4cCgpOworICAgICAgICAgICAgcmV0dXJuIGNv
bGxlY3RSZWdleCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigp
OwogICAgIH0KIAogICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7Ci0gICAgICAgIHZhciBjaDsKLQot
ICAgICAgICBza2lwQ29tbWVudCgpOworICAgICAgICB2YXIgY3AsIHRva2VuOwogCiAgICAgICAg
IGlmIChpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAg
ICAgICAgdHlwZTogVG9rZW4uRU9GLAogICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVO
dW1iZXIsCiAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAg
ICAgICAgcmFuZ2U6IFtpbmRleCwgaW5kZXhdCisgICAgICAgICAgICAgICAgc3RhcnQ6IGluZGV4
LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKICAgICAgICAgICAgIH07CiAgICAgICAgIH0K
IAotICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgY3AgPSBz
b3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0
KGNwKSkgeworICAgICAgICAgICAgdG9rZW4gPSBzY2FuSWRlbnRpZmllcigpOworICAgICAgICAg
ICAgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7
CisgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9IFRva2VuLktleXdvcmQ7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgIH0KIAogICAgICAgICAvLyBW
ZXJ5IGNvbW1vbjogKCBhbmQgKSBhbmQgOwotICAgICAgICBpZiAoY2ggPT09IDQwIHx8IGNoID09
PSA0MSB8fCBjaCA9PT0gNTgpIHsKKyAgICAgICAgaWYgKGNwID09PSAweDI4IHx8IGNwID09PSAw
eDI5IHx8IGNwID09PSAweDNCKSB7CiAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3Io
KTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNp
bmdsZSBxdW90ZSAoIzM5KSBvciBkb3VibGUgcXVvdGUgKCMzNCkuCi0gICAgICAgIGlmIChjaCA9
PT0gMzkgfHwgY2ggPT09IDM0KSB7CisgICAgICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3
aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuCisgICAg
ICAgIGlmIChjcCA9PT0gMHgyNyB8fCBjcCA9PT0gMHgyMikgewogICAgICAgICAgICAgcmV0dXJu
IHNjYW5TdHJpbmdMaXRlcmFsKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY2ggPT09IDk2
KSB7Ci0gICAgICAgICAgICByZXR1cm4gc2NhblRlbXBsYXRlKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkgewotICAgICAgICAgICAgcmV0dXJuIHNjYW5J
ZGVudGlmaWVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEb3QgKC4pIGNoYXIgIzQ2IGNh
biBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5jZSB0aGUgbmVlZAorICAg
ICAgICAvLyBEb3QgKC4pIFUrMDAyRSBjYW4gYWxzbyBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51
bWJlciwgaGVuY2UgdGhlIG5lZWQKICAgICAgICAgLy8gdG8gY2hlY2sgdGhlIG5leHQgY2hhcmFj
dGVyLgotICAgICAgICBpZiAoY2ggPT09IDQ2KSB7CisgICAgICAgIGlmIChjcCA9PT0gMHgyRSkg
ewogICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
ICsgMSkpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgIGlmIChp
c0RlY2ltYWxEaWdpdChjcCkpIHsKICAgICAgICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVy
YWwoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFNsYXNoICgvKSBjaGFyICM0NyBjYW4gYWxz
byBzdGFydCBhIHJlZ2V4LgotICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUgJiYgY2ggPT09IDQ3
KSB7CisgICAgICAgIC8vIFNsYXNoICgvKSBVKzAwMkYgY2FuIGFsc28gc3RhcnQgYSByZWdleC4K
KyAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNwID09PSAweDJGKSB7CiAgICAgICAgICAg
ICByZXR1cm4gYWR2YW5jZVNsYXNoKCk7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBUZW1wbGF0
ZSBsaXRlcmFscyBzdGFydCB3aXRoIGAgKFUrMDA2MCkgZm9yIHRlbXBsYXRlIGhlYWQKKyAgICAg
ICAgLy8gb3IgfSAoVSswMDdEKSBmb3IgdGVtcGxhdGUgbWlkZGxlIG9yIHRlbXBsYXRlIHRhaWwu
CisgICAgICAgIGlmIChjcCA9PT0gMHg2MCB8fCAoY3AgPT09IDB4N0QgJiYgc3RhdGUuY3VybHlT
dGFja1tzdGF0ZS5jdXJseVN0YWNrLmxlbmd0aCAtIDFdID09PSAnJHsnKSkgeworICAgICAgICAg
ICAgcmV0dXJuIHNjYW5UZW1wbGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9zc2li
bGUgaWRlbnRpZmllciBzdGFydCBpbiBhIHN1cnJvZ2F0ZSBwYWlyLgorICAgICAgICBpZiAoY3Ag
Pj0gMHhEODAwICYmIGNwIDwgMHhERkZGKSB7CisgICAgICAgICAgICBjcCA9IGNvZGVQb2ludEF0
KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjcCkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc2NhbklkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCiAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwogICAgIH0KIAorICAgIGZ1
bmN0aW9uIGNvbGxlY3RUb2tlbigpIHsKKyAgICAgICAgdmFyIGxvYywgdG9rZW4sIHZhbHVlLCBl
bnRyeTsKKworICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICBzdGFydDogeworICAgICAgICAg
ICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAt
IGxpbmVTdGFydAorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHRva2VuID0g
YWR2YW5jZSgpOworICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgbGluZTogbGluZU51
bWJlciwKKyAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgfTsK
KworICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICB2
YWx1ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTsKKyAgICAgICAgICAg
IGVudHJ5ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuTmFtZVt0b2tlbi50eXBlXSwK
KyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFt0
b2tlbi5zdGFydCwgdG9rZW4uZW5kXSwKKyAgICAgICAgICAgICAgICBsb2M6IGxvYworICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGlmICh0b2tlbi5yZWdleCkgeworICAgICAgICAgICAgICAg
IGVudHJ5LnJlZ2V4ID0geworICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiB0b2tlbi5yZWdl
eC5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICBmbGFnczogdG9rZW4ucmVnZXguZmxhZ3MK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXh0cmEudG9r
ZW5zLnB1c2goZW50cnkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRva2VuOworICAg
IH0KKwogICAgIGZ1bmN0aW9uIGxleCgpIHsKICAgICAgICAgdmFyIHRva2VuOworICAgICAgICBz
Y2FubmluZyA9IHRydWU7CisKKyAgICAgICAgbGFzdEluZGV4ID0gaW5kZXg7CisgICAgICAgIGxh
c3RMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgbGFzdExpbmVTdGFydCA9IGxpbmVT
dGFydDsKKworICAgICAgICBza2lwQ29tbWVudCgpOwogCiAgICAgICAgIHRva2VuID0gbG9va2Fo
ZWFkOwotICAgICAgICBpbmRleCA9IHRva2VuLnJhbmdlWzFdOwotICAgICAgICBsaW5lTnVtYmVy
ID0gdG9rZW4ubGluZU51bWJlcjsKLSAgICAgICAgbGluZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0
OwotCi0gICAgICAgIGxvb2thaGVhZCA9IGFkdmFuY2UoKTsKLQotICAgICAgICBpbmRleCA9IHRv
a2VuLnJhbmdlWzFdOwotICAgICAgICBsaW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKLSAg
ICAgICAgbGluZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0OwogCisgICAgICAgIHN0YXJ0SW5kZXgg
PSBpbmRleDsKKyAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAg
c3RhcnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7CisKKyAgICAgICAgbG9va2FoZWFkID0gKHR5cGVv
ZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5j
ZSgpOworICAgICAgICBzY2FubmluZyA9IGZhbHNlOwogICAgICAgICByZXR1cm4gdG9rZW47CiAg
ICAgfQogCiAgICAgZnVuY3Rpb24gcGVlaygpIHsKLSAgICAgICAgdmFyIHBvcywgbGluZSwgc3Rh
cnQ7Ci0KLSAgICAgICAgcG9zID0gaW5kZXg7Ci0gICAgICAgIGxpbmUgPSBsaW5lTnVtYmVyOwot
ICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKLSAgICAgICAgbG9va2FoZWFkID0gYWR2YW5jZSgp
OwotICAgICAgICBpbmRleCA9IHBvczsKLSAgICAgICAgbGluZU51bWJlciA9IGxpbmU7Ci0gICAg
ICAgIGxpbmVTdGFydCA9IHN0YXJ0OwotICAgIH0KKyAgICAgICAgc2Nhbm5pbmcgPSB0cnVlOwog
Ci0gICAgZnVuY3Rpb24gbG9va2FoZWFkMigpIHsKLSAgICAgICAgdmFyIGFkdiwgcG9zLCBsaW5l
LCBzdGFydCwgcmVzdWx0OwotCi0gICAgICAgIC8vIElmIHdlIGFyZSBjb2xsZWN0aW5nIHRoZSB0
b2tlbnMsIGRvbid0IGdyYWIgdGhlIG5leHQgb25lIHlldC4KLSAgICAgICAgLyogaXN0YW5idWwg
aWdub3JlIG5leHQgKi8KLSAgICAgICAgYWR2ID0gKHR5cGVvZiBleHRyYS5hZHZhbmNlID09PSAn
ZnVuY3Rpb24nKSA/IGV4dHJhLmFkdmFuY2UgOiBhZHZhbmNlOworICAgICAgICBza2lwQ29tbWVu
dCgpOwogCi0gICAgICAgIHBvcyA9IGluZGV4OwotICAgICAgICBsaW5lID0gbGluZU51bWJlcjsK
LSAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7CisgICAgICAgIGxhc3RJbmRleCA9IGluZGV4Owor
ICAgICAgICBsYXN0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGxhc3RMaW5lU3Rh
cnQgPSBsaW5lU3RhcnQ7CiAKLSAgICAgICAgLy8gU2NhbiBmb3IgdGhlIG5leHQgaW1tZWRpYXRl
IHRva2VuLgotICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8KLSAgICAgICAgaWYgKGxv
b2thaGVhZCA9PT0gbnVsbCkgewotICAgICAgICAgICAgbG9va2FoZWFkID0gYWR2KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaW5kZXggPSBsb29rYWhlYWQucmFuZ2VbMV07Ci0gICAgICAgIGxpbmVO
dW1iZXIgPSBsb29rYWhlYWQubGluZU51bWJlcjsKLSAgICAgICAgbGluZVN0YXJ0ID0gbG9va2Fo
ZWFkLmxpbmVTdGFydDsKLQotICAgICAgICAvLyBHcmFiIHRoZSB0b2tlbiByaWdodCBhZnRlci4K
LSAgICAgICAgcmVzdWx0ID0gYWR2KCk7Ci0gICAgICAgIGluZGV4ID0gcG9zOwotICAgICAgICBs
aW5lTnVtYmVyID0gbGluZTsKLSAgICAgICAgbGluZVN0YXJ0ID0gc3RhcnQ7CisgICAgICAgIHN0
YXJ0SW5kZXggPSBpbmRleDsKKyAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gbGluZU51bWJlcjsK
KyAgICAgICAgc3RhcnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7CiAKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRl
ZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpOworICAgICAgICBzY2FubmluZyA9
IGZhbHNlOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIG1hcmtlckNyZWF0ZSgpIHsKLSAgICAgICAg
aWYgKCFleHRyYS5sb2MgJiYgIWV4dHJhLnJhbmdlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdW5k
ZWZpbmVkOwotICAgICAgICB9Ci0gICAgICAgIHNraXBDb21tZW50KCk7Ci0gICAgICAgIHJldHVy
biB7b2Zmc2V0OiBpbmRleCwgbGluZTogbGluZU51bWJlciwgY29sOiBpbmRleCAtIGxpbmVTdGFy
dH07CisgICAgZnVuY3Rpb24gUG9zaXRpb24oKSB7CisgICAgICAgIHRoaXMubGluZSA9IHN0YXJ0
TGluZU51bWJlcjsKKyAgICAgICAgdGhpcy5jb2x1bW4gPSBzdGFydEluZGV4IC0gc3RhcnRMaW5l
U3RhcnQ7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gcHJvY2Vzc0NvbW1lbnQobm9kZSkgewotICAg
ICAgICB2YXIgbGFzdENoaWxkLAotICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cywKLSAgICAg
ICAgICAgIGJvdHRvbVJpZ2h0ID0gZXh0cmEuYm90dG9tUmlnaHRTdGFjaywKLSAgICAgICAgICAg
IGxhc3QgPSBib3R0b21SaWdodFtib3R0b21SaWdodC5sZW5ndGggLSAxXTsKLQotICAgICAgICBp
ZiAobm9kZS50eXBlID09PSBTeW50YXguUHJvZ3JhbSkgewotICAgICAgICAgICAgLyogaXN0YW5i
dWwgaWdub3JlIGVsc2UgKi8KLSAgICAgICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID4gMCkg
ewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKLSAgICAgICAg
ICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2Vb
MV0pIHsKLSAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEudHJhaWxpbmdD
b21tZW50czsKLSAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVu
dHMubGVuZ3RoID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChsYXN0ICYmIGxhc3QudHJhaWxpbmdDb21tZW50cyAmJiBsYXN0LnRyYWlsaW5nQ29t
bWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkgewotICAgICAgICAgICAgICAgIHRy
YWlsaW5nQ29tbWVudHMgPSBsYXN0LnRyYWlsaW5nQ29tbWVudHM7Ci0gICAgICAgICAgICAgICAg
ZGVsZXRlIGxhc3QudHJhaWxpbmdDb21tZW50czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
ICAgIGZ1bmN0aW9uIFNvdXJjZUxvY2F0aW9uKCkgeworICAgICAgICB0aGlzLnN0YXJ0ID0gbmV3
IFBvc2l0aW9uKCk7CisgICAgICAgIHRoaXMuZW5kID0gbnVsbDsKKyAgICB9CiAKLSAgICAgICAg
Ly8gRWF0aW5nIHRoZSBzdGFjay4KLSAgICAgICAgaWYgKGxhc3QpIHsKLSAgICAgICAgICAgIHdo
aWxlIChsYXN0ICYmIGxhc3QucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVswXSkgewotICAgICAgICAg
ICAgICAgIGxhc3RDaGlsZCA9IGxhc3Q7Ci0gICAgICAgICAgICAgICAgbGFzdCA9IGJvdHRvbVJp
Z2h0LnBvcCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgZnVuY3Rpb24gV3JhcHBp
bmdTb3VyY2VMb2NhdGlvbihzdGFydFRva2VuKSB7CisgICAgICAgIHRoaXMuc3RhcnQgPSB7Cisg
ICAgICAgICAgICBsaW5lOiBzdGFydFRva2VuLmxpbmVOdW1iZXIsCisgICAgICAgICAgICBjb2x1
bW46IHN0YXJ0VG9rZW4uc3RhcnQgLSBzdGFydFRva2VuLmxpbmVTdGFydAorICAgICAgICB9Owor
ICAgICAgICB0aGlzLmVuZCA9IG51bGw7CisgICAgfQogCi0gICAgICAgIGlmIChsYXN0Q2hpbGQp
IHsKLSAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzICYmIGxhc3RDaGls
ZC5sZWFkaW5nQ29tbWVudHNbbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5y
YW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5n
Q29tbWVudHMgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgICAgIGRl
bGV0ZSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGV4dHJhLmxlYWRpbmdDb21tZW50cy5sZW5ndGggPiAwICYmIGV4dHJhLmxlYWRp
bmdDb21tZW50c1tleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0g
bm9kZS5yYW5nZVswXSkgewotICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBleHRy
YS5sZWFkaW5nQ29tbWVudHM7Ci0gICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMgPSBb
XTsKKyAgICBmdW5jdGlvbiBOb2RlKCkgeworICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKKyAg
ICAgICAgICAgIHRoaXMucmFuZ2UgPSBbc3RhcnRJbmRleCwgMF07CiAgICAgICAgIH0KLQotICAg
ICAgICBpZiAodHJhaWxpbmdDb21tZW50cykgewotICAgICAgICAgICAgbm9kZS50cmFpbGluZ0Nv
bW1lbnRzID0gdHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgaWYgKGV4dHJhLmxvYykgeworICAg
ICAgICAgICAgdGhpcy5sb2MgPSBuZXcgU291cmNlTG9jYXRpb24oKTsKICAgICAgICAgfQotCi0g
ICAgICAgIGJvdHRvbVJpZ2h0LnB1c2gobm9kZSk7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gbWFy
a2VyQXBwbHkobWFya2VyLCBub2RlKSB7CisgICAgZnVuY3Rpb24gV3JhcHBpbmdOb2RlKHN0YXJ0
VG9rZW4pIHsKICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7Ci0gICAgICAgICAgICBub2RlLnJh
bmdlID0gW21hcmtlci5vZmZzZXQsIGluZGV4XTsKKyAgICAgICAgICAgIHRoaXMucmFuZ2UgPSBb
c3RhcnRUb2tlbi5zdGFydCwgMF07CiAgICAgICAgIH0KICAgICAgICAgaWYgKGV4dHJhLmxvYykg
ewotICAgICAgICAgICAgbm9kZS5sb2MgPSB7Ci0gICAgICAgICAgICAgICAgc3RhcnQ6IHsKLSAg
ICAgICAgICAgICAgICAgICAgbGluZTogbWFya2VyLmxpbmUsCi0gICAgICAgICAgICAgICAgICAg
IGNvbHVtbjogbWFya2VyLmNvbAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
ZW5kOiB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCi0gICAgICAgICAg
ICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9OwotICAgICAgICAgICAgbm9kZSA9IGRlbGVnYXRlLnBvc3RQcm9jZXNzKG5v
ZGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzQ29tbWVudChub2RlKTsKKyAgICAgICAgICAgIHRoaXMubG9jID0gbmV3
IFdyYXBwaW5nU291cmNlTG9jYXRpb24oc3RhcnRUb2tlbik7CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgU3ludGF4VHJlZURlbGVnYXRlID0geworICAgIFdy
YXBwaW5nTm9kZS5wcm90b3R5cGUgPSBOb2RlLnByb3RvdHlwZSA9IHsKIAotICAgICAgICBuYW1l
OiAnU3ludGF4VHJlZScsCi0KLSAgICAgICAgcG9zdFByb2Nlc3M6IGZ1bmN0aW9uIChub2RlKSB7
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVB
cnJheUV4cHJlc3Npb246IGZ1bmN0aW9uIChlbGVtZW50cykgewotICAgICAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyYXlFeHByZXNzaW9uLAotICAgICAg
ICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cwotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwK
LQotICAgICAgICBjcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9y
LCBsZWZ0LCByaWdodCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgb3BlcmF0
b3I6IG9wZXJhdG9yLAotICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCi0gICAgICAgICAgICAg
ICAgcmlnaHQ6IHJpZ2h0Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNy
ZWF0ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsK
LSAgICAgICAgICAgIHZhciB0eXBlID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9wZXJhdG9yID09
PSAnJiYnKSA/IFN5bnRheC5Mb2dpY2FsRXhwcmVzc2lvbiA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgdHlwZTogdHlwZSwKLSAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0
b3IsCi0gICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKLSAgICAgICAgICAgICAgICByaWdodDog
cmlnaHQKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCisgICAgICAgIHByb2Nlc3NDb21tZW50
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbGFzdENoaWxkLAorICAgICAgICAgICAg
ICAgIGxlYWRpbmdDb21tZW50cywKKyAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzLAor
ICAgICAgICAgICAgICAgIGJvdHRvbVJpZ2h0ID0gZXh0cmEuYm90dG9tUmlnaHRTdGFjaywKKyAg
ICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgIGNvbW1lbnQsCisgICAgICAgICAgICAg
ICAgbGFzdCA9IGJvdHRvbVJpZ2h0W2JvdHRvbVJpZ2h0Lmxlbmd0aCAtIDFdOwogCi0gICAgICAg
IGNyZWF0ZUJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbiAoYm9keSkgewotICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQmxvY2tTdGF0ZW1lbnQsCi0gICAg
ICAgICAgICAgICAgYm9keTogYm9keQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAg
ICAgICBjcmVhdGVCcmVha1N0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5CcmVha1N0YXRlbWVudCwK
LSAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgY3JlYXRlQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3Mp
IHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNh
bGxFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLAotICAgICAgICAg
ICAgICAgICdhcmd1bWVudHMnOiBhcmdzCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0g
ICAgICAgIGNyZWF0ZUNhdGNoQ2xhdXNlOiBmdW5jdGlvbiAocGFyYW0sIGJvZHkpIHsKLSAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNhdGNoQ2xhdXNl
LAotICAgICAgICAgICAgICAgIHBhcmFtOiBwYXJhbSwKLSAgICAgICAgICAgICAgICBib2R5OiBi
b2R5Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUNvbmRpdGlv
bmFsRXhwcmVzc2lvbjogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkgewot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ29uZGl0
aW9uYWxFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCi0gICAgICAgICAg
ICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKLSAgICAgICAgICAgICAgICBhbHRlcm5hdGU6
IGFsdGVybmF0ZQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVD
b250aW51ZVN0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsKSB7Ci0gICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db250aW51ZVN0YXRlbWVudCwKLSAgICAg
ICAgICAgICAgICBsYWJlbDogbGFiZWwKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50
Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZURvV2hpbGVTdGF0
ZW1lbnQ6IGZ1bmN0aW9uIChib2R5LCB0ZXN0KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Eb1doaWxlU3RhdGVtZW50LAotICAgICAgICAgICAg
ICAgIGJvZHk6IGJvZHksCi0gICAgICAgICAgICAgICAgdGVzdDogdGVzdAotICAgICAgICAgICAg
fTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVFbXB0eVN0YXRlbWVudDogZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
RW1wdHlTdGF0ZW1lbnQKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3Jl
YXRlRXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rpb24gKGV4cHJlc3Npb24pIHsKLSAgICAgICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkV4cHJlc3Npb25TdGF0
ZW1lbnQsCi0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvbgotICAgICAgICAg
ICAgfTsKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFN5bnRheC5Q
cm9ncmFtKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuYm9keS5sZW5ndGggPiAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgY3JlYXRlRm9yU3RhdGVtZW50OiBmdW5jdGlvbiAoaW5pdCwgdGVzdCwg
dXBkYXRlLCBib2R5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5Gb3JTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgaW5pdDogaW5pdCwKLSAg
ICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAotICAgICAgICAgICAgICAgIHVwZGF0ZTogdXBkYXRl
LAotICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0s
CisgICAgICAgICAgICBpZiAoZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7Cisg
ICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgICAgIGZv
ciAoaSA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHNbaV07
CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50LnJhbmdlWzBdID49IHRoaXMucmFuZ2Vb
MV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMudW5zaGlmdChj
b21tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMu
c3BsaWNlKGksIDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC50cmFpbGluZ0NvbW1l
bnRzICYmIGxhc3QudHJhaWxpbmdDb21tZW50c1swXS5yYW5nZVswXSA+PSB0aGlzLnJhbmdlWzFd
KSB7CisgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBsYXN0LnRyYWlsaW5n
Q29tbWVudHM7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsYXN0LnRyYWlsaW5nQ29tbWVu
dHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgIGNyZWF0ZUZv
ckluU3RhdGVtZW50OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvZHkpIHsKLSAgICAgICAgICAg
IHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkZvckluU3RhdGVtZW50LAot
ICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCi0gICAgICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0
LAotICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCi0gICAgICAgICAgICAgICAgZWFjaDogZmFs
c2UKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCisgICAgICAgICAgICAvLyBFYXRpbmcgdGhl
IHN0YWNrLgorICAgICAgICAgICAgd2hpbGUgKGxhc3QgJiYgbGFzdC5yYW5nZVswXSA+PSB0aGlz
LnJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAgbGFzdENoaWxkID0gYm90dG9tUmlnaHQucG9w
KCk7CisgICAgICAgICAgICAgICAgbGFzdCA9IGJvdHRvbVJpZ2h0W2JvdHRvbVJpZ2h0Lmxlbmd0
aCAtIDFdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGFzdENoaWxkKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbGVhZGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaSA9IGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBsYXN0Q2hpbGQubGVhZGluZ0Nv
bW1lbnRzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQucmFuZ2VbMV0g
PD0gdGhpcy5yYW5nZVswXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYWRpbmdD
b21tZW50cy51bnNoaWZ0KGNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxh
c3RDaGlsZC5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgY3JlYXRlRm9yT2ZTdGF0
ZW1lbnQ6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm9keSkgewotICAgICAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRm9yT2ZTdGF0ZW1lbnQsCi0gICAgICAg
ICAgICAgICAgbGVmdDogbGVmdCwKLSAgICAgICAgICAgICAgICByaWdodDogcmlnaHQsCi0gICAg
ICAgICAgICAgICAgYm9keTogYm9keQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cyA9IHVuZGVm
aW5lZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKKyAgICAg
ICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKGkg
PSBleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29tbWVudCA9IGV4dHJhLmxlYWRpbmdDb21tZW50c1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQucmFuZ2VbMV0gPD0gdGhpcy5yYW5nZVswXSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGluZ0NvbW1lbnRzLnVuc2hpZnQoY29tbWVudCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKGks
IDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQogCi0gICAgICAgIGNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb246IGZ1bmN0aW9uIChpZCwg
cGFyYW1zLCBkZWZhdWx0cywgYm9keSwgcmVzdCwgZ2VuZXJhdG9yLCBleHByZXNzaW9uKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlv
bkRlY2xhcmF0aW9uLAotICAgICAgICAgICAgICAgIGlkOiBpZCwKLSAgICAgICAgICAgICAgICBw
YXJhbXM6IHBhcmFtcywKLSAgICAgICAgICAgICAgICBkZWZhdWx0czogZGVmYXVsdHMsCi0gICAg
ICAgICAgICAgICAgYm9keTogYm9keSwKLSAgICAgICAgICAgICAgICByZXN0OiByZXN0LAotICAg
ICAgICAgICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdG9yLAotICAgICAgICAgICAgICAgIGV4cHJl
c3Npb246IGV4cHJlc3Npb24KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCiAKLSAgICAgICAg
Y3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgZGVmYXVsdHMs
IGJvZHksIHJlc3QsIGdlbmVyYXRvciwgZXhwcmVzc2lvbikgewotICAgICAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9uLAotICAg
ICAgICAgICAgICAgIGlkOiBpZCwKLSAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0czogZGVmYXVsdHMsCi0gICAgICAgICAgICAgICAgYm9keTog
Ym9keSwKLSAgICAgICAgICAgICAgICByZXN0OiByZXN0LAotICAgICAgICAgICAgICAgIGdlbmVy
YXRvcjogZ2VuZXJhdG9yLAotICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24K
LSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAobGVhZGluZ0NvbW1l
bnRzICYmIGxlYWRpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5sZWFkaW5nQ29tbWVudHMgPSBsZWFkaW5nQ29tbWVudHM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cyAmJiB0cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRyYWlsaW5nQ29tbWVudHMgPSB0cmFpbGluZ0Nv
bW1lbnRzOworICAgICAgICAgICAgfQogCi0gICAgICAgIGNyZWF0ZUlkZW50aWZpZXI6IGZ1bmN0
aW9uIChuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5JZGVudGlmaWVyLAotICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUKLSAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBib3R0b21SaWdodC5wdXNoKHRoaXMpOwogICAgICAgICB9LAog
Ci0gICAgICAgIGNyZWF0ZUlmU3RhdGVtZW50OiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwg
YWx0ZXJuYXRlKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5JZlN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAotICAgICAg
ICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnQsCi0gICAgICAgICAgICAgICAgYWx0ZXJu
YXRlOiBhbHRlcm5hdGUKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCisgICAgICAgIGZpbmlz
aDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5yYW5nZVsxXSA9IGxhc3RJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChleHRyYS5sb2MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmxvYy5lbmQgPSB7
CisgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxhc3RMaW5lTnVtYmVyLAorICAgICAgICAgICAg
ICAgICAgICBjb2x1bW46IGxhc3RJbmRleCAtIGxhc3RMaW5lU3RhcnQKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIGlmIChleHRyYS5zb3VyY2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5sb2Muc291cmNlID0gZXh0cmEuc291cmNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KIAotICAgICAgICBjcmVhdGVMYWJlbGVkU3RhdGVtZW50OiBmdW5jdGlv
biAobGFiZWwsIGJvZHkpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgbGFiZWw6IGxh
YmVsLAotICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKLSAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAgICAgICAgICAgIHRoaXMucHJv
Y2Vzc0NvbW1lbnQoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSwKIAotICAgICAgICBjcmVh
dGVMaXRlcmFsOiBmdW5jdGlvbiAodG9rZW4pIHsKLSAgICAgICAgICAgIHZhciBvYmplY3QgPSB7
Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkxpdGVyYWwsCi0gICAgICAgICAgICAgICAg
dmFsdWU6IHRva2VuLnZhbHVlLAotICAgICAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHRv
a2VuLnJhbmdlWzBdLCB0b2tlbi5yYW5nZVsxXSkKLSAgICAgICAgICAgIH07CisgICAgICAgIGZp
bmlzaEFycmF5RXhwcmVzc2lvbjogZnVuY3Rpb24gKGVsZW1lbnRzKSB7CisgICAgICAgICAgICB0
aGlzLnR5cGUgPSBTeW50YXguQXJyYXlFeHByZXNzaW9uOworICAgICAgICAgICAgdGhpcy5lbGVt
ZW50cyA9IGVsZW1lbnRzOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaEFycmF5UGF0dGVybjog
ZnVuY3Rpb24gKGVsZW1lbnRzKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQXJy
YXlQYXR0ZXJuOworICAgICAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzOworICAgICAg
ICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9
LAorCisgICAgICAgIGZpbmlzaEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAocGFy
YW1zLCBkZWZhdWx0cywgYm9keSwgZXhwcmVzc2lvbikgeworICAgICAgICAgICAgdGhpcy50eXBl
ID0gU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uOworICAgICAgICAgICAgdGhpcy5pZCA9
IG51bGw7CisgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKKyAgICAgICAgICAgIHRo
aXMuZGVmYXVsdHMgPSBkZWZhdWx0czsKKyAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7Cisg
ICAgICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5leHBy
ZXNzaW9uID0gZXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5pc2hBc3NpZ25tZW50
RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgeworICAgICAgICAg
ICAgdGhpcy50eXBlID0gU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uOworICAgICAgICAgICAg
dGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOworICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsK
KyAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDsKKyAgICAgICAgICAgIHRoaXMuZmluaXNo
KCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5p
c2hBc3NpZ25tZW50UGF0dGVybjogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7CisgICAgICAgICAg
ICB0aGlzLnR5cGUgPSBTeW50YXguQXNzaWdubWVudFBhdHRlcm47CisgICAgICAgICAgICB0aGlz
LmxlZnQgPSBsZWZ0OworICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0OworICAgICAgICAg
ICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAor
CisgICAgICAgIGZpbmlzaEJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVm
dCwgcmlnaHQpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IChvcGVyYXRvciA9PT0gJ3x8JyB8
fCBvcGVyYXRvciA9PT0gJyYmJykgPyBTeW50YXguTG9naWNhbEV4cHJlc3Npb24gOiBTeW50YXgu
QmluYXJ5RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjsK
KyAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7CisgICAgICAgICAgICB0aGlzLnJpZ2h0ID0g
cmlnaHQ7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgIH0sCisKKyAgICAgICAgZmluaXNoQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9u
IChib2R5KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQmxvY2tTdGF0ZW1lbnQ7
CisgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAgICAgICAgICAgdGhpcy5maW5pc2go
KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlz
aEJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHRoaXMudHlw
ZSA9IFN5bnRheC5CcmVha1N0YXRlbWVudDsKKyAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJl
bDsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgfSwKKworICAgICAgICBmaW5pc2hDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNh
bGxlZSwgYXJncykgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNhbGxFeHByZXNz
aW9uOworICAgICAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7CisgICAgICAgICAgICB0aGlz
LmFyZ3VtZW50cyA9IGFyZ3M7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAgICAgICAgZmluaXNoQ2F0Y2hDbGF1c2U6
IGZ1bmN0aW9uIChwYXJhbSwgYm9keSkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4
LkNhdGNoQ2xhdXNlOworICAgICAgICAgICAgdGhpcy5wYXJhbSA9IHBhcmFtOworICAgICAgICAg
ICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5pc2hDbGFzc0JvZHk6
IGZ1bmN0aW9uIChib2R5KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQ2xhc3NC
b2R5OworICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICAgICAgICAgIHRoaXMuZmlu
aXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBm
aW5pc2hDbGFzc0RlY2xhcmF0aW9uOiBmdW5jdGlvbiAoaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsK
KyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5DbGFzc0RlY2xhcmF0aW9uOworICAgICAg
ICAgICAgdGhpcy5pZCA9IGlkOworICAgICAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3VwZXJD
bGFzczsKKyAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CisgICAgICAgICAgICB0aGlzLmZp
bmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAgICAgICAg
ZmluaXNoQ2xhc3NFeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsK
KyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5DbGFzc0V4cHJlc3Npb247CisgICAgICAg
ICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgICAgICB0aGlzLnN1cGVyQ2xhc3MgPSBzdXBlckNs
YXNzOworICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICAgICAgICAgIHRoaXMuZmlu
aXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBm
aW5pc2hDb25kaXRpb25hbEV4cHJlc3Npb246IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBh
bHRlcm5hdGUpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Db25kaXRpb25hbEV4
cHJlc3Npb247CisgICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OworICAgICAgICAgICAgdGhp
cy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDsKKyAgICAgICAgICAgIHRoaXMuYWx0ZXJuYXRlID0g
YWx0ZXJuYXRlOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaENvbnRpbnVlU3RhdGVtZW50OiBm
dW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Db250aW51
ZVN0YXRlbWVudDsKKyAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKKyAgICAgICAgICAg
IHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKwor
ICAgICAgICBmaW5pc2hEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgdGhpcy50eXBlID0gU3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50OworICAgICAgICAgICAgdGhp
cy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAg
ICAgIGZpbmlzaERvV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5LCB0ZXN0KSB7CisgICAg
ICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRG9XaGlsZVN0YXRlbWVudDsKKyAgICAgICAgICAg
IHRoaXMuYm9keSA9IGJvZHk7CisgICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OworICAgICAg
ICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9
LAorCisgICAgICAgIGZpbmlzaEVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICB0aGlzLnR5cGUgPSBTeW50YXguRW1wdHlTdGF0ZW1lbnQ7CisgICAgICAgICAgICB0aGlz
LmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAgICAg
ICAgZmluaXNoRXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rpb24gKGV4cHJlc3Npb24pIHsKKyAg
ICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50OworICAgICAg
ICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHRoaXMuZmlu
aXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBm
aW5pc2hGb3JTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHsK
KyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Gb3JTdGF0ZW1lbnQ7CisgICAgICAgICAg
ICB0aGlzLmluaXQgPSBpbml0OworICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKKyAgICAg
ICAgICAgIHRoaXMudXBkYXRlID0gdXBkYXRlOworICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9k
eTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgfSwKKworICAgICAgICBmaW5pc2hGb3JPZlN0YXRlbWVudDogZnVuY3Rpb24gKGxl
ZnQsIHJpZ2h0LCBib2R5KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRm9yT2ZT
dGF0ZW1lbnQ7CisgICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OworICAgICAgICAgICAgdGhp
cy5yaWdodCA9IHJpZ2h0OworICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICAgICAg
ICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwK
KworICAgICAgICBmaW5pc2hGb3JJblN0YXRlbWVudDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBi
b2R5KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRm9ySW5TdGF0ZW1lbnQ7Cisg
ICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OworICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJp
Z2h0OworICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICAgICAgICAgIHRoaXMuZWFj
aCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGZpbmlzaEZ1bmN0aW9uRGVjbGFyYXRpb246
IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSwgZ2VuZXJhdG9yKSB7CisgICAg
ICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAg
ICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOworICAg
ICAgICAgICAgdGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzOworICAgICAgICAgICAgdGhpcy5ib2R5
ID0gYm9keTsKKyAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgICAg
ICAgICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgp
OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAgICAgICAgZmluaXNo
RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHks
IGdlbmVyYXRvcikgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkZ1bmN0aW9uRXhw
cmVzc2lvbjsKKyAgICAgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgICAgIHRoaXMucGFy
YW1zID0gcGFyYW1zOworICAgICAgICAgICAgdGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzOworICAg
ICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0g
Z2VuZXJhdG9yOworICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7CisgICAgICAg
ICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0s
CisKKyAgICAgICAgZmluaXNoSWRlbnRpZmllcjogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAg
ICAgIHRoaXMudHlwZSA9IFN5bnRheC5JZGVudGlmaWVyOworICAgICAgICAgICAgdGhpcy5uYW1l
ID0gbmFtZTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5pc2hJZlN0YXRlbWVudDogZnVuY3Rpb24g
KHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkgeworICAgICAgICAgICAgdGhpcy50eXBlID0g
U3ludGF4LklmU3RhdGVtZW50OworICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKKyAgICAg
ICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7CisgICAgICAgICAgICB0aGlzLmFs
dGVybmF0ZSA9IGFsdGVybmF0ZTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5pc2hMYWJlbGVkU3Rh
dGVtZW50OiBmdW5jdGlvbiAobGFiZWwsIGJvZHkpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9
IFN5bnRheC5MYWJlbGVkU3RhdGVtZW50OworICAgICAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVs
OworICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNo
KCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5p
c2hMaXRlcmFsOiBmdW5jdGlvbiAodG9rZW4pIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5
bnRheC5MaXRlcmFsOworICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRva2VuLnZhbHVlOworICAg
ICAgICAgICAgdGhpcy5yYXcgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7
CiAgICAgICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHsKLSAgICAgICAgICAgICAgICBvYmplY3Qu
cmVnZXggPSB0b2tlbi5yZWdleDsKKyAgICAgICAgICAgICAgICB0aGlzLnJlZ2V4ID0gdG9rZW4u
cmVnZXg7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAg
ICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9
LAogCi0gICAgICAgIGNyZWF0ZU1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uIChhY2Nlc3Nvciwg
b2JqZWN0LCBwcm9wZXJ0eSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguTWVtYmVyRXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBjb21wdXRl
ZDogYWNjZXNzb3IgPT09ICdbJywKLSAgICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdCwKLSAg
ICAgICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHkKLSAgICAgICAgICAgIH07CisgICAgICAg
IGZpbmlzaE1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uIChhY2Nlc3Nvciwgb2JqZWN0LCBwcm9w
ZXJ0eSkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4Lk1lbWJlckV4cHJlc3Npb247
CisgICAgICAgICAgICB0aGlzLmNvbXB1dGVkID0gYWNjZXNzb3IgPT09ICdbJzsKKyAgICAgICAg
ICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0OworICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHBy
b3BlcnR5OworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZU5ld0V4cHJlc3Npb246IGZ1bmN0aW9u
IChjYWxsZWUsIGFyZ3MpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4Lk5ld0V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgY2FsbGVlOiBjYWxs
ZWUsCi0gICAgICAgICAgICAgICAgJ2FyZ3VtZW50cyc6IGFyZ3MKLSAgICAgICAgICAgIH07Cisg
ICAgICAgIGZpbmlzaE1ldGFQcm9wZXJ0eTogZnVuY3Rpb24gKG1ldGEsIHByb3BlcnR5KSB7Cisg
ICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguTWV0YVByb3BlcnR5OworICAgICAgICAgICAg
dGhpcy5tZXRhID0gbWV0YTsKKyAgICAgICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsK
KyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAg
ICAgICAgfSwKIAotICAgICAgICBjcmVhdGVPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbiAocHJv
cGVydGllcykgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguT2JqZWN0RXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBwcm9w
ZXJ0aWVzCi0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hOZXdFeHByZXNzaW9uOiBmdW5j
dGlvbiAoY2FsbGVlLCBhcmdzKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguTmV3
RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHRoaXMuY2FsbGVlID0gY2FsbGVlOworICAgICAgICAg
ICAgdGhpcy5hcmd1bWVudHMgPSBhcmdzOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZVBvc3Rm
aXhFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7Ci0gICAgICAgICAg
ICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VcGRhdGVFeHByZXNzaW9u
LAotICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKLSAgICAgICAgICAgICAgICBh
cmd1bWVudDogYXJndW1lbnQsCi0gICAgICAgICAgICAgICAgcHJlZml4OiBmYWxzZQotICAgICAg
ICAgICAgfTsKKyAgICAgICAgZmluaXNoT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24gKHByb3Bl
cnRpZXMpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5PYmplY3RFeHByZXNzaW9u
OworICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKKyAgICAgICAgICAg
IHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAot
ICAgICAgICBjcmVhdGVQcm9ncmFtOiBmdW5jdGlvbiAoYm9keSkgewotICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUHJvZ3JhbSwKLSAgICAgICAgICAg
ICAgICBib2R5OiBib2R5Ci0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hPYmplY3RQYXR0
ZXJuOiBmdW5jdGlvbiAocHJvcGVydGllcykgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3lu
dGF4Lk9iamVjdFBhdHRlcm47CisgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0
aWVzOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5OiBmdW5jdGlvbiAoa2luZCwg
a2V5LCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQsIGNvbXB1dGVkKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Qcm9wZXJ0eSwKLSAgICAgICAg
ICAgICAgICBrZXk6IGtleSwKLSAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCi0gICAgICAg
ICAgICAgICAga2luZDoga2luZCwKLSAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCwKLSAg
ICAgICAgICAgICAgICBzaG9ydGhhbmQ6IHNob3J0aGFuZCwKLSAgICAgICAgICAgICAgICBjb21w
dXRlZDogY29tcHV0ZWQKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaFBvc3RmaXhFeHBy
ZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7CisgICAgICAgICAgICB0aGlz
LnR5cGUgPSBTeW50YXguVXBkYXRlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHRoaXMub3BlcmF0
b3IgPSBvcGVyYXRvcjsKKyAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKyAg
ICAgICAgICAgIHRoaXMucHJlZml4ID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgp
OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRl
UmV0dXJuU3RhdGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKLSAgICAgICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJldHVyblN0YXRlbWVudCwKLSAgICAg
ICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQKLSAgICAgICAgICAgIH07CisgICAgICAgIGZp
bmlzaFByb2dyYW06IGZ1bmN0aW9uIChib2R5LCBzb3VyY2VUeXBlKSB7CisgICAgICAgICAgICB0
aGlzLnR5cGUgPSBTeW50YXguUHJvZ3JhbTsKKyAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7
CisgICAgICAgICAgICB0aGlzLnNvdXJjZVR5cGUgPSBzb3VyY2VUeXBlOworICAgICAgICAgICAg
dGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0g
ICAgICAgIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHJlc3Npb25zKSB7
Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5TZXF1
ZW5jZUV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25z
Ci0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hQcm9wZXJ0eTogZnVuY3Rpb24gKGtpbmQs
IGtleSwgY29tcHV0ZWQsIHZhbHVlLCBtZXRob2QsIHNob3J0aGFuZCkgeworICAgICAgICAgICAg
dGhpcy50eXBlID0gU3ludGF4LlByb3BlcnR5OworICAgICAgICAgICAgdGhpcy5rZXkgPSBrZXk7
CisgICAgICAgICAgICB0aGlzLmNvbXB1dGVkID0gY29tcHV0ZWQ7CisgICAgICAgICAgICB0aGlz
LnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLmtpbmQgPSBraW5kOworICAgICAgICAg
ICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7CisgICAgICAgICAgICB0aGlzLnNob3J0aGFuZCA9IHNo
b3J0aGFuZDsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKICAgICAgICAgfSwKIAotICAgICAgICBjcmVhdGVTd2l0Y2hDYXNlOiBmdW5jdGlvbiAo
dGVzdCwgY29uc2VxdWVudCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguU3dpdGNoQ2FzZSwKLSAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAot
ICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnQKLSAgICAgICAgICAgIH07Cisg
ICAgICAgIGZpbmlzaFJlc3RFbGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKKyAgICAgICAg
ICAgIHRoaXMudHlwZSA9IFN5bnRheC5SZXN0RWxlbWVudDsKKyAgICAgICAgICAgIHRoaXMuYXJn
dW1lbnQgPSBhcmd1bWVudDsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAotICAgICAgICBjcmVhdGVTd2l0Y2hTdGF0ZW1l
bnQ6IGZ1bmN0aW9uIChkaXNjcmltaW5hbnQsIGNhc2VzKSB7Ci0gICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQsCi0gICAgICAg
ICAgICAgICAgZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnQsCi0gICAgICAgICAgICAgICAgY2Fz
ZXM6IGNhc2VzCi0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hSZXR1cm5TdGF0ZW1lbnQ6
IGZ1bmN0aW9uIChhcmd1bWVudCkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlJl
dHVyblN0YXRlbWVudDsKKyAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKyAg
ICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAg
ICAgfSwKIAotICAgICAgICBjcmVhdGVUaGlzRXhwcmVzc2lvbjogZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVGhpc0V4cHJl
c3Npb24KLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaFNlcXVlbmNlRXhwcmVzc2lvbjog
ZnVuY3Rpb24gKGV4cHJlc3Npb25zKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXgu
U2VxdWVuY2VFeHByZXNzaW9uOworICAgICAgICAgICAgdGhpcy5leHByZXNzaW9ucyA9IGV4cHJl
c3Npb25zOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZVRocm93U3RhdGVtZW50OiBmdW5jdGlv
biAoYXJndW1lbnQpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LlRocm93U3RhdGVtZW50LAotICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1
bWVudAotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoU3ByZWFkRWxlbWVudDogZnVuY3Rp
b24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguU3ByZWFkRWxl
bWVudDsKKyAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKyAgICAgICAgICAg
IHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAot
ICAgICAgICBjcmVhdGVUcnlTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChibG9jaywgZ3VhcmRlZEhhbmRs
ZXJzLCBoYW5kbGVycywgZmluYWxpemVyKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5UcnlTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgYmxv
Y2s6IGJsb2NrLAotICAgICAgICAgICAgICAgIGd1YXJkZWRIYW5kbGVyczogZ3VhcmRlZEhhbmRs
ZXJzLAotICAgICAgICAgICAgICAgIGhhbmRsZXJzOiBoYW5kbGVycywKLSAgICAgICAgICAgICAg
ICBmaW5hbGl6ZXI6IGZpbmFsaXplcgotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoU3dp
dGNoQ2FzZTogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQpIHsKKyAgICAgICAgICAgIHRoaXMu
dHlwZSA9IFN5bnRheC5Td2l0Y2hDYXNlOworICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsK
KyAgICAgICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7CisgICAgICAgICAgICB0
aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAg
ICAgICAgY3JlYXRlVW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50
KSB7Ci0gICAgICAgICAgICBpZiAob3BlcmF0b3IgPT09ICcrKycgfHwgb3BlcmF0b3IgPT09ICct
LScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguVXBkYXRlRXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6
IG9wZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsCi0gICAg
ICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5VbmFyeUV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAot
ICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCwKLSAgICAgICAgICAgICAgICBwcmVm
aXg6IHRydWUKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaFN1cGVyOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguU3VwZXI7CisgICAgICAgICAgICB0
aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAg
ICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRlY2xhcmF0aW9ucywg
a2luZCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguVmFyaWFibGVEZWNsYXJhdGlvbiwKLSAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IGRl
Y2xhcmF0aW9ucywKLSAgICAgICAgICAgICAgICBraW5kOiBraW5kCi0gICAgICAgICAgICB9Owor
ICAgICAgICBmaW5pc2hTd2l0Y2hTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChkaXNjcmltaW5hbnQsIGNh
c2VzKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguU3dpdGNoU3RhdGVtZW50Owor
ICAgICAgICAgICAgdGhpcy5kaXNjcmltaW5hbnQgPSBkaXNjcmltaW5hbnQ7CisgICAgICAgICAg
ICB0aGlzLmNhc2VzID0gY2FzZXM7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRlVmFyaWFibGVE
ZWNsYXJhdG9yOiBmdW5jdGlvbiAoaWQsIGluaXQpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvciwKLSAgICAgICAg
ICAgICAgICBpZDogaWQsCi0gICAgICAgICAgICAgICAgaW5pdDogaW5pdAotICAgICAgICAgICAg
fTsKKyAgICAgICAgZmluaXNoVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBmdW5jdGlvbiAodGFn
LCBxdWFzaSkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRhZ2dlZFRlbXBsYXRl
RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHRoaXMudGFnID0gdGFnOworICAgICAgICAgICAgdGhp
cy5xdWFzaSA9IHF1YXNpOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZVdoaWxlU3RhdGVtZW50
OiBmdW5jdGlvbiAodGVzdCwgYm9keSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguV2hpbGVTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgdGVz
dDogdGVzdCwKLSAgICAgICAgICAgICAgICBib2R5OiBib2R5Ci0gICAgICAgICAgICB9OworICAg
ICAgICBmaW5pc2hUZW1wbGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uICh2YWx1ZSwgdGFpbCkgeworICAg
ICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRlbXBsYXRlRWxlbWVudDsKKyAgICAgICAgICAg
IHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMudGFpbCA9IHRhaWw7CisgICAg
ICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAg
IH0sCiAKLSAgICAgICAgY3JlYXRlV2l0aFN0YXRlbWVudDogZnVuY3Rpb24gKG9iamVjdCwgYm9k
eSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
V2l0aFN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdCwKLSAgICAgICAg
ICAgICAgICBib2R5OiBib2R5Ci0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hUZW1wbGF0
ZUxpdGVyYWw6IGZ1bmN0aW9uIChxdWFzaXMsIGV4cHJlc3Npb25zKSB7CisgICAgICAgICAgICB0
aGlzLnR5cGUgPSBTeW50YXguVGVtcGxhdGVMaXRlcmFsOworICAgICAgICAgICAgdGhpcy5xdWFz
aXMgPSBxdWFzaXM7CisgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7
CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgIH0sCiAKLSAgICAgICAgY3JlYXRlVGVtcGxhdGVFbGVtZW50OiBmdW5jdGlvbiAodmFs
dWUsIHRhaWwpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LlRlbXBsYXRlRWxlbWVudCwKLSAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCi0g
ICAgICAgICAgICAgICAgdGFpbDogdGFpbAotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNo
VGhpc0V4cHJlc3Npb246IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5
bnRheC5UaGlzRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAotICAgICAgICBjcmVhdGVUZW1wbGF0ZUxp
dGVyYWw6IGZ1bmN0aW9uIChxdWFzaXMsIGV4cHJlc3Npb25zKSB7Ci0gICAgICAgICAgICByZXR1
cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UZW1wbGF0ZUxpdGVyYWwsCi0gICAg
ICAgICAgICAgICAgcXVhc2lzOiBxdWFzaXMsCi0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6
IGV4cHJlc3Npb25zCi0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hUaHJvd1N0YXRlbWVu
dDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXgu
VGhyb3dTdGF0ZW1lbnQ7CisgICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7Cisg
ICAgICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
ICAgIH0sCiAKLSAgICAgICAgY3JlYXRlU3ByZWFkRWxlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50
KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5T
cHJlYWRFbGVtZW50LAotICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudAotICAgICAg
ICAgICAgfTsKKyAgICAgICAgZmluaXNoVHJ5U3RhdGVtZW50OiBmdW5jdGlvbiAoYmxvY2ssIGhh
bmRsZXIsIGZpbmFsaXplcikgeworICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRyeVN0
YXRlbWVudDsKKyAgICAgICAgICAgIHRoaXMuYmxvY2sgPSBibG9jazsKKyAgICAgICAgICAgIHRo
aXMuZ3VhcmRlZEhhbmRsZXJzID0gW107CisgICAgICAgICAgICB0aGlzLmhhbmRsZXJzID0gaGFu
ZGxlciA/IFtoYW5kbGVyXSA6IFtdOworICAgICAgICAgICAgdGhpcy5oYW5kbGVyID0gaGFuZGxl
cjsKKyAgICAgICAgICAgIHRoaXMuZmluYWxpemVyID0gZmluYWxpemVyOworICAgICAgICAgICAg
dGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0g
ICAgICAgIGNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogZnVuY3Rpb24gKHRhZywgcXVh
c2kpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
LlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICB0YWc6IHRhZywKLSAg
ICAgICAgICAgICAgICBxdWFzaTogcXVhc2kKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlz
aFVuYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBhcmd1bWVudCkgeworICAgICAg
ICAgICAgdGhpcy50eXBlID0gKG9wZXJhdG9yID09PSAnKysnIHx8IG9wZXJhdG9yID09PSAnLS0n
KSA/IFN5bnRheC5VcGRhdGVFeHByZXNzaW9uIDogU3ludGF4LlVuYXJ5RXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjsKKyAgICAgICAgICAgIHRoaXMuYXJn
dW1lbnQgPSBhcmd1bWVudDsKKyAgICAgICAgICAgIHRoaXMucHJlZml4ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAg
fSwKIAotICAgICAgICBjcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKHBh
cmFtcywgZGVmYXVsdHMsIGJvZHksIHJlc3QsIGV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNz
aW9uLAotICAgICAgICAgICAgICAgIGlkOiBudWxsLAotICAgICAgICAgICAgICAgIHBhcmFtczog
cGFyYW1zLAotICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0cywKLSAgICAgICAgICAg
ICAgICBib2R5OiBib2R5LAotICAgICAgICAgICAgICAgIHJlc3Q6IHJlc3QsCi0gICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yOiBmYWxzZSwKLSAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHBy
ZXNzaW9uCi0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hWYXJpYWJsZURlY2xhcmF0aW9u
OiBmdW5jdGlvbiAoZGVjbGFyYXRpb25zKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50
YXguVmFyaWFibGVEZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIHRoaXMuZGVjbGFyYXRpb25zID0g
ZGVjbGFyYXRpb25zOworICAgICAgICAgICAgdGhpcy5raW5kID0gJ3Zhcic7CisgICAgICAgICAg
ICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAK
LSAgICAgICAgY3JlYXRlTWV0aG9kRGVmaW5pdGlvbjogZnVuY3Rpb24gKHByb3BlcnR5VHlwZSwg
a2luZCwga2V5LCB2YWx1ZSwgY29tcHV0ZWQpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4Lk1ldGhvZERlZmluaXRpb24sCi0gICAgICAgICAgICAg
ICAga2V5OiBrZXksCi0gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAotICAgICAgICAgICAg
ICAgIGtpbmQ6IGtpbmQsCi0gICAgICAgICAgICAgICAgJ3N0YXRpYyc6IHByb3BlcnR5VHlwZSA9
PT0gQ2xhc3NQcm9wZXJ0eVR5cGUuc3RhdGljLAotICAgICAgICAgICAgICAgIGNvbXB1dGVkOiBj
b21wdXRlZAotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNoTGV4aWNhbERlY2xhcmF0aW9u
OiBmdW5jdGlvbiAoZGVjbGFyYXRpb25zLCBraW5kKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUg
PSBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIHRoaXMuZGVjbGFyYXRp
b25zID0gZGVjbGFyYXRpb25zOworICAgICAgICAgICAgdGhpcy5raW5kID0ga2luZDsKKyAgICAg
ICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAg
fSwKIAotICAgICAgICBjcmVhdGVDbGFzc0JvZHk6IGZ1bmN0aW9uIChib2R5KSB7Ci0gICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5DbGFzc0JvZHksCi0g
ICAgICAgICAgICAgICAgYm9keTogYm9keQotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNo
VmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbiAoaWQsIGluaXQpIHsKKyAgICAgICAgICAgIHRo
aXMudHlwZSA9IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3I7CisgICAgICAgICAgICB0aGlzLmlk
ID0gaWQ7CisgICAgICAgICAgICB0aGlzLmluaXQgPSBpbml0OworICAgICAgICAgICAgdGhpcy5m
aW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0gICAgICAg
IGNyZWF0ZUNsYXNzRXhwcmVzc2lvbjogZnVuY3Rpb24gKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7
Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5DbGFz
c0V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgaWQ6IGlkLAotICAgICAgICAgICAgICAgIHN1
cGVyQ2xhc3M6IHN1cGVyQ2xhc3MsCi0gICAgICAgICAgICAgICAgYm9keTogYm9keQotICAgICAg
ICAgICAgfTsKKyAgICAgICAgZmluaXNoV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBi
b2R5KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguV2hpbGVTdGF0ZW1lbnQ7Cisg
ICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OworICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9k
eTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
ICAgICAgICAgfSwKIAotICAgICAgICBjcmVhdGVDbGFzc0RlY2xhcmF0aW9uOiBmdW5jdGlvbiAo
aWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LkNsYXNzRGVjbGFyYXRpb24sCi0gICAgICAgICAgICAgICAgaWQ6
IGlkLAotICAgICAgICAgICAgICAgIHN1cGVyQ2xhc3M6IHN1cGVyQ2xhc3MsCi0gICAgICAgICAg
ICAgICAgYm9keTogYm9keQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBj
cmVhdGVNb2R1bGVTcGVjaWZpZXI6IGZ1bmN0aW9uICh0b2tlbikgewotICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTW9kdWxlU3BlY2lmaWVyLAotICAg
ICAgICAgICAgICAgIHZhbHVlOiB0b2tlbi52YWx1ZSwKLSAgICAgICAgICAgICAgICByYXc6IHNv
dXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV0pCi0gICAgICAgICAgICB9
OworICAgICAgICBmaW5pc2hXaXRoU3RhdGVtZW50OiBmdW5jdGlvbiAob2JqZWN0LCBib2R5KSB7
CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguV2l0aFN0YXRlbWVudDsKKyAgICAgICAg
ICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0OworICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsK
KyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAg
ICAgICAgfSwKIAotICAgICAgICBjcmVhdGVFeHBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uIChpZCwg
bmFtZSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguRXhwb3J0U3BlY2lmaWVyLAotICAgICAgICAgICAgICAgIGlkOiBpZCwKLSAgICAgICAgICAg
ICAgICBuYW1lOiBuYW1lCi0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hFeHBvcnRTcGVj
aWZpZXI6IGZ1bmN0aW9uIChsb2NhbCwgZXhwb3J0ZWQpIHsKKyAgICAgICAgICAgIHRoaXMudHlw
ZSA9IFN5bnRheC5FeHBvcnRTcGVjaWZpZXI7CisgICAgICAgICAgICB0aGlzLmV4cG9ydGVkID0g
ZXhwb3J0ZWQgfHwgbG9jYWw7CisgICAgICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7CisgICAg
ICAgICAgICB0aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAg
IH0sCiAKLSAgICAgICAgY3JlYXRlRXhwb3J0QmF0Y2hTcGVjaWZpZXI6IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkV4cG9y
dEJhdGNoU3BlY2lmaWVyCi0gICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hJbXBvcnREZWZh
dWx0U3BlY2lmaWVyOiBmdW5jdGlvbiAobG9jYWwpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9
IFN5bnRheC5JbXBvcnREZWZhdWx0U3BlY2lmaWVyOworICAgICAgICAgICAgdGhpcy5sb2NhbCA9
IGxvY2FsOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZUltcG9ydERlZmF1bHRTcGVjaWZpZXI6
IGZ1bmN0aW9uIChpZCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguSW1wb3J0RGVmYXVsdFNwZWNpZmllciwKLSAgICAgICAgICAgICAgICBpZDog
aWQKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaEltcG9ydE5hbWVzcGFjZVNwZWNpZmll
cjogZnVuY3Rpb24gKGxvY2FsKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguSW1w
b3J0TmFtZXNwYWNlU3BlY2lmaWVyOworICAgICAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsOwor
ICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgICB9LAogCi0gICAgICAgIGNyZWF0ZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogZnVuY3Rp
b24gKGlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIsCi0gICAgICAgICAgICAgICAgaWQ6IGlkCi0g
ICAgICAgICAgICB9OworICAgICAgICBmaW5pc2hFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBmdW5j
dGlvbiAoZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNyYykgeworICAgICAgICAgICAgdGhpcy50
eXBlID0gU3ludGF4LkV4cG9ydE5hbWVkRGVjbGFyYXRpb247CisgICAgICAgICAgICB0aGlzLmRl
Y2xhcmF0aW9uID0gZGVjbGFyYXRpb247CisgICAgICAgICAgICB0aGlzLnNwZWNpZmllcnMgPSBz
cGVjaWZpZXJzOworICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzcmM7CisgICAgICAgICAgICB0
aGlzLmZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0sCiAKLSAg
ICAgICAgY3JlYXRlRXhwb3J0RGVjbGFyYXRpb246IGZ1bmN0aW9uIChpc0RlZmF1bHQsIGRlY2xh
cmF0aW9uLCBzcGVjaWZpZXJzLCBzcmMpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LkV4cG9ydERlY2xhcmF0aW9uLAotICAgICAgICAgICAgICAg
ICdkZWZhdWx0JzogISFpc0RlZmF1bHQsCi0gICAgICAgICAgICAgICAgZGVjbGFyYXRpb246IGRl
Y2xhcmF0aW9uLAotICAgICAgICAgICAgICAgIHNwZWNpZmllcnM6IHNwZWNpZmllcnMsCi0gICAg
ICAgICAgICAgICAgc291cmNlOiBzcmMKLSAgICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaEV4
cG9ydERlZmF1bHREZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRlY2xhcmF0aW9uKSB7CisgICAgICAg
ICAgICB0aGlzLnR5cGUgPSBTeW50YXguRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOworICAgICAg
ICAgICAgdGhpcy5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uOworICAgICAgICAgICAgdGhpcy5m
aW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9LAogCi0gICAgICAg
IGNyZWF0ZUltcG9ydFNwZWNpZmllcjogZnVuY3Rpb24gKGlkLCBuYW1lKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5JbXBvcnRTcGVjaWZpZXIs
Ci0gICAgICAgICAgICAgICAgaWQ6IGlkLAotICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUKLSAg
ICAgICAgICAgIH07CisgICAgICAgIGZpbmlzaEV4cG9ydEFsbERlY2xhcmF0aW9uOiBmdW5jdGlv
biAoc3JjKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRXhwb3J0QWxsRGVjbGFy
YXRpb247CisgICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNyYzsKKyAgICAgICAgICAgIHRoaXMu
ZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAotICAgICAg
ICBjcmVhdGVJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24gKHNwZWNpZmllcnMsIHNyYykgewot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguSW1wb3J0
RGVjbGFyYXRpb24sCi0gICAgICAgICAgICAgICAgc3BlY2lmaWVyczogc3BlY2lmaWVycywKLSAg
ICAgICAgICAgICAgICBzb3VyY2U6IHNyYwotICAgICAgICAgICAgfTsKKyAgICAgICAgZmluaXNo
SW1wb3J0U3BlY2lmaWVyOiBmdW5jdGlvbiAobG9jYWwsIGltcG9ydGVkKSB7CisgICAgICAgICAg
ICB0aGlzLnR5cGUgPSBTeW50YXguSW1wb3J0U3BlY2lmaWVyOworICAgICAgICAgICAgdGhpcy5s
b2NhbCA9IGxvY2FsIHx8IGltcG9ydGVkOworICAgICAgICAgICAgdGhpcy5pbXBvcnRlZCA9IGlt
cG9ydGVkOworICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgICB9LAogCi0gICAgICAgIGNyZWF0ZVlpZWxkRXhwcmVzc2lvbjogZnVuY3Rp
b24gKGFyZ3VtZW50LCBkbGcpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LllpZWxkRXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBhcmd1bWVu
dDogYXJndW1lbnQsCi0gICAgICAgICAgICAgICAgZGVsZWdhdGU6IGRsZwotICAgICAgICAgICAg
fTsKKyAgICAgICAgZmluaXNoSW1wb3J0RGVjbGFyYXRpb246IGZ1bmN0aW9uIChzcGVjaWZpZXJz
LCBzcmMpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5JbXBvcnREZWNsYXJhdGlv
bjsKKyAgICAgICAgICAgIHRoaXMuc3BlY2lmaWVycyA9IHNwZWNpZmllcnM7CisgICAgICAgICAg
ICB0aGlzLnNvdXJjZSA9IHNyYzsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfSwKIAotICAgICAgICBjcmVhdGVDb21wcmVoZW5z
aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKGZpbHRlciwgYmxvY2tzLCBib2R5KSB7Ci0gICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db21wcmVoZW5zaW9u
RXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlciwKLSAgICAgICAgICAg
ICAgICBibG9ja3M6IGJsb2NrcywKLSAgICAgICAgICAgICAgICBib2R5OiBib2R5Ci0gICAgICAg
ICAgICB9OworICAgICAgICBmaW5pc2hZaWVsZEV4cHJlc3Npb246IGZ1bmN0aW9uIChhcmd1bWVu
dCwgZGVsZWdhdGUpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5ZaWVsZEV4cHJl
c3Npb247CisgICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CisgICAgICAgICAg
ICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7CisgICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KLQogICAgIH07CiAKLSAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGxpbmUgdGVybWluYXRvciBiZWZvcmUgdGhlIG5leHQg
dG9rZW4uCi0KLSAgICBmdW5jdGlvbiBwZWVrTGluZVRlcm1pbmF0b3IoKSB7Ci0gICAgICAgIHZh
ciBwb3MsIGxpbmUsIHN0YXJ0LCBmb3VuZDsKIAotICAgICAgICBwb3MgPSBpbmRleDsKLSAgICAg
ICAgbGluZSA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIHN0YXJ0ID0gbGluZVN0YXJ0OwotICAgICAg
ICBza2lwQ29tbWVudCgpOwotICAgICAgICBmb3VuZCA9IGxpbmVOdW1iZXIgIT09IGxpbmU7Ci0g
ICAgICAgIGluZGV4ID0gcG9zOwotICAgICAgICBsaW5lTnVtYmVyID0gbGluZTsKLSAgICAgICAg
bGluZVN0YXJ0ID0gc3RhcnQ7Ci0KLSAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgIH0KKyAgICBm
dW5jdGlvbiByZWNvcmRFcnJvcihlcnJvcikgeworICAgICAgICB2YXIgZSwgZXhpc3Rpbmc7CiAK
LSAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24KLQotICAgIGZ1bmN0aW9uIHRocm93RXJyb3IodG9r
ZW4sIG1lc3NhZ2VGb3JtYXQpIHsKLSAgICAgICAgdmFyIGVycm9yLAotICAgICAgICAgICAgYXJn
cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksCi0gICAgICAgICAg
ICBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgLyUoXGQpL2cs
Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpZHgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXNzZXJ0KGlkeCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBi
ZSBpbiByYW5nZScpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpZHhdOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICk7Ci0KLSAgICAgICAgaWYgKHR5cGVvZiB0b2tl
bi5saW5lTnVtYmVyID09PSAnbnVtYmVyJykgewotICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJy
b3IoJ0xpbmUgJyArIHRva2VuLmxpbmVOdW1iZXIgKyAnOiAnICsgbXNnKTsKLSAgICAgICAgICAg
IGVycm9yLmluZGV4ID0gdG9rZW4ucmFuZ2VbMF07Ci0gICAgICAgICAgICBlcnJvci5saW5lTnVt
YmVyID0gdG9rZW4ubGluZU51bWJlcjsKLSAgICAgICAgICAgIGVycm9yLmNvbHVtbiA9IHRva2Vu
LnJhbmdlWzBdIC0gbGluZVN0YXJ0ICsgMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGVycm9yID0gbmV3IEVycm9yKCdMaW5lICcgKyBsaW5lTnVtYmVyICsgJzogJyArIG1zZyk7Ci0g
ICAgICAgICAgICBlcnJvci5pbmRleCA9IGluZGV4OwotICAgICAgICAgICAgZXJyb3IubGluZU51
bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgICAgICAgICBlcnJvci5jb2x1bW4gPSBpbmRleCAtIGxp
bmVTdGFydCArIDE7CisgICAgICAgIGZvciAoZSA9IDA7IGUgPCBleHRyYS5lcnJvcnMubGVuZ3Ro
OyBlKyspIHsKKyAgICAgICAgICAgIGV4aXN0aW5nID0gZXh0cmEuZXJyb3JzW2VdOworICAgICAg
ICAgICAgLy8gUHJldmVudCBkdXBsaWNhdGVkIGVycm9yLgorICAgICAgICAgICAgLyogaXN0YW5i
dWwgaWdub3JlIG5leHQgKi8KKyAgICAgICAgICAgIGlmIChleGlzdGluZy5pbmRleCA9PT0gZXJy
b3IuaW5kZXggJiYgZXhpc3RpbmcubWVzc2FnZSA9PT0gZXJyb3IubWVzc2FnZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGVy
cm9yLmRlc2NyaXB0aW9uID0gbXNnOwotICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgZXh0
cmEuZXJyb3JzLnB1c2goZXJyb3IpOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHRocm93RXJyb3JU
b2xlcmFudCgpIHsKKyAgICBmdW5jdGlvbiBjb25zdHJ1Y3RFcnJvcihtc2csIGNvbHVtbikgewor
ICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobXNnKTsKICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgIHRocm93RXJyb3IuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKLSAgICAgICAgfSBjYXRj
aCAoZSkgewotICAgICAgICAgICAgaWYgKGV4dHJhLmVycm9ycykgewotICAgICAgICAgICAgICAg
IGV4dHJhLmVycm9ycy5wdXNoKGUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICB0aHJvdyBlOworICAgICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgICAgIH0gY2F0Y2gg
KGJhc2UpIHsKKyAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovCisgICAgICAg
ICAgICBpZiAoT2JqZWN0LmNyZWF0ZSAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKKyAgICAg
ICAgICAgICAgICBlcnJvciA9IE9iamVjdC5jcmVhdGUoYmFzZSk7CisgICAgICAgICAgICAgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnY29sdW1uJywgeyB2YWx1ZTogY29sdW1uIH0p
OwogICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yOwogICAgICAgICB9CiAgICAgfQogCisgICAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobGlu
ZSwgcG9zLCBkZXNjcmlwdGlvbikgeworICAgICAgICB2YXIgbXNnLCBjb2x1bW4sIGVycm9yOwog
Ci0gICAgLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLgorICAgICAg
ICBtc2cgPSAnTGluZSAnICsgbGluZSArICc6ICcgKyBkZXNjcmlwdGlvbjsKKyAgICAgICAgY29s
dW1uID0gcG9zIC0gKHNjYW5uaW5nID8gbGluZVN0YXJ0IDogbGFzdExpbmVTdGFydCkgKyAxOwor
ICAgICAgICBlcnJvciA9IGNvbnN0cnVjdEVycm9yKG1zZywgY29sdW1uKTsKKyAgICAgICAgZXJy
b3IubGluZU51bWJlciA9IGxpbmU7CisgICAgICAgIGVycm9yLmRlc2NyaXB0aW9uID0gZGVzY3Jp
cHRpb247CisgICAgICAgIGVycm9yLmluZGV4ID0gcG9zOworICAgICAgICByZXR1cm4gZXJyb3I7
CisgICAgfQogCi0gICAgZnVuY3Rpb24gdGhyb3dVbmV4cGVjdGVkKHRva2VuKSB7Ci0gICAgICAg
IGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3Io
dG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MpOwotICAgICAgICB9CisgICAgLy8gVGhyb3cg
YW4gZXhjZXB0aW9uCiAKLSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVyaWNM
aXRlcmFsKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVj
dGVkTnVtYmVyKTsKLSAgICAgICAgfQorICAgIGZ1bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZUZv
cm1hdCkgeworICAgICAgICB2YXIgYXJncywgbXNnOwogCi0gICAgICAgIGlmICh0b2tlbi50eXBl
ID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHRva2Vu
LCBNZXNzYWdlcy5VbmV4cGVjdGVkU3RyaW5nKTsKLSAgICAgICAgfQorICAgICAgICBhcmdzID0g
QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKyAgICAgICAgbXNnID0g
bWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxkKS9nLAorICAgICAgICAgICAgZnVuY3Rpb24gKHdo
b2xlLCBpZHgpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaWR4IDwgYXJncy5sZW5ndGgsICdN
ZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGFyZ3NbaWR4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotICAgICAgICBpZiAo
dG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgdGhyb3dFcnJv
cih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZElkZW50aWZpZXIpOworICAgICAgICB0aHJvdyBj
cmVhdGVFcnJvcihsYXN0TGluZU51bWJlciwgbGFzdEluZGV4LCBtc2cpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHRvbGVyYXRlRXJyb3IobWVzc2FnZUZvcm1hdCkgeworICAgICAgICB2YXIgYXJn
cywgbXNnLCBlcnJvcjsKKworICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKTsKKyAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAg
ICAgICAgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxkKS9nLAorICAgICAgICAgICAg
ZnVuY3Rpb24gKHdob2xlLCBpZHgpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaWR4IDwgYXJn
cy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFyZ3NbaWR4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKwor
ICAgICAgICBlcnJvciA9IGNyZWF0ZUVycm9yKGxpbmVOdW1iZXIsIGxhc3RJbmRleCwgbXNnKTsK
KyAgICAgICAgaWYgKGV4dHJhLmVycm9ycykgeworICAgICAgICAgICAgcmVjb3JkRXJyb3IoZXJy
b3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAg
IH0KKyAgICB9CiAKLSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHsK
LSAgICAgICAgICAgIGlmIChpc0Z1dHVyZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkUmVzZXJ2
ZWQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2
ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFu
dCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLgor
CisgICAgZnVuY3Rpb24gdW5leHBlY3RlZFRva2VuRXJyb3IodG9rZW4sIG1lc3NhZ2UpIHsKKyAg
ICAgICAgdmFyIHZhbHVlLCBtc2cgPSBtZXNzYWdlIHx8IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tl
bjsKKworICAgICAgICBpZiAodG9rZW4pIHsKKyAgICAgICAgICAgIGlmICghbWVzc2FnZSkgewor
ICAgICAgICAgICAgICAgIG1zZyA9ICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YpID8gTWVzc2Fn
ZXMuVW5leHBlY3RlZEVPUyA6CisgICAgICAgICAgICAgICAgICAgICh0b2tlbi50eXBlID09PSBU
b2tlbi5JZGVudGlmaWVyKSA/IE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyIDoKKyAgICAg
ICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSA/IE1l
c3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIgOgorICAgICAgICAgICAgICAgICAgICAodG9rZW4udHlw
ZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgPyBNZXNzYWdlcy5VbmV4cGVjdGVkU3RyaW5nIDoK
KyAgICAgICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSA/IE1l
c3NhZ2VzLlVuZXhwZWN0ZWRUZW1wbGF0ZSA6CisgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2Vz
LlVuZXhwZWN0ZWRUb2tlbjsKKworICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBU
b2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1dHVyZVJlc2VydmVk
V29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRSZXNlcnZlZDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChz
dHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbXNnID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tl
bi52YWx1ZSk7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4u
VGVtcGxhdGUpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhw
ZWN0ZWRUZW1wbGF0ZSwgdG9rZW4udmFsdWUucmF3KTsKKyAgICAgICAgICAgIHZhbHVlID0gKHRv
a2VuLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSA/IHRva2VuLnZhbHVlLnJhdyA6IHRva2VuLnZh
bHVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWUgPSAnSUxMRUdBTCc7CiAg
ICAgICAgIH0KIAotICAgICAgICAvLyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9yIFB1
bmN0dWF0b3IuCi0gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRU
b2tlbiwgdG9rZW4udmFsdWUpOworICAgICAgICBtc2cgPSBtc2cucmVwbGFjZSgnJTAnLCB2YWx1
ZSk7CisKKyAgICAgICAgcmV0dXJuICh0b2tlbiAmJiB0eXBlb2YgdG9rZW4ubGluZU51bWJlciA9
PT0gJ251bWJlcicpID8KKyAgICAgICAgICAgIGNyZWF0ZUVycm9yKHRva2VuLmxpbmVOdW1iZXIs
IHRva2VuLnN0YXJ0LCBtc2cpIDoKKyAgICAgICAgICAgIGNyZWF0ZUVycm9yKHNjYW5uaW5nID8g
bGluZU51bWJlciA6IGxhc3RMaW5lTnVtYmVyLCBzY2FubmluZyA/IGluZGV4IDogbGFzdEluZGV4
LCBtc2cpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRocm93VW5leHBlY3RlZFRva2VuKHRva2Vu
LCBtZXNzYWdlKSB7CisgICAgICAgIHRocm93IHVuZXhwZWN0ZWRUb2tlbkVycm9yKHRva2VuLCBt
ZXNzYWdlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0
b2tlbiwgbWVzc2FnZSkgeworICAgICAgICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkVG9rZW5FcnJv
cih0b2tlbiwgbWVzc2FnZSk7CisgICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHsKKyAgICAgICAg
ICAgIHJlY29yZEVycm9yKGVycm9yKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRo
cm93IGVycm9yOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRv
a2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KQEAgLTIzOTMsNyArMjUwMSwz
MSBAQAogICAgIGZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkgewogICAgICAgICB2YXIgdG9rZW4gPSBs
ZXgoKTsKICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgfHwgdG9r
ZW4udmFsdWUgIT09IHZhbHVlKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4p
OworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLyoqCisgICAgICogQG5hbWUgZXhwZWN0Q29tbWFTZXBhcmF0b3IKKyAgICAg
KiBAZGVzY3JpcHRpb24gUXVpZXRseSBleHBlY3QgYSBjb21tYSB3aGVuIGluIHRvbGVyYW50IG1v
ZGUsIG90aGVyd2lzZSBkZWxlZ2F0ZXMKKyAgICAgKiB0byA8Y29kZT5leHBlY3QodmFsdWUpPC9j
b2RlPgorICAgICAqIEBzaW5jZSAyLjAKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBleHBlY3RDb21t
YVNlcGFyYXRvcigpIHsKKyAgICAgICAgdmFyIHRva2VuOworCisgICAgICAgIGlmIChleHRyYS5l
cnJvcnMpIHsKKyAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgaWYg
KHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFsdWUgPT09ICcsJykg
eworICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbi50
eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIHRva2VuLnZhbHVlID09PSAnOycpIHsKKyAgICAg
ICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tl
bih0b2tlbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4pOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhwZWN0KCcsJyk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTI0MDMsNyArMjUzNSw3IEBACiAgICAgZnVuY3Rpb24gZXhwZWN0
S2V5d29yZChrZXl3b3JkKSB7CiAgICAgICAgIHZhciB0b2tlbiA9IGxleCgpOwogICAgICAgICBp
ZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29y
ZCkgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAgICAgICAgICAgIHRo
cm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjQxOSw4
ICsyNTUxLDggQEAKICAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3
b3JkICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKICAgICB9CiAKLQogICAgIC8vIFJl
dHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBjb250ZXh0
dWFsIGtleXdvcmQKKyAgICAvLyAod2hlcmUgYW4gaWRlbnRpZmllciBpcyBzb21ldGltZXMgYSBr
ZXl3b3JkIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkKIAogICAgIGZ1bmN0aW9uIG1hdGNoQ29u
dGV4dHVhbEtleXdvcmQoa2V5d29yZCkgewogICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUg
PT09IFRva2VuLklkZW50aWZpZXIgJiYgbG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkOwpAQCAt
MjQ1MCwzMzIgKzI1ODIsNTE1IEBACiAgICAgfQogCiAgICAgZnVuY3Rpb24gY29uc3VtZVNlbWlj
b2xvbigpIHsKLSAgICAgICAgdmFyIGxpbmUsIG9sZEluZGV4ID0gaW5kZXgsIG9sZExpbmVOdW1i
ZXIgPSBsaW5lTnVtYmVyLAotICAgICAgICAgICAgb2xkTGluZVN0YXJ0ID0gbGluZVN0YXJ0LCBv
bGRMb29rYWhlYWQgPSBsb29rYWhlYWQ7Ci0KLSAgICAgICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29t
bW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChjaGFyICM1OSkuCi0gICAg
ICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDU5KSB7CisgICAgICAgIC8vIENh
dGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAo
VSswMDNCKS4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KHN0YXJ0SW5kZXgpID09PSAw
eDNCIHx8IG1hdGNoKCc7JykpIHsKICAgICAgICAgICAgIGxleCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbGluZSA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIHNr
aXBDb21tZW50KCk7Ci0gICAgICAgIGlmIChsaW5lTnVtYmVyICE9PSBsaW5lKSB7Ci0gICAgICAg
ICAgICBpbmRleCA9IG9sZEluZGV4OwotICAgICAgICAgICAgbGluZU51bWJlciA9IG9sZExpbmVO
dW1iZXI7Ci0gICAgICAgICAgICBsaW5lU3RhcnQgPSBvbGRMaW5lU3RhcnQ7Ci0gICAgICAgICAg
ICBsb29rYWhlYWQgPSBvbGRMb29rYWhlYWQ7CisgICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRv
cikgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1hdGNo
KCc7JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisgICAgICAgIC8vIEZJWE1FKGlrYXJpZW5hdG9yKTogdGhpcyBpcyBzZWVtaW5nbHkgYW4g
aXNzdWUgaW4gdGhlIHByZXZpb3VzIGxvY2F0aW9uIGluZm8gY29udmVudGlvbi4KKyAgICAgICAg
bGFzdEluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgbGFzdExpbmVOdW1iZXIgPSBzdGFydExp
bmVOdW1iZXI7CisgICAgICAgIGxhc3RMaW5lU3RhcnQgPSBzdGFydExpbmVTdGFydDsKIAogICAg
ICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRiAmJiAhbWF0Y2goJ30nKSkgewot
ICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgICAgICB0aHJv
d1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8g
UmV0dXJuIHRydWUgaWYgcHJvdmlkZWQgZXhwcmVzc2lvbiBpcyBMZWZ0SGFuZFNpZGVFeHByZXNz
aW9uCisgICAgLy8gQ292ZXIgZ3JhbW1hciBzdXBwb3J0LgorICAgIC8vCisgICAgLy8gV2hlbiBh
biBhc3NpZ25tZW50IGV4cHJlc3Npb24gcG9zaXRpb24gc3RhcnRzIHdpdGggYW4gbGVmdCBwYXJl
bnRoZXNpcywgdGhlIGRldGVybWluYXRpb24gb2YgdGhlIHR5cGUKKyAgICAvLyBvZiB0aGUgc3lu
dGF4IGlzIHRvIGJlIGRlZmVycmVkIGFyYml0cmFyaWx5IGxvbmcgdW50aWwgdGhlIGVuZCBvZiB0
aGUgcGFyZW50aGVzZXMgcGFpciAocGx1cyBhIGxvb2thaGVhZCkKKyAgICAvLyBvciB0aGUgZmly
c3QgY29tbWEuIFRoaXMgc2l0dWF0aW9uIGFsc28gZGVmZXJzIHRoZSBkZXRlcm1pbmF0aW9uIG9m
IGFsbCB0aGUgZXhwcmVzc2lvbnMgbmVzdGVkIGluIHRoZSBwYWlyLgorICAgIC8vCisgICAgLy8g
VGhlcmUgYXJlIHRocmVlIHByb2R1Y3Rpb25zIHRoYXQgY2FuIGJlIHBhcnNlZCBpbiBhIHBhcmVu
dGhlc2VzIHBhaXIgdGhhdCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkCisgICAgLy8gYWZ0ZXIgdGhl
IG91dGVybW9zdCBwYWlyIGlzIGNsb3NlZC4gVGhleSBhcmU6CisgICAgLy8KKyAgICAvLyAgIDEu
IEFzc2lnbm1lbnRFeHByZXNzaW9uCisgICAgLy8gICAyLiBCaW5kaW5nRWxlbWVudHMKKyAgICAv
LyAgIDMuIEFzc2lnbm1lbnRUYXJnZXRzCisgICAgLy8KKyAgICAvLyBJbiBvcmRlciB0byBhdm9p
ZCBleHBvbmVudGlhbCBiYWNrdHJhY2tpbmcsIHdlIHVzZSB0d28gZmxhZ3MgdG8gZGVub3RlIGlm
IHRoZSBwcm9kdWN0aW9uIGNhbiBiZQorICAgIC8vIGJpbmRpbmcgZWxlbWVudCBvciBhc3NpZ25t
ZW50IHRhcmdldC4KKyAgICAvLworICAgIC8vIFRoZSB0aHJlZSBwcm9kdWN0aW9ucyBoYXZlIHRo
ZSByZWxhdGlvbnNoaXA6CisgICAgLy8KKyAgICAvLyAgIEJpbmRpbmdFbGVtZW50cyDiioYgQXNz
aWdubWVudFRhcmdldHMg4oqGIEFzc2lnbm1lbnRFeHByZXNzaW9uCisgICAgLy8KKyAgICAvLyB3
aXRoIGEgc2luZ2xlIGV4Y2VwdGlvbiB0aGF0IENvdmVySW5pdGlhbGl6ZWROYW1lIHdoZW4gdXNl
ZCBkaXJlY3RseSBpbiBhbiBFeHByZXNzaW9uLCBnZW5lcmF0ZXMKKyAgICAvLyBhbiBlYXJseSBl
cnJvci4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRoZSB0aGlyZCBzdGF0ZSwgZmlyc3RDb3ZlckluaXRp
YWxpemVkTmFtZUVycm9yLCB0byB0cmFjayB0aGUKKyAgICAvLyBmaXJzdCB1c2FnZSBvZiBDb3Zl
ckluaXRpYWxpemVkTmFtZSBhbmQgcmVwb3J0IGl0IHdoZW4gd2UgcmVhY2hlZCB0aGUgZW5kIG9m
IHRoZSBwYXJlbnRoZXNlcyBwYWlyLgorICAgIC8vCisgICAgLy8gaXNvbGF0ZUNvdmVyR3JhbW1h
ciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZXIgZnVuY3Rpb24gd2l0aCBhIG5ldyBjb3Zl
ciBncmFtbWFyIGNvbnRleHQsIGFuZCBpdCBkb2VzIG5vdAorICAgIC8vIGVmZmVjdCB0aGUgY3Vy
cmVudCBmbGFncy4gVGhpcyBtZWFucyB0aGUgcHJvZHVjdGlvbiB0aGUgcGFyc2VyIHBhcnNlcyBp
cyBvbmx5IHVzZWQgYXMgYW4gZXhwcmVzc2lvbi4gVGhlcmVmb3JlCisgICAgLy8gdGhlIENvdmVy
SW5pdGlhbGl6ZWROYW1lIGNoZWNrIGlzIGNvbmR1Y3RlZC4KKyAgICAvLworICAgIC8vIGluaGVy
aXRDb3ZlckdyYW1tYXIgZnVuY3Rpb24gcnVucyB0aGUgZ2l2ZW4gcGFyc2UgZnVuY3Rpb24gd2l0
aCBhIG5ldyBjb3ZlciBncmFtbWFyIGNvbnRleHQsIGFuZCBpdCBwcm9wYWdhdGVzCisgICAgLy8g
dGhlIGZsYWdzIG91dHNpZGUgb2YgdGhlIHBhcnNlci4gVGhpcyBtZWFucyB0aGUgcHJvZHVjdGlv
biB0aGUgcGFyc2VyIHBhcnNlcyBpcyB1c2VkIGFzIGEgcGFydCBvZiBhIHBvdGVudGlhbAorICAg
IC8vIHBhdHRlcm4uIFRoZSBDb3ZlckluaXRpYWxpemVkTmFtZSBjaGVjayBpcyBkZWZlcnJlZC4K
KyAgICBmdW5jdGlvbiBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlcikgeworICAgICAgICB2YXIg
b2xkSXNCaW5kaW5nRWxlbWVudCA9IGlzQmluZGluZ0VsZW1lbnQsCisgICAgICAgICAgICBvbGRJ
c0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0Fzc2lnbm1lbnRUYXJnZXQsCisgICAgICAgICAgICBvbGRG
aXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1l
RXJyb3IsCisgICAgICAgICAgICByZXN1bHQ7CisgICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSB0
cnVlOworICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOworICAgICAgICBmaXJzdENv
dmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOworICAgICAgICByZXN1bHQgPSBwYXJzZXIo
KTsKKyAgICAgICAgaWYgKGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciAhPT0gbnVsbCkg
eworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oZmlyc3RDb3ZlckluaXRpYWxpemVk
TmFtZUVycm9yKTsKKyAgICAgICAgfQorICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gb2xkSXNC
aW5kaW5nRWxlbWVudDsKKyAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gb2xkSXNBc3NpZ25t
ZW50VGFyZ2V0OworICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBvbGRG
aXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQogCi0gICAgZnVuY3Rpb24gaXNMZWZ0SGFuZFNpZGUoZXhwcikgewotICAgICAgICByZXR1
cm4gZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciB8fCBleHByLnR5cGUgPT09IFN5bnRh
eC5NZW1iZXJFeHByZXNzaW9uOworICAgIGZ1bmN0aW9uIGluaGVyaXRDb3ZlckdyYW1tYXIocGFy
c2VyKSB7CisgICAgICAgIHZhciBvbGRJc0JpbmRpbmdFbGVtZW50ID0gaXNCaW5kaW5nRWxlbWVu
dCwKKyAgICAgICAgICAgIG9sZElzQXNzaWdubWVudFRhcmdldCA9IGlzQXNzaWdubWVudFRhcmdl
dCwKKyAgICAgICAgICAgIG9sZEZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IGZpcnN0
Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciwKKyAgICAgICAgICAgIHJlc3VsdDsKKyAgICAgICAg
aXNCaW5kaW5nRWxlbWVudCA9IHRydWU7CisgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IHRy
dWU7CisgICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7CisgICAg
ICAgIHJlc3VsdCA9IHBhcnNlcigpOworICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gaXNCaW5k
aW5nRWxlbWVudCAmJiBvbGRJc0JpbmRpbmdFbGVtZW50OworICAgICAgICBpc0Fzc2lnbm1lbnRU
YXJnZXQgPSBpc0Fzc2lnbm1lbnRUYXJnZXQgJiYgb2xkSXNBc3NpZ25tZW50VGFyZ2V0OworICAg
ICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBvbGRGaXJzdENvdmVySW5pdGlh
bGl6ZWROYW1lRXJyb3IgfHwgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOworICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGZ1bmN0aW9uIGlzQXNzaWduYWJsZUxlZnRI
YW5kU2lkZShleHByKSB7Ci0gICAgICAgIHJldHVybiBpc0xlZnRIYW5kU2lkZShleHByKSB8fCBl
eHByLnR5cGUgPT09IFN5bnRheC5PYmplY3RQYXR0ZXJuIHx8IGV4cHIudHlwZSA9PT0gU3ludGF4
LkFycmF5UGF0dGVybjsKKyAgICAvLyBFQ01BLTI2MiAxMy4zLjMgRGVzdHJ1Y3R1cmluZyBCaW5k
aW5nIFBhdHRlcm5zCisKKyAgICBmdW5jdGlvbiBwYXJzZUFycmF5UGF0dGVybihwYXJhbXMsIGtp
bmQpIHsKKyAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpLCBlbGVtZW50cyA9IFtdLCByZXN0
LCByZXN0Tm9kZTsKKyAgICAgICAgZXhwZWN0KCdbJyk7CisKKyAgICAgICAgd2hpbGUgKCFtYXRj
aCgnXScpKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJywnKSkgeworICAgICAgICAgICAgICAg
IGxleCgpOworICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnLi4uJykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdE5vZGUgPSBuZXcgTm9kZSgpOworICAgICAgICAgICAgICAgICAgICBs
ZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gobG9va2FoZWFkKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKHBhcmFtcywga2lu
ZCk7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocmVzdE5vZGUuZmluaXNoUmVz
dEVsZW1lbnQocmVzdCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlUGF0
dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoIW1hdGNoKCddJykpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0
KCcsJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0KKwor
ICAgICAgICBleHBlY3QoJ10nKTsKKworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hBcnJheVBh
dHRlcm4oZWxlbWVudHMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlUHJvcGVydHlQYXR0
ZXJuKHBhcmFtcywga2luZCkgeworICAgICAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCksIGtleSwg
a2V5VG9rZW4sIGNvbXB1dGVkID0gbWF0Y2goJ1snKSwgaW5pdDsKKyAgICAgICAgaWYgKGxvb2th
aGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBrZXlUb2tlbiA9
IGxvb2thaGVhZDsKKyAgICAgICAgICAgIGtleSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7
CisgICAgICAgICAgICBpZiAobWF0Y2goJz0nKSkgeworICAgICAgICAgICAgICAgIHBhcmFtcy5w
dXNoKGtleVRva2VuKTsKKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICBp
bml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCisgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICdpbml0Jywga2V5
LCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFdyYXBwaW5nTm9kZShrZXlUb2tlbiku
ZmluaXNoQXNzaWdubWVudFBhdHRlcm4oa2V5LCBpbml0KSwgZmFsc2UsIGZhbHNlKTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIW1hdGNoKCc6JykpIHsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
cHVzaChrZXlUb2tlbik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVy
dHkoJ2luaXQnLCBrZXksIGZhbHNlLCBrZXksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlL
ZXkocGFyYW1zLCBraW5kKTsKKyAgICAgICAgfQorICAgICAgICBleHBlY3QoJzonKTsKKyAgICAg
ICAgaW5pdCA9IHBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCk7CisgICAgICAg
IHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgaW5pdCwg
ZmFsc2UsIGZhbHNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFBhdHRlcm4o
cGFyYW1zLCBraW5kKSB7CisgICAgICAgIHZhciBub2RlID0gbmV3IE5vZGUoKSwgcHJvcGVydGll
cyA9IFtdOworCisgICAgICAgIGV4cGVjdCgneycpOworCisgICAgICAgIHdoaWxlICghbWF0Y2go
J30nKSkgeworICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHBhcnNlUHJvcGVydHlQYXR0ZXJu
KHBhcmFtcywga2luZCkpOworICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpKSB7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBsZXgoKTsKKworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hPYmplY3RQYXR0ZXJuKHByb3Bl
cnRpZXMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlUGF0dGVybihwYXJhbXMsIGtpbmQp
IHsKKyAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUFy
cmF5UGF0dGVybihwYXJhbXMsIGtpbmQpOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCd7Jykp
IHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZU9iamVjdFBhdHRlcm4ocGFyYW1zLCBraW5kKTsK
KyAgICAgICAgfQorICAgICAgICBwYXJhbXMucHVzaChsb29rYWhlYWQpOworICAgICAgICByZXR1
cm4gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
cGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBraW5kKSB7CisgICAgICAgIHZhciBzdGFy
dFRva2VuID0gbG9va2FoZWFkLCBwYXR0ZXJuLCBwcmV2aW91c0FsbG93WWllbGQsIHJpZ2h0Owor
ICAgICAgICBwYXR0ZXJuID0gcGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7CisgICAgICAgIGlm
IChtYXRjaCgnPScpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHByZXZpb3Vz
QWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7CisgICAgICAgICAgICBzdGF0ZS5hbGxvd1lp
ZWxkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJpZ2h0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJz
ZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBw
cmV2aW91c0FsbG93WWllbGQ7CisgICAgICAgICAgICBwYXR0ZXJuID0gbmV3IFdyYXBwaW5nTm9k
ZShzdGFydFRva2VuKS5maW5pc2hBc3NpZ25tZW50UGF0dGVybihwYXR0ZXJuLCByaWdodCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhdHRlcm47CiAgICAgfQogCi0gICAgLy8gMTEuMS40
IEFycmF5IEluaXRpYWxpc2VyCisgICAgLy8gRUNNQS0yNjIgMTIuMi41IEFycmF5IEluaXRpYWxp
emVyCiAKLSAgICBmdW5jdGlvbiBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKSB7Ci0gICAgICAgIHZh
ciBlbGVtZW50cyA9IFtdLCBibG9ja3MgPSBbXSwgZmlsdGVyID0gbnVsbCwgdG1wLCBwb3NzaWJs
ZWNvbXByZWhlbnNpb24gPSB0cnVlLAotICAgICAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRl
KCk7CisgICAgZnVuY3Rpb24gcGFyc2VBcnJheUluaXRpYWxpemVyKCkgeworICAgICAgICB2YXIg
ZWxlbWVudHMgPSBbXSwgbm9kZSA9IG5ldyBOb2RlKCksIHJlc3RTcHJlYWQ7CiAKICAgICAgICAg
ZXhwZWN0KCdbJyk7CisKICAgICAgICAgd2hpbGUgKCFtYXRjaCgnXScpKSB7Ci0gICAgICAgICAg
ICBpZiAobG9va2FoZWFkLnZhbHVlID09PSAnZm9yJyAmJgotICAgICAgICAgICAgICAgICAgICBs
b29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewotICAgICAgICAgICAgICAgIGlmICgh
cG9zc2libGVjb21wcmVoZW5zaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLkNvbXByZWhlbnNpb25FcnJvcik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG1hdGNoS2V5d29yZCgnZm9yJyk7Ci0gICAgICAgICAgICAgICAgdG1wID0g
cGFyc2VGb3JTdGF0ZW1lbnQoe2lnbm9yZUJvZHk6IHRydWV9KTsKLSAgICAgICAgICAgICAgICB0
bXAub2YgPSB0bXAudHlwZSA9PT0gU3ludGF4LkZvck9mU3RhdGVtZW50OwotICAgICAgICAgICAg
ICAgIHRtcC50eXBlID0gU3ludGF4LkNvbXByZWhlbnNpb25CbG9jazsKLSAgICAgICAgICAgICAg
ICBpZiAodG1wLmxlZnQua2luZCkgeyAvLyBjYW4ndCBiZSBsZXQgb3IgY29uc3QKLSAgICAgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuQ29tcHJlaGVuc2lvbkVycm9yKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYmxvY2tzLnB1c2godG1wKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnZhbHVlID09PSAnaWYnICYmCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewot
ICAgICAgICAgICAgICAgIGlmICghcG9zc2libGVjb21wcmVoZW5zaW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkNvbXByZWhlbnNpb25FcnJvcik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGV4cGVjdEtleXdvcmQoJ2lmJyk7Ci0g
ICAgICAgICAgICAgICAgZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICAgICAgZmlsdGVyID0gcGFy
c2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKGxvb2thaGVhZC52YWx1ZSA9PT0gJywnICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgewotICAgICAg
ICAgICAgICAgIHBvc3NpYmxlY29tcHJlaGVuc2lvbiA9IGZhbHNlOyAvLyBubyBsb25nZXIgYWxs
b3dlZC4KKyAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7CiAgICAgICAgICAgICAgICAgbGV4
KCk7CiAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobWF0Y2goJy4uLicpKSB7CisgICAgICAgICAgICAgICAgcmVzdFNwcmVhZCA9IG5l
dyBOb2RlKCk7CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgcmVzdFNw
cmVhZC5maW5pc2hTcHJlYWRFbGVtZW50KGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbikpOworCisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocmVzdFNwcmVhZCk7CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRtcCA9IHBhcnNlU3ByZWFkT3JBc3NpZ25t
ZW50RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godG1wKTsKLSAg
ICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcC50eXBlID09PSBTeW50YXguU3ByZWFkRWxlbWVu
dCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCddJykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkVsZW1lbnRBZnRlclNwcmVhZEVs
ZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghKG1hdGNoKCddJykgfHwgbWF0Y2hLZXl3b3JkKCdmb3InKSB8fCBtYXRjaEtleXdvcmQoJ2lm
JykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOyAvLyB0aGlzIGxleGVzLgot
ICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZWNvbXByZWhlbnNpb24gPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBlbGVtZW50cy5wdXNoKGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbikpOworCisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGV4cGVjdCgnXScpOwotCi0gICAgICAgIGlm
IChmaWx0ZXIgJiYgIWJsb2Nrcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLkNvbXByZWhlbnNpb25SZXF1aXJlc0Jsb2NrKTsKLSAgICAgICAgfQorICAgICAg
ICBsZXgoKTsKIAotICAgICAgICBpZiAoYmxvY2tzLmxlbmd0aCkgewotICAgICAgICAgICAgaWYg
KGVsZW1lbnRzLmxlbmd0aCAhPT0gMSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLkNvbXByZWhlbnNpb25FcnJvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVDb21wcmVoZW5zaW9u
RXhwcmVzc2lvbihmaWx0ZXIsIGJsb2NrcywgZWxlbWVudHNbMF0pKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVBcnJheUV4cHJl
c3Npb24oZWxlbWVudHMpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQXJyYXlFeHByZXNz
aW9uKGVsZW1lbnRzKTsKICAgICB9CiAKLSAgICAvLyAxMS4xLjUgT2JqZWN0IEluaXRpYWxpc2Vy
CisgICAgLy8gRUNNQS0yNjIgMTIuMi42IE9iamVjdCBJbml0aWFsaXplcgorCisgICAgZnVuY3Rp
b24gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG5vZGUsIHBhcmFtSW5mbywgaXNHZW5lcmF0b3IpIHsK
KyAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0LCBib2R5OwogCi0gICAgZnVuY3Rpb24gcGFyc2VQ
cm9wZXJ0eUZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0LCBw
cmV2aW91c1lpZWxkQWxsb3dlZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSwKLSAgICAgICAgICAg
IG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBp
c0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CiAKICAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJp
Y3Q7Ci0gICAgICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkOwot
ICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBvcHRpb25zLmdlbmVyYXRvcjsKLSAgICAgICAg
cGFyYW1zID0gb3B0aW9ucy5wYXJhbXMgfHwgW107Ci0gICAgICAgIGRlZmF1bHRzID0gb3B0aW9u
cy5kZWZhdWx0cyB8fCBbXTsKKyAgICAgICAgYm9keSA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFy
c2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKTsKIAotICAgICAgICBib2R5ID0gcGFyc2VDb25jaXNl
Qm9keSgpOwotICAgICAgICBpZiAob3B0aW9ucy5uYW1lICYmIHN0cmljdCAmJiBpc1Jlc3RyaWN0
ZWRXb3JkKHBhcmFtc1swXS5uYW1lKSkgewotICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KG9wdGlvbnMubmFtZSwgTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lKTsKKyAgICAgICAgaWYgKHN0
cmljdCAmJiBwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICB0b2xlcmF0
ZVVuZXhwZWN0ZWRUb2tlbihwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkLCBwYXJhbUluZm8ubWVz
c2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmljdCAmJiBwYXJhbUluZm8uc3RyaWN0
ZWQpIHsKKyAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHBhcmFtSW5mby5zdHJp
Y3RlZCwgcGFyYW1JbmZvLm1lc3NhZ2UpOwogICAgICAgICB9Ci0gICAgICAgIHN0cmljdCA9IHBy
ZXZpb3VzU3RyaWN0OwotICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxk
QWxsb3dlZDsKIAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5j
cmVhdGVGdW5jdGlvbkV4cHJlc3Npb24oCi0gICAgICAgICAgICBudWxsLAotICAgICAgICAgICAg
cGFyYW1zLAotICAgICAgICAgICAgZGVmYXVsdHMsCi0gICAgICAgICAgICBib2R5LAotICAgICAg
ICAgICAgb3B0aW9ucy5yZXN0IHx8IG51bGwsCi0gICAgICAgICAgICBvcHRpb25zLmdlbmVyYXRv
ciwKLSAgICAgICAgICAgIGJvZHkudHlwZSAhPT0gU3ludGF4LkJsb2NrU3RhdGVtZW50Ci0gICAg
ICAgICkpOworICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKyAgICAgICAgcmV0dXJu
IG5vZGUuZmluaXNoRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtSW5mby5wYXJhbXMsIHBh
cmFtSW5mby5kZWZhdWx0cywgYm9keSwgaXNHZW5lcmF0b3IpOwogICAgIH0KIAorICAgIGZ1bmN0
aW9uIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHBhcmFtcywg
bWV0aG9kLCBub2RlID0gbmV3IE5vZGUoKSwKKyAgICAgICAgICAgIHByZXZpb3VzQWxsb3dZaWVs
ZCA9IHN0YXRlLmFsbG93WWllbGQ7CiAKLSAgICBmdW5jdGlvbiBwYXJzZVByb3BlcnR5TWV0aG9k
RnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QsIHRtcCwgbWV0
aG9kOwotCi0gICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OwotICAgICAgICBzdHJpY3Qg
PSB0cnVlOwotCi0gICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKCk7Ci0KLSAgICAgICAgaWYgKHRt
cC5zdHJpY3RlZCkgewotICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5zdHJpY3Rl
ZCwgdG1wLm1lc3NhZ2UpOwotICAgICAgICB9Ci0KLQotICAgICAgICBtZXRob2QgPSBwYXJzZVBy
b3BlcnR5RnVuY3Rpb24oewotICAgICAgICAgICAgcGFyYW1zOiB0bXAucGFyYW1zLAotICAgICAg
ICAgICAgZGVmYXVsdHM6IHRtcC5kZWZhdWx0cywKLSAgICAgICAgICAgIHJlc3Q6IHRtcC5yZXN0
LAotICAgICAgICAgICAgZ2VuZXJhdG9yOiBvcHRpb25zLmdlbmVyYXRvcgotICAgICAgICB9KTsK
KyAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlOworICAgICAgICBwYXJhbXMgPSBwYXJz
ZVBhcmFtcygpOworICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxk
OwogCi0gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworICAgICAgICBzdGF0ZS5hbGxv
d1lpZWxkID0gZmFsc2U7CisgICAgICAgIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihu
b2RlLCBwYXJhbXMsIGZhbHNlKTsKKyAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3Vz
QWxsb3dZaWVsZDsKIAogICAgICAgICByZXR1cm4gbWV0aG9kOwogICAgIH0KIAotCiAgICAgZnVu
Y3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHsKLSAgICAgICAgdmFyIG1hcmtlciA9IG1h
cmtlckNyZWF0ZSgpLAotICAgICAgICAgICAgdG9rZW4gPSBsZXgoKSwKLSAgICAgICAgICAgIHBy
b3BlcnR5S2V5LAotICAgICAgICAgICAgcmVzdWx0OworICAgICAgICB2YXIgdG9rZW4sIG5vZGUg
PSBuZXcgTm9kZSgpLCBleHByOworCisgICAgICAgIHRva2VuID0gbGV4KCk7CiAKICAgICAgICAg
Ly8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tIHBhcnNlT2JqZWN0UHJv
cGVydHkoKSwgd2hlcmUKICAgICAgICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRva2VucyBhcmUg
YWxyZWFkeSBmaWx0ZXJlZCBvdXQuCiAKLSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2Vu
LlN0cmluZ0xpdGVyYWwgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsK
KyAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7CisgICAgICAgIGNhc2UgVG9rZW4uU3RyaW5n
TGl0ZXJhbDoKKyAgICAgICAgY2FzZSBUb2tlbi5OdW1lcmljTGl0ZXJhbDoKICAgICAgICAgICAg
IGlmIChzdHJpY3QgJiYgdG9rZW4ub2N0YWwpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAg
ICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9jdGFs
TGl0ZXJhbCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHko
bWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKSk7CisgICAgICAgICAgICByZXR1
cm4gbm9kZS5maW5pc2hMaXRlcmFsKHRva2VuKTsKKyAgICAgICAgY2FzZSBUb2tlbi5JZGVudGlm
aWVyOgorICAgICAgICBjYXNlIFRva2VuLkJvb2xlYW5MaXRlcmFsOgorICAgICAgICBjYXNlIFRv
a2VuLk51bGxMaXRlcmFsOgorICAgICAgICBjYXNlIFRva2VuLktleXdvcmQ6CisgICAgICAgICAg
ICByZXR1cm4gbm9kZS5maW5pc2hJZGVudGlmaWVyKHRva2VuLnZhbHVlKTsKKyAgICAgICAgY2Fz
ZSBUb2tlbi5QdW5jdHVhdG9yOgorICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnWycp
IHsKKyAgICAgICAgICAgICAgICBleHByID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoJ10nKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKKyAgICB9CiAK
LSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFs
dWUgPT09ICdbJykgewotICAgICAgICAgICAgLy8gRm9yIGNvbXB1dGVkIHByb3BlcnRpZXMgd2Ug
c2hvdWxkIHNraXAgdGhlIFsgYW5kIF0sIGFuZAotICAgICAgICAgICAgLy8gY2FwdHVyZSBpbiBt
YXJrZXIgb25seSB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGl0c2VsZi4KLSAgICAgICAgICAg
IG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwotICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBwYXJz
ZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBtYXJrZXJBcHBs
eShtYXJrZXIsIHByb3BlcnR5S2V5KTsKLSAgICAgICAgICAgIGV4cGVjdCgnXScpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBmdW5jdGlvbiBsb29rYWhlYWRQcm9wZXJ0eU5hbWUo
KSB7CisgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnR5cGUpIHsKKyAgICAgICAgY2FzZSBUb2tl
bi5JZGVudGlmaWVyOgorICAgICAgICBjYXNlIFRva2VuLlN0cmluZ0xpdGVyYWw6CisgICAgICAg
IGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6CisgICAgICAgIGNhc2UgVG9rZW4uTnVsbExpdGVy
YWw6CisgICAgICAgIGNhc2UgVG9rZW4uTnVtZXJpY0xpdGVyYWw6CisgICAgICAgIGNhc2UgVG9r
ZW4uS2V5d29yZDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRva2Vu
LlB1bmN0dWF0b3I6CisgICAgICAgICAgICByZXR1cm4gbG9va2FoZWFkLnZhbHVlID09PSAnWyc7
CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0
ZS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5KCkgewotICAgICAgICB2
YXIgdG9rZW4sIGtleSwgaWQsIHBhcmFtLCBjb21wdXRlZCwKLSAgICAgICAgICAgIG1hcmtlciA9
IG1hcmtlckNyZWF0ZSgpOwotCi0gICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICBj
b21wdXRlZCA9ICh0b2tlbi52YWx1ZSA9PT0gJ1snICYmIHRva2VuLnR5cGUgPT09IFRva2VuLlB1
bmN0dWF0b3IpOwotCi0gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVy
IHx8IGNvbXB1dGVkKSB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB0byB0cnkgdG8gcGFyc2Ug
YSBNZXRob2REZWZpbml0aW9uIGFzIGRlZmluZWQgaW4gMTQuMy4gQnV0IGluIHRoZSBjYXNlIG9m
IG9iamVjdCBsaXRlcmFscywKKyAgICAvLyBpdCBtaWdodCBiZSBjYWxsZWQgYXQgYSBwb3NpdGlv
biB3aGVyZSB0aGVyZSBpcyBpbiBmYWN0IGEgc2hvcnQgaGFuZCBpZGVudGlmaWVyIHBhdHRlcm4g
b3IgYSBkYXRhIHByb3BlcnR5LgorICAgIC8vIFRoaXMgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBh
ZnRlciB3ZSBjb25zdW1lZCB1cCB0byB0aGUgbGVmdCBwYXJlbnRoZXNlcy4KKyAgICAvLworICAg
IC8vIEluIG9yZGVyIHRvIGF2b2lkIGJhY2sgdHJhY2tpbmcsIGl0IHJldHVybnMgYG51bGxgIGlm
IHRoZSBwb3NpdGlvbiBpcyBub3QgYSBNZXRob2REZWZpbml0aW9uIGFuZCB0aGUgY2FsbGVyCisg
ICAgLy8gaXMgcmVzcG9uc2libGUgdG8gdmlzaXQgb3RoZXIgb3B0aW9ucy4KKyAgICBmdW5jdGlv
biB0cnlQYXJzZU1ldGhvZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG5vZGUpIHsK
KyAgICAgICAgdmFyIHZhbHVlLCBvcHRpb25zLCBtZXRob2ROb2RlLCBwYXJhbXMsCisgICAgICAg
ICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0ZS5hbGxvd1lpZWxkOwogCi0gICAgICAgICAg
ICBpZCA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLQotICAgICAgICAgICAgLy8gUHJvcGVy
dHkgQXNzaWdubWVudDogR2V0dGVyIGFuZCBTZXR0ZXIuCisgICAgICAgIGlmICh0b2tlbi50eXBl
ID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICAvLyBjaGVjayBmb3IgYGdldGAg
YW5kIGBzZXRgOwogCi0gICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYmICEo
bWF0Y2goJzonKSB8fCBtYXRjaCgnKCcpKSkgewotICAgICAgICAgICAgICAgIGNvbXB1dGVkID0g
KGxvb2thaGVhZC52YWx1ZSA9PT0gJ1snKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9
PT0gJ2dldCcgJiYgbG9va2FoZWFkUHJvcGVydHlOYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBj
b21wdXRlZCA9IG1hdGNoKCdbJyk7CiAgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQ
cm9wZXJ0eUtleSgpOworICAgICAgICAgICAgICAgIG1ldGhvZE5vZGUgPSBuZXcgTm9kZSgpOwog
ICAgICAgICAgICAgICAgIGV4cGVjdCgnKCcpOwogICAgICAgICAgICAgICAgIGV4cGVjdCgnKScp
OwotICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNy
ZWF0ZVByb3BlcnR5KCdnZXQnLCBrZXksIHBhcnNlUHJvcGVydHlGdW5jdGlvbih7IGdlbmVyYXRv
cjogZmFsc2UgfSksIGZhbHNlLCBmYWxzZSwgY29tcHV0ZWQpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3NldCcgJiYgIShtYXRjaCgnOicpIHx8IG1h
dGNoKCcoJykpKSB7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSAobG9va2FoZWFkLnZhbHVl
ID09PSAnWycpOworCisgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG1ldGhvZE5vZGUs
IHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKKyAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdHM6IFtdLAorICAgICAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCwKKyAgICAg
ICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBudWxsLAorICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlOiBudWxsCisgICAgICAgICAgICAgICAgfSwgZmFsc2UpOworICAgICAgICAgICAg
ICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgnZ2V0Jywga2V5LCBjb21wdXRlZCwgdmFs
dWUsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnZhbHVlID09
PSAnc2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eU5hbWUoKSkgeworICAgICAgICAgICAgICAgIGNv
bXB1dGVkID0gbWF0Y2goJ1snKTsKICAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFBy
b3BlcnR5S2V5KCk7CisgICAgICAgICAgICAgICAgbWV0aG9kTm9kZSA9IG5ldyBOb2RlKCk7CiAg
ICAgICAgICAgICAgICAgZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBsb29r
YWhlYWQ7Ci0gICAgICAgICAgICAgICAgcGFyYW0gPSBbIHBhcnNlVmFyaWFibGVJZGVudGlmaWVy
KCkgXTsKKworICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtczogW10sCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCwKKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdHM6IFtdLAorICAgICAgICAgICAgICAgICAgICBmaXJzdFJl
c3RyaWN0ZWQ6IG51bGwsCisgICAgICAgICAgICAgICAgICAgIHBhcmFtU2V0OiB7fQorICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlUGFyYW0ob3B0aW9ucyk7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRDb3VudCA9PT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0cyA9IFtdOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGV4cGVjdCgnKScpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0
ZVByb3BlcnR5KCdzZXQnLCBrZXksIHBhcnNlUHJvcGVydHlGdW5jdGlvbih7IHBhcmFtczogcGFy
YW0sIGdlbmVyYXRvcjogZmFsc2UsIG5hbWU6IHRva2VuIH0pLCBmYWxzZSwgZmFsc2UsIGNvbXB1
dGVkKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobWF0Y2goJzonKSkgewotICAg
ICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseSht
YXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdpbml0JywgaWQsIHBhcnNlQXNzaWdubWVu
dEV4cHJlc3Npb24oKSwgZmFsc2UsIGZhbHNlLCBjb21wdXRlZCkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKG1hdGNoKCcoJykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFy
a2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnaW5pdCcsIGlkLCBwYXJz
ZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IGZhbHNlIH0pLCB0cnVlLCBmYWxz
ZSwgY29tcHV0ZWQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb21wdXRlZCkg
ewotICAgICAgICAgICAgICAgIC8vIENvbXB1dGVkIHByb3BlcnRpZXMgY2FuIG9ubHkgYmUgdXNl
ZCB3aXRoIGZ1bGwgbm90YXRpb24uCi0gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxv
b2thaGVhZCk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24obWV0aG9kTm9kZSwg
b3B0aW9ucywgZmFsc2UpOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2
aW91c0FsbG93WWllbGQ7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9w
ZXJ0eSgnc2V0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5j
cmVhdGVQcm9wZXJ0eSgnaW5pdCcsIGlkLCBpZCwgZmFsc2UsIHRydWUsIGZhbHNlKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi52
YWx1ZSA9PT0gJyonICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7CisgICAgICAgICAgICBj
b21wdXRlZCA9IG1hdGNoKCdbJyk7CisgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3Bl
cnR5S2V5KCk7CisgICAgICAgICAgICBtZXRob2ROb2RlID0gbmV3IE5vZGUoKTsKKworICAgICAg
ICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHRydWU7CisgICAgICAgICAgICBwYXJhbXMgPSBwYXJz
ZVBhcmFtcygpOworICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZ
aWVsZDsKKworICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlOworICAgICAgICAg
ICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24obWV0aG9kTm9kZSwgcGFyYW1zLCB0cnVl
KTsKKyAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisK
KyAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21w
dXRlZCwgdmFsdWUsIHRydWUsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4u
dHlwZSA9PT0gVG9rZW4uRU9GIHx8IHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsK
LSAgICAgICAgICAgIGlmICghbWF0Y2goJyonKSkgewotICAgICAgICAgICAgICAgIHRocm93VW5l
eHBlY3RlZCh0b2tlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXgoKTsKIAotICAg
ICAgICAgICAgY29tcHV0ZWQgPSAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3Ig
JiYgbG9va2FoZWFkLnZhbHVlID09PSAnWycpOworICAgICAgICBpZiAoa2V5ICYmIG1hdGNoKCco
JykpIHsKKyAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCk7
CisgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgnaW5pdCcsIGtleSwgY29t
cHV0ZWQsIHZhbHVlLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaWQg
PSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisgICAgICAgIC8vIE5vdCBhIE1ldGhvZERlZmlu
aXRpb24uCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KIAotICAgICAgICAgICAgaWYgKCFt
YXRjaCgnKCcpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsKLSAg
ICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5KGhhc1Byb3RvKSB7
CisgICAgICAgIHZhciB0b2tlbiA9IGxvb2thaGVhZCwgbm9kZSA9IG5ldyBOb2RlKCksIGNvbXB1
dGVkLCBrZXksIG1heWJlTWV0aG9kLCBwcm90bywgdmFsdWU7CisKKyAgICAgICAgY29tcHV0ZWQg
PSBtYXRjaCgnWycpOworICAgICAgICBpZiAobWF0Y2goJyonKSkgeworICAgICAgICAgICAgbGV4
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3Bl
cnR5S2V5KCk7CisgICAgICAgIH0KKyAgICAgICAgbWF5YmVNZXRob2QgPSB0cnlQYXJzZU1ldGhv
ZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG5vZGUpOworICAgICAgICBpZiAobWF5
YmVNZXRob2QpIHsKKyAgICAgICAgICAgIHJldHVybiBtYXliZU1ldGhvZDsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICgha2V5KSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihs
b29rYWhlYWQpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseSht
YXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdpbml0JywgaWQsIHBhcnNlUHJvcGVydHlN
ZXRob2RGdW5jdGlvbih7IGdlbmVyYXRvcjogdHJ1ZSB9KSwgdHJ1ZSwgZmFsc2UsIGNvbXB1dGVk
KSk7CisgICAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGVkIF9fcHJvdG9fXworICAgICAgICBp
ZiAoIWNvbXB1dGVkKSB7CisgICAgICAgICAgICBwcm90byA9IChrZXkudHlwZSA9PT0gU3ludGF4
LklkZW50aWZpZXIgJiYga2V5Lm5hbWUgPT09ICdfX3Byb3RvX18nKSB8fAorICAgICAgICAgICAg
ICAgIChrZXkudHlwZSA9PT0gU3ludGF4LkxpdGVyYWwgJiYga2V5LnZhbHVlID09PSAnX19wcm90
b19fJyk7CisgICAgICAgICAgICBpZiAoaGFzUHJvdG8udmFsdWUgJiYgcHJvdG8pIHsKKyAgICAg
ICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLkR1cGxpY2F0ZVByb3RvUHJvcGVydHkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFzUHJvdG8udmFsdWUgfD0gcHJvdG87CiAg
ICAgICAgIH0KLSAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworCiAgICAg
ICAgIGlmIChtYXRjaCgnOicpKSB7CiAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIHJl
dHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdpbml0Jywg
a2V5LCBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksIGZhbHNlLCBmYWxzZSwgZmFsc2UpKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAobWF0Y2goJygnKSkgewotICAgICAgICAgICAgcmV0dXJu
IG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2luaXQnLCBrZXks
IHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbih7IGdlbmVyYXRvcjogZmFsc2UgfSksIHRydWUs
IGZhbHNlLCBmYWxzZSkpOworICAgICAgICAgICAgdmFsdWUgPSBpbmhlcml0Q292ZXJHcmFtbWFy
KHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmlu
aXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgZmFsc2UsIGZhbHNlKTsK
ICAgICAgICAgfQotICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOwotICAgIH0KIAotICAg
IGZ1bmN0aW9uIGdldEZpZWxkTmFtZShrZXkpIHsKLSAgICAgICAgdmFyIHRvU3RyaW5nID0gU3Ry
aW5nOwotICAgICAgICBpZiAoa2V5LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAg
ICAgICAgICByZXR1cm4ga2V5Lm5hbWU7CisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tl
bi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJz0nKSkgeworICAgICAgICAg
ICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IGxvb2thaGVhZDsKKyAgICAg
ICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGlzb2xhdGVDb3Zlckdy
YW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLAorICAgICAgICAgICAg
ICAgICAgICBuZXcgV3JhcHBpbmdOb2RlKHRva2VuKS5maW5pc2hBc3NpZ25tZW50UGF0dGVybihr
ZXksIHZhbHVlKSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLCBrZXksIGZhbHNl
LCB0cnVlKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9TdHJpbmcoa2V5LnZhbHVlKTsK
KworICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOwogICAgIH0KIAotICAg
IGZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKSB7Ci0gICAgICAgIHZhciBwcm9wZXJ0
aWVzID0gW10sIHByb3BlcnR5LCBuYW1lLCBraW5kLCBzdG9yZWRLaW5kLCBtYXAgPSBuZXcgU3Ry
aW5nTWFwKCksCi0gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5j
dGlvbiBwYXJzZU9iamVjdEluaXRpYWxpemVyKCkgeworICAgICAgICB2YXIgcHJvcGVydGllcyA9
IFtdLCBoYXNQcm90byA9IHt2YWx1ZTogZmFsc2V9LCBub2RlID0gbmV3IE5vZGUoKTsKIAogICAg
ICAgICBleHBlY3QoJ3snKTsKIAogICAgICAgICB3aGlsZSAoIW1hdGNoKCd9JykpIHsKLSAgICAg
ICAgICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpOwotCi0gICAgICAgICAgICBp
ZiAoIXByb3BlcnR5LmNvbXB1dGVkKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGdldEZpZWxk
TmFtZShwcm9wZXJ0eS5rZXkpOwotICAgICAgICAgICAgICAgIGtpbmQgPSAocHJvcGVydHkua2lu
ZCA9PT0gJ2luaXQnKSA/IFByb3BlcnR5S2luZC5EYXRhIDogKHByb3BlcnR5LmtpbmQgPT09ICdn
ZXQnKSA/IFByb3BlcnR5S2luZC5HZXQgOiBQcm9wZXJ0eUtpbmQuU2V0OwotCi0gICAgICAgICAg
ICAgICAgaWYgKG1hcC5oYXMobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVkS2lu
ZCA9IG1hcC5nZXQobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdG9yZWRLaW5kID09
PSBQcm9wZXJ0eUtpbmQuRGF0YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmlj
dCAmJiBraW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RHVwbGljYXRlUHJv
cGVydHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChraW5kICE9PSBQcm9w
ZXJ0eUtpbmQuRGF0YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JU
b2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3Nv
ckRhdGFQcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3Jl
ZEtpbmQgJiBraW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRv
bGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckdldFNldCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbWFwLnNl
dChuYW1lLCBzdG9yZWRLaW5kIHwga2luZCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgbWFwLnNldChuYW1lLCBraW5kKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7
CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocGFyc2VPYmplY3RQcm9wZXJ0eShoYXNQcm90
bykpOwogCiAgICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgICAgICBl
eHBlY3QoJywnKTsKKyAgICAgICAgICAgICAgICBleHBlY3RDb21tYVNlcGFyYXRvcigpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgZXhwZWN0KCd9Jyk7CiAKLSAgICAgICAg
cmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlT2JqZWN0RXhwcmVzc2lv
bihwcm9wZXJ0aWVzKSk7CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaE9iamVjdEV4cHJlc3Np
b24ocHJvcGVydGllcyk7CiAgICAgfQogCisgICAgZnVuY3Rpb24gcmVpbnRlcnByZXRFeHByZXNz
aW9uQXNQYXR0ZXJuKGV4cHIpIHsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIHN3aXRjaCAoZXhw
ci50eXBlKSB7CisgICAgICAgIGNhc2UgU3ludGF4LklkZW50aWZpZXI6CisgICAgICAgIGNhc2Ug
U3ludGF4Lk1lbWJlckV4cHJlc3Npb246CisgICAgICAgIGNhc2UgU3ludGF4LlJlc3RFbGVtZW50
OgorICAgICAgICBjYXNlIFN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFN5bnRheC5TcHJlYWRFbGVtZW50OgorICAgICAgICAgICAgZXhw
ci50eXBlID0gU3ludGF4LlJlc3RFbGVtZW50OworICAgICAgICAgICAgcmVpbnRlcnByZXRFeHBy
ZXNzaW9uQXNQYXR0ZXJuKGV4cHIuYXJndW1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU3ludGF4LkFycmF5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGV4cHIudHlwZSA9
IFN5bnRheC5BcnJheVBhdHRlcm47CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXhwci5l
bGVtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChleHByLmVsZW1lbnRz
W2ldICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0RXhwcmVzc2lv
bkFzUGF0dGVybihleHByLmVsZW1lbnRzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTeW50YXguT2JqZWN0RXhw
cmVzc2lvbjoKKyAgICAgICAgICAgIGV4cHIudHlwZSA9IFN5bnRheC5PYmplY3RQYXR0ZXJuOwor
ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cHIucHJvcGVydGllcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByLnBy
b3BlcnRpZXNbaV0udmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uOgorICAgICAgICAgICAgZXhw
ci50eXBlID0gU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOworICAgICAgICAgICAgcmVpbnRlcnBy
ZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIubGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEFsbG93IG90aGVyIG5vZGUgdHlwZSBmb3Ig
dG9sZXJhbnQgcGFyc2luZy4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gRUNNQS0yNjIgMTIuMi45IFRlbXBsYXRlIExpdGVyYWxzCisKICAgICBmdW5jdGlv
biBwYXJzZVRlbXBsYXRlRWxlbWVudChvcHRpb24pIHsKLSAgICAgICAgdmFyIG1hcmtlciA9IG1h
cmtlckNyZWF0ZSgpLAotICAgICAgICAgICAgdG9rZW4gPSBzY2FuVGVtcGxhdGVFbGVtZW50KG9w
dGlvbik7Ci0gICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4ub2N0YWwpIHsKLSAgICAgICAgICAg
IHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAgICAg
IHZhciBub2RlLCB0b2tlbjsKKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2Vu
LlRlbXBsYXRlIHx8IChvcHRpb24uaGVhZCAmJiAhbG9va2FoZWFkLmhlYWQpKSB7CisgICAgICAg
ICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBt
YXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVRlbXBsYXRlRWxlbWVudCh7IHJhdzog
dG9rZW4udmFsdWUucmF3LCBjb29rZWQ6IHRva2VuLnZhbHVlLmNvb2tlZCB9LCB0b2tlbi50YWls
KSk7CisKKyAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7CisgICAgICAgIHRva2VuID0gbGV4KCk7
CisKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVGVtcGxhdGVFbGVtZW50KHsgcmF3OiB0b2tl
bi52YWx1ZS5yYXcsIGNvb2tlZDogdG9rZW4udmFsdWUuY29va2VkIH0sIHRva2VuLnRhaWwpOwog
ICAgIH0KIAogICAgIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCkgewotICAgICAgICB2
YXIgcXVhc2ksIHF1YXNpcywgZXhwcmVzc2lvbnMsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwor
ICAgICAgICB2YXIgcXVhc2ksIHF1YXNpcywgZXhwcmVzc2lvbnMsIG5vZGUgPSBuZXcgTm9kZSgp
OwogCiAgICAgICAgIHF1YXNpID0gcGFyc2VUZW1wbGF0ZUVsZW1lbnQoeyBoZWFkOiB0cnVlIH0p
OwotICAgICAgICBxdWFzaXMgPSBbIHF1YXNpIF07CisgICAgICAgIHF1YXNpcyA9IFtxdWFzaV07
CiAgICAgICAgIGV4cHJlc3Npb25zID0gW107CiAKICAgICAgICAgd2hpbGUgKCFxdWFzaS50YWls
KSB7CkBAIC0yNzg0LDEyNyArMzA5OSwyMTEgQEAKICAgICAgICAgICAgIHF1YXNpcy5wdXNoKHF1
YXNpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRl
bGVnYXRlLmNyZWF0ZVRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJlc3Npb25zKSk7CisgICAg
ICAgIHJldHVybiBub2RlLmZpbmlzaFRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJlc3Npb25z
KTsKICAgICB9CiAKLSAgICAvLyAxMS4xLjYgVGhlIEdyb3VwaW5nIE9wZXJhdG9yCisgICAgLy8g
RUNNQS0yNjIgMTIuMi4xMCBUaGUgR3JvdXBpbmcgT3BlcmF0b3IKIAogICAgIGZ1bmN0aW9uIHBh
cnNlR3JvdXBFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgZXhwcjsKKyAgICAgICAgdmFyIGV4
cHIsIGV4cHJlc3Npb25zLCBzdGFydFRva2VuLCBpLCBwYXJhbXMgPSBbXTsKIAogICAgICAgICBl
eHBlY3QoJygnKTsKIAotICAgICAgICArK3N0YXRlLnBhcmVudGhlc2l6ZWRDb3VudDsKLQotICAg
ICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIGlmIChtYXRjaCgnKScpKSB7
CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJz0+JykpIHsKKyAg
ICAgICAgICAgICAgICBleHBlY3QoJz0+Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFBsYWNlSG9sZGVycy5BcnJvd1BhcmFtZXRl
clBsYWNlSG9sZGVyLAorICAgICAgICAgICAgICAgIHBhcmFtczogW10sCisgICAgICAgICAgICAg
ICAgcmF3UGFyYW1zOiBbXQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQogCi0gICAgICAgIGV4
cGVjdCgnKScpOworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBpZiAo
bWF0Y2goJy4uLicpKSB7CisgICAgICAgICAgICBleHByID0gcGFyc2VSZXN0RWxlbWVudChwYXJh
bXMpOworICAgICAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCc9
PicpKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KCc9PicpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBQbGFjZUhvbGRlcnMuQXJy
b3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IFtleHByXQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBleHByOwotICAgIH0K
KyAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7CisgICAgICAgIGV4cHIgPSBpbmhlcml0
Q292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwogCisgICAgICAgIGlmICht
YXRjaCgnLCcpKSB7CisgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGV4cHJlc3Npb25zID0gW2V4cHJdOwogCi0gICAgLy8gMTEuMSBQcmltYXJ5IEV4
cHJlc3Npb25zCisgICAgICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkgeworICAg
ICAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkgeworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGV4KCk7CiAKLSAgICBmdW5j
dGlvbiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgbWFya2VyLCB0eXBl
LCB0b2tlbiwgZXhwcjsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2goJy4uLicpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNCaW5kaW5nRWxlbWVudCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHBhcnNlUmVzdEVs
ZW1lbnQocGFyYW1zKSk7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnKScpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1hdGNoKCc9PicpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3QoJz0+Jyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByZXNzaW9uc1tpXSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGU6IFBsYWNlSG9sZGVycy5BcnJvd1BhcmFtZXRlclBsYWNlSG9s
ZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBleHByZXNzaW9ucworICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0eXBlID0gbG9v
a2FoZWFkLnR5cGU7CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChpbmhlcml0Q292
ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgbWFy
a2VyID0gbWFya2VyQ3JlYXRlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFy
a2VyLCBkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKGxleCgpLnZhbHVlKSk7CisgICAgICAgICAg
ICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hTZXF1ZW5jZUV4cHJl
c3Npb24oZXhwcmVzc2lvbnMpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHR5cGUgPT09IFRv
a2VuLlN0cmluZ0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKLSAg
ICAgICAgICAgIGlmIChzdHJpY3QgJiYgbG9va2FoZWFkLm9jdGFsKSB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3dFcnJvclRvbGVyYW50KGxvb2thaGVhZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRl
cmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgp
OwotICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRl
TGl0ZXJhbChsZXgoKSkpOwotICAgICAgICB9CiAKLSAgICAgICAgaWYgKHR5cGUgPT09IFRva2Vu
LktleXdvcmQpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3RoaXMnKSkgewotICAg
ICAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIGxl
eCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRl
LmNyZWF0ZVRoaXNFeHByZXNzaW9uKCkpOwotICAgICAgICAgICAgfQorICAgICAgICBleHBlY3Qo
JyknKTsKIAotICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpOworICAgICAgICBp
ZiAobWF0Y2goJz0+JykpIHsKKyAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5J
ZGVudGlmaWVyICYmIGV4cHIubmFtZSA9PT0gJ3lpZWxkJykgeworICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFBsYWNlSG9sZGVycy5BcnJvd1BhcmFt
ZXRlclBsYWNlSG9sZGVyLAorICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtleHByXQorICAg
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtYXRjaEtl
eXdvcmQoJ2NsYXNzJykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0V4cHJl
c3Npb24oKTsKKyAgICAgICAgICAgIGlmICghaXNCaW5kaW5nRWxlbWVudCkgeworICAgICAgICAg
ICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3N1cGVyJykpIHsKLSAgICAgICAgICAgICAg
ICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVJZGVu
dGlmaWVyKCdzdXBlcicpKTsKKyAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5T
ZXF1ZW5jZUV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXhw
ci5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5leHByZXNzaW9uc1tpXSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZWludGVycHJl
dEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAot
ICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwpIHsKLSAgICAgICAgICAg
IG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwotICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAg
ICAgICAgICAgIHRva2VuLnZhbHVlID0gKHRva2VuLnZhbHVlID09PSAndHJ1ZScpOwotICAgICAg
ICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0
b2tlbikpOworICAgICAgICAgICAgZXhwciA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBQbGFj
ZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKKyAgICAgICAgICAgICAgICBwYXJh
bXM6IGV4cHIudHlwZSA9PT0gU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbiA/IGV4cHIuZXhwcmVz
c2lvbnMgOiBbZXhwcl0KKyAgICAgICAgICAgIH07CiAgICAgICAgIH0KKyAgICAgICAgaXNCaW5k
aW5nRWxlbWVudCA9IGZhbHNlOworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CiAKLSAgICAg
ICAgaWYgKHR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsKSB7Ci0gICAgICAgICAgICBtYXJrZXIg
PSBtYXJrZXJDcmVhdGUoKTsKLSAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Ci0gICAgICAgICAg
ICB0b2tlbi52YWx1ZSA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFy
a2VyLCBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKSk7CisKKyAgICAvLyBFQ01BLTI2MiAx
Mi4yIFByaW1hcnkgRXhwcmVzc2lvbnMKKworICAgIGZ1bmN0aW9uIHBhcnNlUHJpbWFyeUV4cHJl
c3Npb24oKSB7CisgICAgICAgIHZhciB0eXBlLCB0b2tlbiwgZXhwciwgbm9kZTsKKworICAgICAg
ICBpZiAobWF0Y2goJygnKSkgeworICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VHcm91cEV4cHJl
c3Npb24pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBp
bmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQXJyYXlJbml0aWFsaXplcik7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAobWF0Y2goJ3snKSkgewotICAgICAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0
SW5pdGlhbGlzZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBpbmhlcml0Q292ZXJHcmFtbWFyKHBh
cnNlT2JqZWN0SW5pdGlhbGl6ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1hdGNoKCco
JykpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpOwotICAgICAg
ICB9CisgICAgICAgIHR5cGUgPSBsb29rYWhlYWQudHlwZTsKKyAgICAgICAgbm9kZSA9IG5ldyBO
b2RlKCk7CiAKLSAgICAgICAgaWYgKG1hdGNoKCcvJykgfHwgbWF0Y2goJy89JykpIHsKLSAgICAg
ICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwotICAgICAgICAgICAgZXhwciA9IGRlbGVn
YXRlLmNyZWF0ZUxpdGVyYWwoc2NhblJlZ0V4cCgpKTsKLSAgICAgICAgICAgIHBlZWsoKTsKLSAg
ICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpOwotICAgICAgICB9Cisg
ICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAo
c3RhdGUuc291cmNlVHlwZSA9PT0gJ21vZHVsZScgJiYgbG9va2FoZWFkLnZhbHVlID09PSAnYXdh
aXQnKSB7CisgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFk
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4cHIgPSBub2RlLmZpbmlzaElkZW50aWZp
ZXIobGV4KCkudmFsdWUpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlN0cmlu
Z0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKKyAgICAgICAgICAg
IGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGlmIChzdHJpY3QgJiYgbG9va2FoZWFkLm9jdGFsKSB7CisgICAgICAgICAgICAgICAgdG9s
ZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVy
YWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwciA9IG5vZGUuZmluaXNoTGl0ZXJh
bChsZXgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewor
ICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgc3RhdGUuYWxsb3dZaWVsZCAmJiBtYXRjaEtleXdv
cmQoJ3lpZWxkJykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOb25Db21wdXRlZFBy
b3BlcnR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQg
PSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3Jk
KCdmdW5jdGlvbicpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHBy
ZXNzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCd0
aGlzJykpIHsKKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZS5maW5pc2hUaGlzRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG1hdGNoS2V5d29yZCgnY2xhc3MnKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJz
ZUNsYXNzRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dVbmV4
cGVjdGVkVG9rZW4obGV4KCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLkJv
b2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRp
bmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAg
ICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09ICd0cnVlJyk7CisgICAgICAgICAgICBl
eHByID0gbm9kZS5maW5pc2hMaXRlcmFsKHRva2VuKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBl
ID09PSBUb2tlbi5OdWxsTGl0ZXJhbCkgeworICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0
ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsK
KyAgICAgICAgICAgIHRva2VuLnZhbHVlID0gbnVsbDsKKyAgICAgICAgICAgIGV4cHIgPSBub2Rl
LmZpbmlzaExpdGVyYWwodG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcvJykgfHwg
bWF0Y2goJy89JykpIHsKKyAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGlu
Z0VsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGluZGV4ID0gc3RhcnRJbmRleDsKIAotICAg
ICAgICBpZiAodHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUpIHsKLSAgICAgICAgICAgIHJldHVybiBw
YXJzZVRlbXBsYXRlTGl0ZXJhbCgpOworICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS50b2tl
bnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBjb2xsZWN0UmVn
ZXgoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBzY2Fu
UmVnRXhwKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAg
IGV4cHIgPSBub2RlLmZpbmlzaExpdGVyYWwodG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKHR5
cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7CisgICAgICAgICAgICBleHByID0gcGFyc2VUZW1wbGF0
ZUxpdGVyYWwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3Rl
ZFRva2VuKGxleCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgo
KSk7CisgICAgICAgIHJldHVybiBleHByOwogICAgIH0KIAotICAgIC8vIDExLjIgTGVmdC1IYW5k
LVNpZGUgRXhwcmVzc2lvbnMKKyAgICAvLyBFQ01BLTI2MiAxMi4zIExlZnQtSGFuZC1TaWRlIEV4
cHJlc3Npb25zCiAKICAgICBmdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHsKLSAgICAgICAgdmFy
IGFyZ3MgPSBbXSwgYXJnOworICAgICAgICB2YXIgYXJncyA9IFtdLCBleHByOwogCiAgICAgICAg
IGV4cGVjdCgnKCcpOwogCiAgICAgICAgIGlmICghbWF0Y2goJyknKSkgewotICAgICAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgYXJnID0gcGFyc2VTcHJl
YWRPckFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgYXJncy5wdXNoKGFy
Zyk7Ci0KKyAgICAgICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1hdGNoKCcuLi4nKSkgeworICAgICAgICAgICAgICAgICAgICBleHByID0g
bmV3IE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAg
ICAgIGV4cHIuZmluaXNoU3ByZWFkRWxlbWVudChpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBleHByID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJncy5wdXNoKGV4
cHIpOwogICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKScpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnLnR5cGUgPT09IFN5bnRh
eC5TcHJlYWRFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLkVsZW1lbnRBZnRlclNwcmVhZEVsZW1lbnQpOwogICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgICAgIGV4cGVjdENvbW1h
U2VwYXJhdG9yKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMjkxMywyNCArMzMx
MiwxNiBAQAogICAgICAgICByZXR1cm4gYXJnczsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBwYXJz
ZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKSB7Ci0gICAgICAgIGlmIChtYXRjaCgnLi4u
JykpIHsKLSAgICAgICAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKLSAgICAgICAg
ICAgIGxleCgpOwotICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdh
dGUuY3JlYXRlU3ByZWFkRWxlbWVudChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAg
IH0KLQogICAgIGZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIHsKLSAgICAgICAg
dmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLAotICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsK
KyAgICAgICAgdmFyIHRva2VuLCBub2RlID0gbmV3IE5vZGUoKTsKKworICAgICAgICB0b2tlbiA9
IGxleCgpOwogCiAgICAgICAgIGlmICghaXNJZGVudGlmaWVyTmFtZSh0b2tlbikpIHsKLSAgICAg
ICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0
ZWRUb2tlbih0b2tlbik7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHko
bWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7CisgICAgICAg
IHJldHVybiBub2RlLmZpbmlzaElkZW50aWZpZXIodG9rZW4udmFsdWUpOwogICAgIH0KIAogICAg
IGZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSB7CkBAIC0yOTQ0LDEzNCArMzMzNSwx
OTUgQEAKIAogICAgICAgICBleHBlY3QoJ1snKTsKIAotICAgICAgICBleHByID0gcGFyc2VFeHBy
ZXNzaW9uKCk7CisgICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlRXhwcmVz
c2lvbik7CiAKICAgICAgICAgZXhwZWN0KCddJyk7CiAKICAgICAgICAgcmV0dXJuIGV4cHI7CiAg
ICAgfQogCisgICAgLy8gRUNNQS0yNjIgMTIuMy4zIFRoZSBuZXcgT3BlcmF0b3IKKwogICAgIGZ1
bmN0aW9uIHBhcnNlTmV3RXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIGNhbGxlZSwgYXJncywg
bWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgICAgIHZhciBjYWxsZWUsIGFyZ3MsIG5vZGUg
PSBuZXcgTm9kZSgpOwogCiAgICAgICAgIGV4cGVjdEtleXdvcmQoJ25ldycpOwotICAgICAgICBj
YWxsZWUgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKTsKKworICAgICAgICBpZiAobWF0
Y2goJy4nKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBpZiAobG9va2FoZWFk
LnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgJiYgbG9va2FoZWFkLnZhbHVlID09PSAndGFyZ2V0
JykgeworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pbkZ1bmN0aW9uQm9keSkgeworICAgICAg
ICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmlu
aXNoTWV0YVByb3BlcnR5KCduZXcnLCAndGFyZ2V0Jyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsK
KyAgICAgICAgfQorCisgICAgICAgIGNhbGxlZSA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VM
ZWZ0SGFuZFNpZGVFeHByZXNzaW9uKTsKICAgICAgICAgYXJncyA9IG1hdGNoKCcoJykgPyBwYXJz
ZUFyZ3VtZW50cygpIDogW107CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwg
ZGVsZWdhdGUuY3JlYXRlTmV3RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpKTsKKyAgICAgICAgaXNB
c3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworCisgICAgICAgIHJl
dHVybiBub2RlLmZpbmlzaE5ld0V4cHJlc3Npb24oY2FsbGVlLCBhcmdzKTsKICAgICB9CiAKKyAg
ICAvLyBFQ01BLTI2MiAxMi4zLjQgRnVuY3Rpb24gQ2FsbHMKKwogICAgIGZ1bmN0aW9uIHBhcnNl
TGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpIHsKLSAgICAgICAgdmFyIGV4cHIsIGFy
Z3MsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgICAgICB2YXIgcXVhc2ksIGV4cHIsIGFy
Z3MsIHByb3BlcnR5LCBzdGFydFRva2VuLCBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0lu
OwogCi0gICAgICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNz
aW9uKCkgOiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBs
b29rYWhlYWQ7CisgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworCisgICAgICAgIGlmICht
YXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKKyAgICAgICAg
ICAgIGV4cHIgPSBuZXcgTm9kZSgpOworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBl
eHByID0gZXhwci5maW5pc2hTdXBlcigpOworICAgICAgICAgICAgaWYgKCFtYXRjaCgnKCcpICYm
ICFtYXRjaCgnLicpICYmICFtYXRjaCgnWycpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dVbmV4
cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKG1hdGNoS2V5d29yZCgnbmV3
JykgPyBwYXJzZU5ld0V4cHJlc3Npb24gOiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKTsKKyAgICAg
ICAgfQogCi0gICAgICAgIHdoaWxlIChtYXRjaCgnLicpIHx8IG1hdGNoKCdbJykgfHwgbWF0Y2go
JygnKSB8fCBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUpIHsKLSAgICAgICAgICAg
IGlmIChtYXRjaCgnKCcpKSB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGlmICht
YXRjaCgnLicpKSB7CisgICAgICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgcHJvcGVydHkgPSBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCk7CisgICAgICAgICAgICAgICAg
ZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoTWVtYmVyRXhwcmVzc2lv
bignLicsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJygn
KSkgeworICAgICAgICAgICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBhcmdz
ID0gcGFyc2VBcmd1bWVudHMoKTsKLSAgICAgICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHko
bWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVDYWxsRXhwcmVzc2lvbihleHByLCBhcmdzKSk7CisgICAg
ICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoQ2Fs
bEV4cHJlc3Npb24oZXhwciwgYXJncyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCdb
JykpIHsKLSAgICAgICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0
ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcGFyc2VDb21wdXRlZE1lbWJlcigp
KSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcuJykpIHsKLSAgICAgICAgICAgICAg
ICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNz
aW9uKCcuJywgZXhwciwgcGFyc2VOb25Db21wdXRlZE1lbWJlcigpKSk7CisgICAgICAgICAgICAg
ICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlzQXNzaWdubWVu
dFRhcmdldCA9IHRydWU7CisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUNvbXB1dGVk
TWVtYmVyKCk7CisgICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRU
b2tlbikuZmluaXNoTWVtYmVyRXhwcmVzc2lvbignWycsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlICYmIGxv
b2thaGVhZC5oZWFkKSB7CisgICAgICAgICAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlTGl0
ZXJhbCgpOworICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9r
ZW4pLmZpbmlzaFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFzaSk7CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIs
IGRlbGVnYXRlLmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBwYXJzZVRlbXBs
YXRlTGl0ZXJhbCgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKIAogICAg
ICAgICByZXR1cm4gZXhwcjsKICAgICB9CiAKKyAgICAvLyBFQ01BLTI2MiAxMi4zIExlZnQtSGFu
ZC1TaWRlIEV4cHJlc3Npb25zCisKICAgICBmdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJl
c3Npb24oKSB7Ci0gICAgICAgIHZhciBleHByLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAg
ICAgICAgdmFyIHF1YXNpLCBleHByLCBwcm9wZXJ0eSwgc3RhcnRUb2tlbjsKKyAgICAgICAgYXNz
ZXJ0KHN0YXRlLmFsbG93SW4sICdjYWxsZWUgb2YgbmV3IGV4cHJlc3Npb24gYWx3YXlzIGFsbG93
IGluIGtleXdvcmQuJyk7CiAKLSAgICAgICAgZXhwciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBw
YXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAg
c3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdzdXBl
cicpICYmIHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7CisgICAgICAgICAgICBleHByID0gbmV3IE5v
ZGUoKTsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgZXhwciA9IGV4cHIuZmluaXNo
U3VwZXIoKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJ1snKSAmJiAhbWF0Y2goJy4nKSkgewor
ICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleHByID0gaW5oZXJpdENvdmVy
R3JhbW1hcihtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9uIDogcGFyc2VQ
cmltYXJ5RXhwcmVzc2lvbik7CisgICAgICAgIH0KIAotICAgICAgICB3aGlsZSAobWF0Y2goJy4n
KSB8fCBtYXRjaCgnWycpIHx8IGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkgewor
ICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBpZiAobWF0Y2goJ1snKSkgewotICAgICAg
ICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZU1lbWJl
ckV4cHJlc3Npb24oJ1snLCBleHByLCBwYXJzZUNvbXB1dGVkTWVtYmVyKCkpKTsKKyAgICAgICAg
ICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaXNBc3Np
Z25tZW50VGFyZ2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlQ29t
cHV0ZWRNZW1iZXIoKTsKKyAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShz
dGFydFRva2VuKS5maW5pc2hNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOwog
ICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnLicpKSB7Ci0gICAgICAgICAgICAgICAgZXhw
ciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbign
LicsIGV4cHIsIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGlz
QmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJn
ZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1l
bWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9r
ZW4pLmZpbmlzaE1lbWJlckV4cHJlc3Npb24oJy4nLCBleHByLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSAmJiBsb29r
YWhlYWQuaGVhZCkgeworICAgICAgICAgICAgICAgIHF1YXNpID0gcGFyc2VUZW1wbGF0ZUxpdGVy
YWwoKTsKKyAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2Vu
KS5maW5pc2hUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcXVhc2kpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBk
ZWxlZ2F0ZS5jcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcGFyc2VUZW1wbGF0
ZUxpdGVyYWwoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0KICAgICAgICAgcmV0dXJuIGV4cHI7CiAgICAgfQogCi0gICAgLy8gMTEuMyBQb3N0
Zml4IEV4cHJlc3Npb25zCisgICAgLy8gRUNNQS0yNjIgMTIuNCBQb3N0Zml4IEV4cHJlc3Npb25z
CiAKICAgICBmdW5jdGlvbiBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIg
bWFya2VyID0gbWFya2VyQ3JlYXRlKCksCi0gICAgICAgICAgICBleHByID0gcGFyc2VMZWZ0SGFu
ZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCksCi0gICAgICAgICAgICB0b2tlbjsKKyAgICAgICAg
dmFyIGV4cHIsIHRva2VuLCBzdGFydFRva2VuID0gbG9va2FoZWFkOwogCi0gICAgICAgIGlmIChs
b29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvcikgewotICAgICAgICAgICAgcmV0dXJu
IGV4cHI7Ci0gICAgICAgIH0KKyAgICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIocGFy
c2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKTsKIAotICAgICAgICBpZiAoKG1hdGNo
KCcrKycpIHx8IG1hdGNoKCctLScpKSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKLSAgICAg
ICAgICAgIC8vIDExLjMuMSwgMTEuMy4yCi0gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIu
dHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJp
Y3RMSFNQb3N0Zml4KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKCFoYXNMaW5lVGVybWlu
YXRvciAmJiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAg
ICAgaWYgKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSB7CisgICAgICAgICAgICAgICAgLy8g
RUNNQS0yNjIgMTEuMy4xLCAxMS4zLjIKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4
cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChleHByLm5h
bWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuU3RyaWN0
TEhTUG9zdGZpeCk7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWlzTGVm
dEhhbmRTaWRlKGV4cHIpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9sZXJh
dGVFcnJvcihNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Ci0gICAgICAgICAgICBleHByID0gbWFy
a2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVQb3N0Zml4RXhwcmVzc2lvbih0b2tlbi52
YWx1ZSwgZXhwcikpOworICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmlu
ZGluZ0VsZW1lbnQgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Cisg
ICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNo
UG9zdGZpeEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKICAgICAgICAgcmV0dXJuIGV4cHI7CiAgICAgfQogCi0gICAgLy8gMTEuNCBVbmFy
eSBPcGVyYXRvcnMKKyAgICAvLyBFQ01BLTI2MiAxMi41IFVuYXJ5IE9wZXJhdG9ycwogCiAgICAg
ZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBtYXJrZXIsIHRv
a2VuLCBleHByOworICAgICAgICB2YXIgdG9rZW4sIGV4cHIsIHN0YXJ0VG9rZW47CiAKICAgICAg
ICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC50
eXBlICE9PSBUb2tlbi5LZXl3b3JkKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VQb3N0Zml4
RXhwcmVzc2lvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNoKCcrKycpIHx8IG1h
dGNoKCctLScpKSB7Ci0gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICAg
ICAgICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7CisgICAgICAgIH0gZWxzZSBp
ZiAobWF0Y2goJysrJykgfHwgbWF0Y2goJy0tJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9rZW4g
PSBsb29rYWhlYWQ7CiAgICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAgICAgZXhw
ciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAvLyAxMS40LjQsIDExLjQu
NQorICAgICAgICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VVbmFyeUV4cHJl
c3Npb24pOworICAgICAgICAgICAgLy8gRUNNQS0yNjIgMTEuNC40LCAxMS40LjUKICAgICAgICAg
ICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jl
c3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9s
ZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1ByZWZpeCk7CisgICAgICAgICAgICAgICAgdG9s
ZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3RMSFNQcmVmaXgpOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGV4cHIpKSB7Ci0gICAgICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAgICAg
ICAgICBpZiAoIWlzQXNzaWdubWVudFRhcmdldCkgeworICAgICAgICAgICAgICAgIHRvbGVyYXRl
RXJyb3IoTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CiAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVVu
YXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcikpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1hdGNoKCcrJykgfHwgbWF0Y2goJy0nKSB8fCBtYXRjaCgnficpIHx8IG1hdGNoKCchJykp
IHsKLSAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgICAgICAgICAgZXhw
ciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoVW5hcnlFeHByZXNzaW9uKHRv
a2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmlu
ZGluZ0VsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKycpIHx8IG1h
dGNoKCctJykgfHwgbWF0Y2goJ34nKSB8fCBtYXRjaCgnIScpKSB7CisgICAgICAgICAgICBzdGFy
dFRva2VuID0gbG9va2FoZWFkOwogICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAg
ICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgcmV0dXJuIG1h
cmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZh
bHVlLCBleHByKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWxl
dGUnKSB8fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBtYXRjaEtleXdvcmQoJ3R5cGVvZicpKSB7
Ci0gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICAgICAgICAgIGV4cHIg
PSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTsKKyAgICAgICAgICAg
IGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFVuYXJ5RXhwcmVzc2lv
bih0b2tlbi52YWx1ZSwgZXhwcik7CisgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBp
c0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3Jk
KCdkZWxldGUnKSB8fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBtYXRjaEtleXdvcmQoJ3R5cGVv
ZicpKSB7CisgICAgICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwogICAgICAgICAgICAg
dG9rZW4gPSBsZXgoKTsKLSAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigp
OwotICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRl
VW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKSk7CisgICAgICAgICAgICBleHByID0g
aW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZVVuYXJ5RXhwcmVzc2lvbik7CisgICAgICAgICAgICBl
eHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hVbmFyeUV4cHJlc3Npb24o
dG9rZW4udmFsdWUsIGV4cHIpOwogICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLm9wZXJh
dG9yID09PSAnZGVsZXRlJyAmJiBleHByLmFyZ3VtZW50LnR5cGUgPT09IFN5bnRheC5JZGVudGlm
aWVyKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5T
dHJpY3REZWxldGUpOworICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuU3Ry
aWN0RGVsZXRlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBleHByOworICAg
ICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Np
b24oKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBwYXJzZVBvc3RmaXhFeHByZXNzaW9u
KCk7CisgICAgICAgIHJldHVybiBleHByOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIGJpbmFyeVBy
ZWNlZGVuY2UodG9rZW4sIGFsbG93SW4pIHsKQEAgLTMxNDUsMjE5ICszNTk3LDE4OSBAQAogICAg
ICAgICByZXR1cm4gcHJlYzsKICAgICB9CiAKLSAgICAvLyAxMS41IE11bHRpcGxpY2F0aXZlIE9w
ZXJhdG9ycwotICAgIC8vIDExLjYgQWRkaXRpdmUgT3BlcmF0b3JzCi0gICAgLy8gMTEuNyBCaXR3
aXNlIFNoaWZ0IE9wZXJhdG9ycwotICAgIC8vIDExLjggUmVsYXRpb25hbCBPcGVyYXRvcnMKLSAg
ICAvLyAxMS45IEVxdWFsaXR5IE9wZXJhdG9ycwotICAgIC8vIDExLjEwIEJpbmFyeSBCaXR3aXNl
IE9wZXJhdG9ycwotICAgIC8vIDExLjExIEJpbmFyeSBMb2dpY2FsIE9wZXJhdG9ycworICAgIC8v
IEVDTUEtMjYyIDEyLjYgTXVsdGlwbGljYXRpdmUgT3BlcmF0b3JzCisgICAgLy8gRUNNQS0yNjIg
MTIuNyBBZGRpdGl2ZSBPcGVyYXRvcnMKKyAgICAvLyBFQ01BLTI2MiAxMi44IEJpdHdpc2UgU2hp
ZnQgT3BlcmF0b3JzCisgICAgLy8gRUNNQS0yNjIgMTIuOSBSZWxhdGlvbmFsIE9wZXJhdG9ycwor
ICAgIC8vIEVDTUEtMjYyIDEyLjEwIEVxdWFsaXR5IE9wZXJhdG9ycworICAgIC8vIEVDTUEtMjYy
IDEyLjExIEJpbmFyeSBCaXR3aXNlIE9wZXJhdG9ycworICAgIC8vIEVDTUEtMjYyIDEyLjEyIEJp
bmFyeSBMb2dpY2FsIE9wZXJhdG9ycwogCiAgICAgZnVuY3Rpb24gcGFyc2VCaW5hcnlFeHByZXNz
aW9uKCkgewotICAgICAgICB2YXIgZXhwciwgdG9rZW4sIHByZWMsIHByZXZpb3VzQWxsb3dJbiwg
c3RhY2ssIHJpZ2h0LCBvcGVyYXRvciwgbGVmdCwgaSwKLSAgICAgICAgICAgIG1hcmtlciwgbWFy
a2VyczsKLQotICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luOwotICAgICAg
ICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKyAgICAgICAgdmFyIG1hcmtlciwgbWFya2VycywgZXhw
ciwgdG9rZW4sIHByZWMsIHN0YWNrLCByaWdodCwgb3BlcmF0b3IsIGxlZnQsIGk7CiAKLSAgICAg
ICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7Ci0gICAgICAgIGxlZnQgPSBwYXJzZVVuYXJ5RXhw
cmVzc2lvbigpOworICAgICAgICBtYXJrZXIgPSBsb29rYWhlYWQ7CisgICAgICAgIGxlZnQgPSBp
bmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTsKIAogICAgICAgICB0b2tl
biA9IGxvb2thaGVhZDsKLSAgICAgICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHBy
ZXZpb3VzQWxsb3dJbik7CisgICAgICAgIHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBz
dGF0ZS5hbGxvd0luKTsKICAgICAgICAgaWYgKHByZWMgPT09IDApIHsKICAgICAgICAgICAgIHJl
dHVybiBsZWZ0OwogICAgICAgICB9CisgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmlu
ZGluZ0VsZW1lbnQgPSBmYWxzZTsKICAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CiAgICAgICAg
IGxleCgpOwogCi0gICAgICAgIG1hcmtlcnMgPSBbbWFya2VyLCBtYXJrZXJDcmVhdGUoKV07Ci0g
ICAgICAgIHJpZ2h0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgbWFya2VycyA9
IFttYXJrZXIsIGxvb2thaGVhZF07CisgICAgICAgIHJpZ2h0ID0gaXNvbGF0ZUNvdmVyR3JhbW1h
cihwYXJzZVVuYXJ5RXhwcmVzc2lvbik7CiAKICAgICAgICAgc3RhY2sgPSBbbGVmdCwgdG9rZW4s
IHJpZ2h0XTsKIAotICAgICAgICB3aGlsZSAoKHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKGxvb2th
aGVhZCwgcHJldmlvdXNBbGxvd0luKSkgPiAwKSB7CisgICAgICAgIHdoaWxlICgocHJlYyA9IGJp
bmFyeVByZWNlZGVuY2UobG9va2FoZWFkLCBzdGF0ZS5hbGxvd0luKSkgPiAwKSB7CiAKICAgICAg
ICAgICAgIC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVl
IHRvcG1vc3QgZW50cmllcy4KICAgICAgICAgICAgIHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikg
JiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0ucHJlYykpIHsKICAgICAgICAgICAg
ICAgICByaWdodCA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gc3Rh
Y2sucG9wKCkudmFsdWU7CiAgICAgICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpOwotICAg
ICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVCaW5hcnlFeHByZXNzaW9uKG9wZXJh
dG9yLCBsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICAgICAgbWFya2Vycy5wb3AoKTsKLSAgICAg
ICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJzLnBvcCgpOwotICAgICAgICAgICAgICAgIG1hcmtl
ckFwcGx5KG1hcmtlciwgZXhwcik7CisgICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGlu
Z05vZGUobWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdKS5maW5pc2hCaW5hcnlFeHByZXNzaW9u
KG9wZXJhdG9yLCBsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChleHBy
KTsKLSAgICAgICAgICAgICAgICBtYXJrZXJzLnB1c2gobWFya2VyKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgLy8gU2hpZnQuCiAgICAgICAgICAgICB0b2tlbiA9IGxleCgpOwogICAg
ICAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CiAgICAgICAgICAgICBzdGFjay5wdXNoKHRva2Vu
KTsKLSAgICAgICAgICAgIG1hcmtlcnMucHVzaChtYXJrZXJDcmVhdGUoKSk7Ci0gICAgICAgICAg
ICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIG1hcmtlcnMucHVz
aChsb29rYWhlYWQpOworICAgICAgICAgICAgZXhwciA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFy
c2VVbmFyeUV4cHJlc3Npb24pOwogICAgICAgICAgICAgc3RhY2sucHVzaChleHByKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47Ci0KICAgICAg
ICAgLy8gRmluYWwgcmVkdWNlIHRvIGNsZWFuLXVwIHRoZSBzdGFjay4KICAgICAgICAgaSA9IHN0
YWNrLmxlbmd0aCAtIDE7CiAgICAgICAgIGV4cHIgPSBzdGFja1tpXTsKICAgICAgICAgbWFya2Vy
cy5wb3AoKTsKICAgICAgICAgd2hpbGUgKGkgPiAxKSB7Ci0gICAgICAgICAgICBleHByID0gZGVs
ZWdhdGUuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0YWNrW2kg
LSAyXSwgZXhwcik7CisgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShtYXJrZXJz
LnBvcCgpKS5maW5pc2hCaW5hcnlFeHByZXNzaW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tb
aSAtIDJdLCBleHByKTsKICAgICAgICAgICAgIGkgLT0gMjsKLSAgICAgICAgICAgIG1hcmtlciA9
IG1hcmtlcnMucG9wKCk7Ci0gICAgICAgICAgICBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpOwog
ICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGV4cHI7CiAgICAgfQogCiAKLSAgICAvLyAxMS4x
MiBDb25kaXRpb25hbCBPcGVyYXRvcgorICAgIC8vIEVDTUEtMjYyIDEyLjEzIENvbmRpdGlvbmFs
IE9wZXJhdG9yCiAKICAgICBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHsK
LSAgICAgICAgdmFyIGV4cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRl
LCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKLSAgICAgICAgZXhwciA9IHBhcnNlQmluYXJ5RXhw
cmVzc2lvbigpOworICAgICAgICB2YXIgZXhwciwgcHJldmlvdXNBbGxvd0luLCBjb25zZXF1ZW50
LCBhbHRlcm5hdGUsIHN0YXJ0VG9rZW47CiAKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVh
ZDsKKworICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUJpbmFyeUV4cHJl
c3Npb24pOwogICAgICAgICBpZiAobWF0Y2goJz8nKSkgewogICAgICAgICAgICAgbGV4KCk7CiAg
ICAgICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luOwogICAgICAgICAgICAg
c3RhdGUuYWxsb3dJbiA9IHRydWU7Ci0gICAgICAgICAgICBjb25zZXF1ZW50ID0gcGFyc2VBc3Np
Z25tZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgY29uc2VxdWVudCA9IGlzb2xhdGVDb3Zl
ckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CiAgICAgICAgICAgICBzdGF0ZS5h
bGxvd0luID0gcHJldmlvdXNBbGxvd0luOwogICAgICAgICAgICAgZXhwZWN0KCc6Jyk7Ci0gICAg
ICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAg
ICAgICBhbHRlcm5hdGUgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pOwogCi0gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0
ZS5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRl
KSk7CisgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5p
c2hDb25kaXRpb25hbEV4cHJlc3Npb24oZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTsKKyAg
ICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsK
ICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBleHByOwogICAgIH0KIAotICAgIC8vIDExLjEz
IEFzc2lnbm1lbnQgT3BlcmF0b3JzCi0KLSAgICAvLyAxMi4xNC41IEFzc2lnbm1lbnRQYXR0ZXJu
CisgICAgLy8gRUNNQS0yNjIgMTQuMiBBcnJvdyBGdW5jdGlvbiBEZWZpbml0aW9ucwogCi0gICAg
ZnVuY3Rpb24gcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihleHByKSB7Ci0g
ICAgICAgIHZhciBpLCBsZW4sIHByb3BlcnR5LCBlbGVtZW50OwotCi0gICAgICAgIGlmIChleHBy
LnR5cGUgPT09IFN5bnRheC5PYmplY3RFeHByZXNzaW9uKSB7Ci0gICAgICAgICAgICBleHByLnR5
cGUgPSBTeW50YXguT2JqZWN0UGF0dGVybjsKLSAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9
IGV4cHIucHJvcGVydGllcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkgewotICAgICAgICAgICAg
ICAgIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgICAgIGlmIChw
cm9wZXJ0eS5raW5kICE9PSAnaW5pdCcpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4o
cHJvcGVydHkudmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGV4cHIu
dHlwZSA9PT0gU3ludGF4LkFycmF5RXhwcmVzc2lvbikgewotICAgICAgICAgICAgZXhwci50eXBl
ID0gU3ludGF4LkFycmF5UGF0dGVybjsKLSAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4
cHIuZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKLSAgICAgICAgICAgICAgICBl
bGVtZW50ID0gZXhwci5lbGVtZW50c1tpXTsKLSAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBp
Z25vcmUgZWxzZSAqLwotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZWxlbWVudCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGV4
cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIGlmIChpc1Jlc3Ry
aWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5TcHJlYWRFbGVtZW50KSB7Ci0gICAgICAg
ICAgICByZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKGV4cHIuYXJndW1lbnQp
OwotICAgICAgICAgICAgaWYgKGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4Lk9iamVjdFBh
dHRlcm4pIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5PYmplY3RQ
YXR0ZXJuQXNTcHJlYWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8KLSAgICAgICAgICAgIGlmIChleHByLnR5
cGUgIT09IFN5bnRheC5NZW1iZXJFeHByZXNzaW9uICYmIGV4cHIudHlwZSAhPT0gU3ludGF4LkNh
bGxFeHByZXNzaW9uICYmIGV4cHIudHlwZSAhPT0gU3ludGF4Lk5ld0V4cHJlc3Npb24pIHsKLSAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25t
ZW50KTsKLSAgICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBwYXJzZUNvbmNpc2VCb2R5KCkgewor
ICAgICAgICBpZiAobWF0Y2goJ3snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rp
b25Tb3VyY2VFbGVtZW50cygpOwogICAgICAgICB9CisgICAgICAgIHJldHVybiBpc29sYXRlQ292
ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwogICAgIH0KIAotICAgIC8vIDEz
LjIuMyBCaW5kaW5nUGF0dGVybgotCi0gICAgZnVuY3Rpb24gcmVpbnRlcnByZXRBc0Rlc3RydWN0
dXJlZFBhcmFtZXRlcihvcHRpb25zLCBleHByKSB7Ci0gICAgICAgIHZhciBpLCBsZW4sIHByb3Bl
cnR5LCBlbGVtZW50OwotCi0gICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5PYmplY3RF
eHByZXNzaW9uKSB7Ci0gICAgICAgICAgICBleHByLnR5cGUgPSBTeW50YXguT2JqZWN0UGF0dGVy
bjsKLSAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHIucHJvcGVydGllcy5sZW5ndGg7
IGkgPCBsZW47IGkgKz0gMSkgewotICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gZXhwci5wcm9w
ZXJ0aWVzW2ldOwotICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5raW5kICE9PSAnaW5pdCcp
IHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZExI
U0luRm9ybWFsc0xpc3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZWlu
dGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHByb3BlcnR5LnZhbHVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5B
cnJheUV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgIGV4cHIudHlwZSA9IFN5bnRheC5BcnJheVBh
dHRlcm47Ci0gICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLmVsZW1lbnRzLmxlbmd0
aDsgaSA8IGxlbjsgaSArPSAxKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudCA9IGV4cHIuZWxl
bWVudHNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBlbGVtZW50
KTsKKyAgICBmdW5jdGlvbiBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbSkgeworICAg
ICAgICB2YXIgaTsKKyAgICAgICAgc3dpdGNoIChwYXJhbS50eXBlKSB7CisgICAgICAgIGNhc2Ug
U3ludGF4LklkZW50aWZpZXI6CisgICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBh
cmFtLCBwYXJhbS5uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN5bnRh
eC5SZXN0RWxlbWVudDoKKyAgICAgICAgICAgIGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBh
cmFtLmFyZ3VtZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN5bnRheC5B
c3NpZ25tZW50UGF0dGVybjoKKyAgICAgICAgICAgIGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMs
IHBhcmFtLmxlZnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3ludGF4LkFy
cmF5UGF0dGVybjoKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJhbS5lbGVtZW50cy5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChwYXJhbS5lbGVtZW50c1tpXSAhPT0g
bnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBw
YXJhbS5lbGVtZW50c1tpXSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAg
ICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgZXhwciwgZXhwci5uYW1lKTsKLSAgICAgICAg
fSBlbHNlIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5TcHJlYWRFbGVtZW50KSB7Ci0gICAgICAg
ICAgICAvLyBCaW5kaW5nUmVzdEVsZW1lbnQgb25seSBhbGxvd3MgQmluZGluZ0lkZW50aWZpZXIK
LSAgICAgICAgICAgIGlmIChleHByLmFyZ3VtZW50LnR5cGUgIT09IFN5bnRheC5JZGVudGlmaWVy
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZExIU0lu
Rm9ybWFsc0xpc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3ludGF4Lllp
ZWxkRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYXNzZXJ0KHBhcmFtLnR5cGUgPT09IFN5bnRheC5PYmplY3RQYXR0ZXJuLCAnSW52
YWxpZCB0eXBlJyk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW0ucHJvcGVydGll
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGNoZWNrUGF0dGVyblBhcmFtKG9wdGlv
bnMsIHBhcmFtLnByb3BlcnRpZXNbaV0udmFsdWUpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBleHByLmFyZ3VtZW50LCBleHByLmFyZ3VtZW50Lm5h
bWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuSW52YWxpZExIU0luRm9ybWFsc0xpc3QpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CisgICAgZnVuY3Rpb24gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoZXhw
cikgeworICAgICAgICB2YXIgaSwgbGVuLCBwYXJhbSwgcGFyYW1zLCBkZWZhdWx0cywgZGVmYXVs
dENvdW50LCBvcHRpb25zLCB0b2tlbjsKIAotICAgIGZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNDb3Zl
ckZvcm1hbHNMaXN0KGV4cHJlc3Npb25zKSB7Ci0gICAgICAgIHZhciBpLCBsZW4sIHBhcmFtLCBw
YXJhbXMsIGRlZmF1bHRzLCBkZWZhdWx0Q291bnQsIG9wdGlvbnMsIHJlc3Q7Ci0KLSAgICAgICAg
cGFyYW1zID0gW107CiAgICAgICAgIGRlZmF1bHRzID0gW107CiAgICAgICAgIGRlZmF1bHRDb3Vu
dCA9IDA7Ci0gICAgICAgIHJlc3QgPSBudWxsOworICAgICAgICBwYXJhbXMgPSBbZXhwcl07CisK
KyAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHsKKyAgICAgICAgY2FzZSBTeW50YXguSWRlbnRp
ZmllcjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBsYWNlSG9sZGVycy5BcnJv
d1BhcmFtZXRlclBsYWNlSG9sZGVyOgorICAgICAgICAgICAgcGFyYW1zID0gZXhwci5wYXJhbXM7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICB9CisKICAgICAgICAgb3B0aW9ucyA9IHsKLSAgICAgICAgICAgIHBh
cmFtU2V0OiBuZXcgU3RyaW5nTWFwKCkKKyAgICAgICAgICAgIHBhcmFtU2V0OiB7fQogICAgICAg
ICB9OwogCi0gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8
IGxlbjsgaSArPSAxKSB7Ci0gICAgICAgICAgICBwYXJhbSA9IGV4cHJlc3Npb25zW2ldOwotICAg
ICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAgICAg
ICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pOwotICAgICAgICAgICAgICAgIGRlZmF1bHRzLnB1
c2gobnVsbCk7Ci0gICAgICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbSwg
cGFyYW0ubmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IFN5bnRh
eC5PYmplY3RFeHByZXNzaW9uIHx8IHBhcmFtLnR5cGUgPT09IFN5bnRheC5BcnJheUV4cHJlc3Np
b24pIHsKLSAgICAgICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVy
KG9wdGlvbnMsIHBhcmFtKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7Ci0g
ICAgICAgICAgICAgICAgZGVmYXVsdHMucHVzaChudWxsKTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAocGFyYW0udHlwZSA9PT0gU3ludGF4LlNwcmVhZEVsZW1lbnQpIHsKLSAgICAgICAgICAgICAg
ICBhc3NlcnQoaSA9PT0gbGVuIC0gMSwgJ0l0IGlzIGd1YXJhbnRlZWQgdGhhdCBTcHJlYWRFbGVt
ZW50IGlzIGxhc3QgZWxlbWVudCBieSBwYXJzZUV4cHJlc3Npb24nKTsKLSAgICAgICAgICAgICAg
ICBpZiAocGFyYW0uYXJndW1lbnQudHlwZSAhPT0gU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ybWFs
c0xpc3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZWludGVycHJldEFz
RGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50KTsKLSAgICAgICAg
ICAgICAgICByZXN0ID0gcGFyYW0uYXJndW1lbnQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBh
cmFtLnR5cGUgPT09IFN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbikgewotICAgICAgICAgICAg
ICAgIHBhcmFtcy5wdXNoKHBhcmFtLmxlZnQpOworICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBw
YXJhbXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAgICAgIHBhcmFtID0gcGFy
YW1zW2ldOworICAgICAgICAgICAgc3dpdGNoIChwYXJhbS50eXBlKSB7CisgICAgICAgICAgICBj
YXNlIFN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjoKKyAgICAgICAgICAgICAgICBwYXJhbXNbaV0g
PSBwYXJhbS5sZWZ0OworICAgICAgICAgICAgICAgIGlmIChwYXJhbS5yaWdodC50eXBlID09PSBT
eW50YXguWWllbGRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5y
aWdodC5hcmd1bWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVk
VG9rZW4obG9va2FoZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBwYXJhbS5yaWdodC50eXBlID0gU3ludGF4LklkZW50aWZpZXI7CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtLnJpZ2h0Lm5hbWUgPSAneWllbGQnOworICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgcGFyYW0ucmlnaHQuYXJndW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBw
YXJhbS5yaWdodC5kZWxlZ2F0ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ZGVmYXVsdHMucHVzaChwYXJhbS5yaWdodCk7CiAgICAgICAgICAgICAgICAgKytkZWZhdWx0Q291
bnQ7Ci0gICAgICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbS5sZWZ0LCBw
YXJhbS5sZWZ0Lm5hbWUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBw
YXJhbS5sZWZ0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0pOworICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IHBhcmFtOworICAgICAgICAgICAgICAgIGRlZmF1bHRz
LnB1c2gobnVsbCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc3RyaWN0IHx8ICFzdGF0ZS5hbGxvd1lpZWxkKSB7CisgICAg
ICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJhbXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEp
IHsKKyAgICAgICAgICAgICAgICBwYXJhbSA9IHBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICBp
ZiAocGFyYW0udHlwZSA9PT0gU3ludGF4LllpZWxkRXhwcmVzc2lvbikgeworICAgICAgICAgICAg
ICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChvcHRpb25zLm1lc3Nh
Z2UgPT09IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZSkgewotICAgICAgICAgICAgdGhyb3dFcnJv
cigKLSAgICAgICAgICAgICAgICBzdHJpY3QgPyBvcHRpb25zLnN0cmljdGVkIDogb3B0aW9ucy5m
aXJzdFJlc3RyaWN0ZWQsCi0gICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlCi0gICAgICAg
ICAgICApOworICAgICAgICAgICAgdG9rZW4gPSBzdHJpY3QgPyBvcHRpb25zLnN0cmljdGVkIDog
b3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQ7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tl
bih0b2tlbiwgb3B0aW9ucy5tZXNzYWdlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChkZWZh
dWx0Q291bnQgPT09IDApIHsKQEAgLTMzNjcsMTcxICszNzg5LDE4OSBAQAogICAgICAgICByZXR1
cm4gewogICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCiAgICAgICAgICAgICBkZWZhdWx0czog
ZGVmYXVsdHMsCi0gICAgICAgICAgICByZXN0OiByZXN0LAogICAgICAgICAgICAgc3RyaWN0ZWQ6
IG9wdGlvbnMuc3RyaWN0ZWQsCiAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMu
Zmlyc3RSZXN0cmljdGVkLAogICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlCiAg
ICAgICAgIH07CiAgICAgfQogCi0gICAgZnVuY3Rpb24gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVz
c2lvbihvcHRpb25zLCBtYXJrZXIpIHsKLSAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0LCBwcmV2
aW91c1lpZWxkQWxsb3dlZCwgYm9keTsKKyAgICBmdW5jdGlvbiBwYXJzZUFycm93RnVuY3Rpb25F
eHByZXNzaW9uKG9wdGlvbnMsIG5vZGUpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0LCBw
cmV2aW91c0FsbG93WWllbGQsIGJvZHk7CiAKKyAgICAgICAgaWYgKGhhc0xpbmVUZXJtaW5hdG9y
KSB7CisgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOworICAg
ICAgICB9CiAgICAgICAgIGV4cGVjdCgnPT4nKTsKIAogICAgICAgICBwcmV2aW91c1N0cmljdCA9
IHN0cmljdDsKLSAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93
ZWQ7Ci0gICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGZhbHNlOworICAgICAgICBwcmV2aW91
c0FsbG93WWllbGQgPSBzdGF0ZS5hbGxvd1lpZWxkOworICAgICAgICBzdGF0ZS5hbGxvd1lpZWxk
ID0gdHJ1ZTsKKwogICAgICAgICBib2R5ID0gcGFyc2VDb25jaXNlQm9keSgpOwogCiAgICAgICAg
IGlmIChzdHJpY3QgJiYgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgIHRo
cm93RXJyb3Iob3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsIG9wdGlvbnMubWVzc2FnZSk7CisgICAg
ICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCwgb3B0
aW9ucy5tZXNzYWdlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoc3RyaWN0ICYmIG9wdGlvbnMu
c3RyaWN0ZWQpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChvcHRpb25zLnN0cmlj
dGVkLCBvcHRpb25zLm1lc3NhZ2UpOworICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9r
ZW4ob3B0aW9ucy5zdHJpY3RlZCwgb3B0aW9ucy5tZXNzYWdlKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQg
PSBwcmV2aW91c1lpZWxkQWxsb3dlZDsKKyAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZp
b3VzQWxsb3dZaWVsZDsKIAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxl
Z2F0ZS5jcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbigKLSAgICAgICAgICAgIG9wdGlvbnMu
cGFyYW1zLAotICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0cywKLSAgICAgICAgICAgIGJvZHks
Ci0gICAgICAgICAgICBvcHRpb25zLnJlc3QsCi0gICAgICAgICAgICBib2R5LnR5cGUgIT09IFN5
bnRheC5CbG9ja1N0YXRlbWVudAotICAgICAgICApKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmlu
aXNoQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ob3B0aW9ucy5wYXJhbXMsIG9wdGlvbnMuZGVmYXVs
dHMsIGJvZHksIGJvZHkudHlwZSAhPT0gU3ludGF4LkJsb2NrU3RhdGVtZW50KTsKICAgICB9CiAK
LSAgICBmdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIg
bWFya2VyLCBleHByLCB0b2tlbiwgcGFyYW1zLCBvbGRQYXJlbnRoZXNpemVkQ291bnQsCi0gICAg
ICAgICAgICBzdGFydHNXaXRoUGFyZW4gPSBmYWxzZTsKKyAgICAvLyBFQ01BLTI2MiAxNC40IFlp
ZWxkIGV4cHJlc3Npb24KIAotICAgICAgICAvLyBOb3RlIHRoYXQgJ3lpZWxkJyBpcyB0cmVhdGVk
IGFzIGEga2V5d29yZCBpbiBzdHJpY3QgbW9kZSwgYnV0IGEKLSAgICAgICAgLy8gY29udGV4dHVh
bCBrZXl3b3JkIChpZGVudGlmaWVyKSBpbiBub24tc3RyaWN0IG1vZGUsIHNvIHdlIG5lZWQKLSAg
ICAgICAgLy8gdG8gdXNlIG1hdGNoS2V5d29yZCBhbmQgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCBh
cHByb3ByaWF0ZWx5LgotICAgICAgICBpZiAoKHN0YXRlLnlpZWxkQWxsb3dlZCAmJiBtYXRjaENv
bnRleHR1YWxLZXl3b3JkKCd5aWVsZCcpKSB8fCAoc3RyaWN0ICYmIG1hdGNoS2V5d29yZCgneWll
bGQnKSkpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVlpZWxkRXhwcmVzc2lvbigpOwotICAg
ICAgICB9CisgICAgZnVuY3Rpb24gcGFyc2VZaWVsZEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZh
ciBhcmd1bWVudCwgZXhwciwgZGVsZWdhdGUsIHByZXZpb3VzQWxsb3dZaWVsZDsKIAotICAgICAg
ICBvbGRQYXJlbnRoZXNpemVkQ291bnQgPSBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQ7CisgICAg
ICAgIGFyZ3VtZW50ID0gbnVsbDsKKyAgICAgICAgZXhwciA9IG5ldyBOb2RlKCk7CiAKLSAgICAg
ICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3lpZWxk
Jyk7CiAKLSAgICAgICAgaWYgKG1hdGNoKCcoJykpIHsKLSAgICAgICAgICAgIHRva2VuID0gbG9v
a2FoZWFkMigpOwotICAgICAgICAgICAgaWYgKCh0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVh
dG9yICYmIHRva2VuLnZhbHVlID09PSAnKScpIHx8IHRva2VuLnZhbHVlID09PSAnLi4uJykgewot
ICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtYXRjaCgnPT4nKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQo
bGV4KCkpOworICAgICAgICBpZiAoIWhhc0xpbmVUZXJtaW5hdG9yKSB7CisgICAgICAgICAgICBw
cmV2aW91c0FsbG93WWllbGQgPSBzdGF0ZS5hbGxvd1lpZWxkOworICAgICAgICAgICAgc3RhdGUu
YWxsb3dZaWVsZCA9IGZhbHNlOworICAgICAgICAgICAgZGVsZWdhdGUgPSBtYXRjaCgnKicpOwor
ICAgICAgICAgICAgaWYgKGRlbGVnYXRlKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAg
ICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJzsnKSAmJiAhbWF0
Y2goJ30nKSAmJiAhbWF0Y2goJyknKSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7
CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bigpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJv
d0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIG1hcmtlcik7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBzdGFydHNXaXRoUGFyZW4gPSB0cnVlOworICAgICAgICAgICAgc3RhdGUuYWxsb3dZ
aWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKICAgICAgICAgfQogCisgICAgICAgIHJldHVybiBl
eHByLmZpbmlzaFlpZWxkRXhwcmVzc2lvbihhcmd1bWVudCwgZGVsZWdhdGUpOworICAgIH0KKwor
ICAgIC8vIEVDTUEtMjYyIDEyLjE0IEFzc2lnbm1lbnQgT3BlcmF0b3JzCisKKyAgICBmdW5jdGlv
biBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgdG9rZW4sIGV4cHIs
IHJpZ2h0LCBsaXN0LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7CiAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGlmICghc3RhdGUuYWxs
b3dZaWVsZCAmJiBtYXRjaEtleXdvcmQoJ3lpZWxkJykpIHsKKyAgICAgICAgICAgIHJldHVybiBw
YXJzZVlpZWxkRXhwcmVzc2lvbigpOworICAgICAgICB9CisKICAgICAgICAgZXhwciA9IHBhcnNl
Q29uZGl0aW9uYWxFeHByZXNzaW9uKCk7CiAKLSAgICAgICAgaWYgKG1hdGNoKCc9PicpICYmCi0g
ICAgICAgICAgICAgICAgKHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudCA9PT0gb2xkUGFyZW50aGVz
aXplZENvdW50IHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUucGFyZW50aGVzaXplZENvdW50ID09
PSAob2xkUGFyZW50aGVzaXplZENvdW50ICsgMSkpKSB7Ci0gICAgICAgICAgICBpZiAoZXhwci50
eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgewotICAgICAgICAgICAgICAgIHBhcmFtcyA9IHJl
aW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KFsgZXhwciBdKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZXhwci50eXBlID09PSBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24gfHwKLSAgICAg
ICAgICAgICAgICAgICAgZXhwci50eXBlID09PSBTeW50YXguQXJyYXlFeHByZXNzaW9uIHx8Ci0g
ICAgICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24p
IHsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0c1dpdGhQYXJlbikgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBwYXJhbXMgPSByZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChbIGV4cHIg
XSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4LlNlcXVlbmNl
RXhwcmVzc2lvbikgewotICAgICAgICAgICAgICAgIHBhcmFtcyA9IHJlaW50ZXJwcmV0QXNDb3Zl
ckZvcm1hbHNMaXN0KGV4cHIuZXhwcmVzc2lvbnMpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKHBhcmFtcykgewotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUFycm93RnVuY3Rp
b25FeHByZXNzaW9uKHBhcmFtcywgbWFya2VyKTsKKyAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0g
UGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIgfHwgbWF0Y2goJz0+JykpIHsK
KyAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGxpc3QgPSByZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChleHBy
KTsKKworICAgICAgICAgICAgaWYgKGxpc3QpIHsKKyAgICAgICAgICAgICAgICBmaXJzdENvdmVy
SW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOworICAgICAgICAgICAgICAgIHJldHVybiBwYXJz
ZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKGxpc3QsIG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tl
bikpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwcjsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChtYXRjaEFzc2lnbigpKSB7Ci0gICAgICAgICAgICAvLyAxMS4xMy4x
Ci0gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZp
ZXIgJiYgaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgdGhy
b3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RMSFNBc3NpZ25tZW50KTsKKyAg
ICAgICAgICAgIGlmICghaXNBc3NpZ25tZW50VGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgdG9s
ZXJhdGVFcnJvcihNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gRUNNQS0yNjIgMTIuMS4xCisgICAgICAgICAgICBpZiAoc3Ry
aWN0ICYmIGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAg
IHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5TdHJpY3RMSFNBc3NpZ25t
ZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlzU3RyaWN0TW9k
ZVJlc2VydmVkV29yZChleHByLm5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gRVMubmV4dCBk
cmFmIDExLjEzIFJ1bnRpbWUgU2VtYW50aWNzIHN0ZXAgMQotICAgICAgICAgICAgaWYgKG1hdGNo
KCc9JykgJiYgKGV4cHIudHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgZXhwci50
eXBlID09PSBTeW50YXguQXJyYXlFeHByZXNzaW9uKSkgewotICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZXhwcik7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJy
b3Ioe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgaWYg
KCFtYXRjaCgnPScpKSB7CisgICAgICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNC
aW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcik7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0
ZUFzc2lnbm1lbnRFeHByZXNzaW9uKGxleCgpLnZhbHVlLCBleHByLCBwYXJzZUFzc2lnbm1lbnRF
eHByZXNzaW9uKCkpKTsKKyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICBy
aWdodCA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Cisg
ICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hBc3Np
Z25tZW50RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwciwgcmlnaHQpOworICAgICAgICAgICAg
Zmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsKICAgICAgICAgfQogCiAgICAg
ICAgIHJldHVybiBleHByOwogICAgIH0KIAotICAgIC8vIDExLjE0IENvbW1hIE9wZXJhdG9yCisg
ICAgLy8gRUNNQS0yNjIgMTIuMTUgQ29tbWEgT3BlcmF0b3IKIAogICAgIGZ1bmN0aW9uIHBhcnNl
RXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIG1hcmtlciwgZXhwciwgZXhwcmVzc2lvbnMsIHNl
cXVlbmNlLCBzcHJlYWRGb3VuZDsKKyAgICAgICAgdmFyIGV4cHIsIHN0YXJ0VG9rZW4gPSBsb29r
YWhlYWQsIGV4cHJlc3Npb25zOwogCi0gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwot
ICAgICAgICBleHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICBleHBy
ZXNzaW9ucyA9IFsgZXhwciBdOworICAgICAgICBleHByID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKIAogICAgICAgICBpZiAobWF0Y2goJywnKSkgewot
ICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBleHByZXNz
aW9ucyA9IFtleHByXTsKKworICAgICAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgp
IHsKICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgbGV4KCk7Ci0g
ICAgICAgICAgICAgICAgZXhwciA9IHBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbigp
OwotICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcik7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoZXhwci50eXBlID09PSBTeW50YXguU3ByZWFkRWxlbWVudCkgewotICAgICAgICAg
ICAgICAgICAgICBzcHJlYWRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
bWF0Y2goJyknKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuRWxlbWVudEFmdGVyU3ByZWFkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGV4cHJlc3Npb25zLnB1c2goaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1l
bnRFeHByZXNzaW9uKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNlcXVlbmNlID0g
bWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb24oZXhw
cmVzc2lvbnMpKTsKKyAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9r
ZW4pLmZpbmlzaFNlcXVlbmNlRXhwcmVzc2lvbihleHByZXNzaW9ucyk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoc3ByZWFkRm91bmQgJiYgbG9va2FoZWFkMigpLnZhbHVlICE9PSAnPT4nKSB7
Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsU3ByZWFkKTsKKyAg
ICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gRUNNQS0yNjIgMTMuMiBCbG9jawor
CisgICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpIHsKKyAgICAgICAgaWYgKGxv
b2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGxv
b2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAgY2FzZSAnZXhwb3J0JzoKKyAgICAgICAgICAg
ICAgICBpZiAoc3RhdGUuc291cmNlVHlwZSAhPT0gJ21vZHVsZScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkLCBNZXNzYWdlcy5JbGxlZ2Fs
RXhwb3J0RGVjbGFyYXRpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VFeHBvcnREZWNsYXJhdGlvbigpOworICAgICAgICAgICAgY2FzZSAnaW1wb3J0
JzoKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc291cmNlVHlwZSAhPT0gJ21vZHVsZScpIHsK
KyAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkLCBN
ZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbXBvcnREZWNsYXJhdGlvbigpOworICAgICAgICAg
ICAgY2FzZSAnY29uc3QnOgorICAgICAgICAgICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VMZXhpY2FsRGVjbGFyYXRpb24oe2luRm9yOiBmYWxzZX0pOworICAgICAg
ICAgICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0
aW9uRGVjbGFyYXRpb24obmV3IE5vZGUoKSk7CisgICAgICAgICAgICBjYXNlICdjbGFzcyc6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2xhc3NEZWNsYXJhdGlvbigpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNlcXVlbmNlIHx8IGV4cHI7CisgICAg
ICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpOwogICAgIH0KIAotICAgIC8vIDEyLjEgQmxvY2sK
LQogICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdCgpIHsKLSAgICAgICAgdmFyIGxpc3Qg
PSBbXSwKLSAgICAgICAgICAgIHN0YXRlbWVudDsKLQotICAgICAgICB3aGlsZSAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgICAgdmFyIGxpc3QgPSBbXTsKKyAgICAgICAgd2hpbGUgKHN0YXJ0SW5k
ZXggPCBsZW5ndGgpIHsKICAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZW1lbnQgPSBwYXJz
ZVNvdXJjZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09PSAn
dW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbGlzdC5wdXNoKHN0YXRlbWVudCk7CisgICAgICAgICAgICBsaXN0LnB1c2gocGFy
c2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBsaXN0
OwogICAgIH0KIAogICAgIGZ1bmN0aW9uIHBhcnNlQmxvY2soKSB7Ci0gICAgICAgIHZhciBibG9j
aywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgICAgIHZhciBibG9jaywgbm9kZSA9IG5l
dyBOb2RlKCk7CiAKICAgICAgICAgZXhwZWN0KCd7Jyk7CiAKQEAgLTM1MzksMzY5ICszOTc5LDE3
OCBAQAogCiAgICAgICAgIGV4cGVjdCgnfScpOwogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBs
eShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUJsb2NrU3RhdGVtZW50KGJsb2NrKSk7CisgICAgICAg
IHJldHVybiBub2RlLmZpbmlzaEJsb2NrU3RhdGVtZW50KGJsb2NrKTsKICAgICB9CiAKLSAgICAv
LyAxMi4yIFZhcmlhYmxlIFN0YXRlbWVudAorICAgIC8vIEVDTUEtMjYyIDEzLjMuMiBWYXJpYWJs
ZSBTdGF0ZW1lbnQKIAotICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgewot
ICAgICAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksCi0gICAgICAgICAgICB0b2tlbiA9
IGxleCgpOworICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKGtpbmQpIHsKKyAg
ICAgICAgdmFyIHRva2VuLCBub2RlID0gbmV3IE5vZGUoKTsKIAotICAgICAgICBpZiAodG9rZW4u
dHlwZSAhPT0gVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVk
KHRva2VuKTsKKyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAodG9rZW4udHlw
ZSA9PT0gVG9rZW4uS2V5d29yZCAmJiB0b2tlbi52YWx1ZSA9PT0gJ3lpZWxkJykgeworICAgICAg
ICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRv
a2VuKHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpOworICAgICAgICAgICAgfSBp
ZiAoIXN0YXRlLmFsbG93WWllbGQpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRU
b2tlbih0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlw
ZSAhPT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tl
bi50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tl
bi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tl
biwgTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0cmljdCB8fCB0b2tlbi52YWx1ZSAhPT0gJ2xldCcgfHwga2lu
ZCAhPT0gJ3ZhcicpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4o
dG9rZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChzdGF0ZS5zb3VyY2VUeXBlID09PSAnbW9kdWxlJyAmJiB0b2tlbi50eXBlID09PSBUb2tl
bi5JZGVudGlmaWVyICYmIHRva2VuLnZhbHVlID09PSAnYXdhaXQnKSB7CisgICAgICAgICAgICB0
b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbik7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1
cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZh
bHVlKSk7CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaElkZW50aWZpZXIodG9rZW4udmFsdWUp
OwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihraW5kKSB7
Ci0gICAgICAgIHZhciBpZCwKLSAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLAot
ICAgICAgICAgICAgaW5pdCA9IG51bGw7Ci0gICAgICAgIGlmIChtYXRjaCgneycpKSB7Ci0gICAg
ICAgICAgICBpZCA9IHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTsKLSAgICAgICAgICAgIHJlaW50
ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpOwotICAgICAgICB9IGVsc2UgaWYg
KG1hdGNoKCdbJykpIHsKLSAgICAgICAgICAgIGlkID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7
Ci0gICAgICAgICAgICByZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKGlkKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICov
Ci0gICAgICAgICAgICBpZCA9IHN0YXRlLmFsbG93S2V5d29yZCA/IHBhcnNlTm9uQ29tcHV0ZWRQ
cm9wZXJ0eSgpIDogcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIC8vIDEy
LjIuMQotICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJp
Y3RWYXJOYW1lKTsKLSAgICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb24ob3B0aW9ucykgeworICAgICAgICB2YXIgaW5pdCA9IG51bGwsIGlkLCBub2RlID0g
bmV3IE5vZGUoKSwgcGFyYW1zID0gW107CisKKyAgICAgICAgaWQgPSBwYXJzZVBhdHRlcm4ocGFy
YW1zLCAndmFyJyk7CisKKyAgICAgICAgLy8gRUNNQS0yNjIgMTIuMi4xCisgICAgICAgIGlmIChz
dHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgeworICAgICAgICAgICAgdG9sZXJh
dGVFcnJvcihNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChraW5kID09PSAnY29uc3QnKSB7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoKCc9JykpIHsKLSAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob1VuaW50aWFsaXplZENvbnN0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV4cGVjdCgnPScpOwotICAgICAgICAgICAg
aW5pdCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgfSBlbHNlIGlmICht
YXRjaCgnPScpKSB7CisgICAgICAgIGlmIChtYXRjaCgnPScpKSB7CiAgICAgICAgICAgICBsZXgo
KTsKLSAgICAgICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAg
ICAgICAgICBpbml0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKTsKKyAgICAgICAgfSBlbHNlIGlmIChpZC50eXBlICE9PSBTeW50YXguSWRlbnRpZmllciAm
JiAhb3B0aW9ucy5pbkZvcikgeworICAgICAgICAgICAgZXhwZWN0KCc9Jyk7CiAgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVWYXJp
YWJsZURlY2xhcmF0b3IoaWQsIGluaXQpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVmFy
aWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBwYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpIHsKKyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxl
RGVjbGFyYXRpb25MaXN0KG9wdGlvbnMpIHsKICAgICAgICAgdmFyIGxpc3QgPSBbXTsKIAogICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBsaXN0LnB1c2gocGFyc2VWYXJpYWJsZURlY2xhcmF0aW9u
KGtpbmQpKTsKKyAgICAgICAgICAgIGxpc3QucHVzaChwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24o
eyBpbkZvcjogb3B0aW9ucy5pbkZvciB9KSk7CiAgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykp
IHsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxl
eCgpOwotICAgICAgICB9IHdoaWxlIChpbmRleCA8IGxlbmd0aCk7CisgICAgICAgIH0gd2hpbGUg
KHN0YXJ0SW5kZXggPCBsZW5ndGgpOwogCiAgICAgICAgIHJldHVybiBsaXN0OwogICAgIH0KIAot
ICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciBkZWNs
YXJhdGlvbnMsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBhcnNlVmFy
aWFibGVTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgZGVjbGFyYXRpb25zOwogCiAgICAg
ICAgIGV4cGVjdEtleXdvcmQoJ3ZhcicpOwogCi0gICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKKyAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uTGlzdCh7IGluRm9yOiBmYWxzZSB9KTsKIAogICAgICAgICBjb25z
dW1lU2VtaWNvbG9uKCk7CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVs
ZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKSk7Ci0g
ICAgfQotCi0gICAgLy8ga2luZCBtYXkgYmUgYGNvbnN0YCBvciBgbGV0YAotICAgIC8vIEJvdGgg
YXJlIGV4cGVyaW1lbnRhbCBhbmQgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9uIHlldC4KLSAgICAv
LyBzZWUgaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTpjb25z
dAotICAgIC8vIGFuZCBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJt
b255OmxldAotICAgIGZ1bmN0aW9uIHBhcnNlQ29uc3RMZXREZWNsYXJhdGlvbihraW5kKSB7Ci0g
ICAgICAgIHZhciBkZWNsYXJhdGlvbnMsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwotCi0gICAg
ICAgIGV4cGVjdEtleXdvcmQoa2luZCk7Ci0KLSAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5kKTsKLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9u
KCk7Ci0KLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRl
VmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTsKLSAgICB9Ci0KLSAgICAv
LyBwZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwKLQotICAgIGZ1
bmN0aW9uIHBhcnNlTW9kdWxlU3BlY2lmaWVyKCkgewotICAgICAgICB2YXIgbWFya2VyID0gbWFy
a2VyQ3JlYXRlKCksCi0gICAgICAgICAgICBzcGVjaWZpZXI7Ci0KLSAgICAgICAgaWYgKGxvb2th
aGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7Ci0gICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTsKLSAgICAgICAgfQotICAg
ICAgICBzcGVjaWZpZXIgPSBkZWxlZ2F0ZS5jcmVhdGVNb2R1bGVTcGVjaWZpZXIobG9va2FoZWFk
KTsKLSAgICAgICAgbGV4KCk7Ci0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHNw
ZWNpZmllcik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VFeHBvcnRCYXRjaFNwZWNpZmll
cigpIHsKLSAgICAgICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwotICAgICAgICBleHBl
Y3QoJyonKTsKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3Jl
YXRlRXhwb3J0QmF0Y2hTcGVjaWZpZXIoKSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VF
eHBvcnRTcGVjaWZpZXIoKSB7Ci0gICAgICAgIHZhciBpZCwgbmFtZSA9IG51bGwsIG1hcmtlciA9
IG1hcmtlckNyZWF0ZSgpLCBmcm9tOwotICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0
JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgaWQgPSBtYXJrZXJBcHBseSht
YXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIoJ2RlZmF1bHQnKSk7Ci0gICAgICAgICAg
ICAvLyBleHBvcnQge2RlZmF1bHR9IGZyb20gInNvbWV0aGluZyI7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKLSAgICAgICAgICAg
IGxleCgpOwotICAgICAgICAgICAgbmFtZSA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUu
Y3JlYXRlRXhwb3J0U3BlY2lmaWVyKGlkLCBuYW1lKSk7CisgICAgICAgIHJldHVybiBub2RlLmZp
bmlzaFZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zKTsKICAgICB9CiAKLSAgICBmdW5j
dGlvbiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkgewotICAgICAgICB2YXIgYmFja3RyYWNrVG9r
ZW4sIGlkLCBkZWNsYXJhdGlvbiA9IG51bGwsCi0gICAgICAgICAgICBpc0V4cG9ydEZyb21JZGVu
dGlmaWVyLAotICAgICAgICAgICAgc3JjID0gbnVsbCwgc3BlY2lmaWVycyA9IFtdLAotICAgICAg
ICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7Ci0KLSAgICAgICAgZnVuY3Rpb24gcmV3aW5k
KHRva2VuKSB7Ci0gICAgICAgICAgICBpbmRleCA9IHRva2VuLnJhbmdlWzBdOwotICAgICAgICAg
ICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICBsaW5lU3RhcnQg
PSB0b2tlbi5saW5lU3RhcnQ7Ci0gICAgICAgICAgICBsb29rYWhlYWQgPSB0b2tlbjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2V4cG9ydCcpOwotCi0gICAgICAgIGlmICht
YXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgewotICAgICAgICAgICAgLy8gY292ZXJzOgotICAgICAg
ICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgLi4uCi0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAg
ICAgIGlmIChtYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykgfHwgbWF0Y2hLZXl3b3JkKCdjbGFzcycp
KSB7Ci0gICAgICAgICAgICAgICAgYmFja3RyYWNrVG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAg
ICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllck5hbWUobG9v
a2FoZWFkKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBjb3ZlcnM6Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7fQotICAgICAgICAgICAg
ICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBmb28ge30KLSAgICAgICAgICAgICAgICAg
ICAgaWQgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV3aW5kKGJhY2t0cmFja1Rva2VuKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtl
ckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlRXhwb3J0RGVjbGFyYXRpb24odHJ1ZSwgcGFy
c2VTb3VyY2VFbGVtZW50KCksIFtpZF0sIG51bGwpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgLy8gY292ZXJzOgotICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0
IGZ1bmN0aW9uICgpIHt9Ci0gICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3Mg
e30KLSAgICAgICAgICAgICAgICByZXdpbmQoYmFja3RyYWNrVG9rZW4pOwotICAgICAgICAgICAg
ICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAnY2xh
c3MnOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxl
Z2F0ZS5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbih0cnVlLCBwYXJzZUNsYXNzRXhwcmVzc2lvbigp
LCBbXSwgbnVsbCkpOwotICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlRXhw
b3J0RGVjbGFyYXRpb24odHJ1ZSwgcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSwgW10sIG51bGwp
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgLy8gRUNNQS0yNjIgMTMu
My4xIExldCBhbmQgQ29uc3QgRGVjbGFyYXRpb25zCiAKLSAgICAgICAgICAgIGlmIChtYXRjaENv
bnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIGxvb2thaGVhZC52YWx1ZSk7Ci0gICAgICAgICAg
ICB9CisgICAgZnVuY3Rpb24gcGFyc2VMZXhpY2FsQmluZGluZyhraW5kLCBvcHRpb25zKSB7Cisg
ICAgICAgIHZhciBpbml0ID0gbnVsbCwgaWQsIG5vZGUgPSBuZXcgTm9kZSgpLCBwYXJhbXMgPSBb
XTsKIAotICAgICAgICAgICAgLy8gY292ZXJzOgotICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1
bHQge307Ci0gICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBbXTsKLSAgICAgICAgICAgIGlm
IChtYXRjaCgneycpKSB7Ci0gICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZU9iamVj
dEluaXRpYWxpc2VyKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCdbJykpIHsKLSAg
ICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlQXJyYXlJbml0aWFsaXNlcigpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnN1bWVT
ZW1pY29sb24oKTsKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVn
YXRlLmNyZWF0ZUV4cG9ydERlY2xhcmF0aW9uKHRydWUsIGRlY2xhcmF0aW9uLCBbXSwgbnVsbCkp
OwotICAgICAgICB9CisgICAgICAgIGlkID0gcGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7CiAK
LSAgICAgICAgLy8gbm9uLWRlZmF1bHQgZXhwb3J0Ci0gICAgICAgIGlmIChsb29rYWhlYWQudHlw
ZSA9PT0gVG9rZW4uS2V5d29yZCkgewotICAgICAgICAgICAgLy8gY292ZXJzOgotICAgICAgICAg
ICAgLy8gZXhwb3J0IHZhciBmID0gMTsKLSAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZh
bHVlKSB7Ci0gICAgICAgICAgICBjYXNlICdsZXQnOgotICAgICAgICAgICAgY2FzZSAnY29uc3Qn
OgotICAgICAgICAgICAgY2FzZSAndmFyJzoKLSAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzoKLSAg
ICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFya2Vy
QXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbihmYWxzZSwgcGFy
c2VTb3VyY2VFbGVtZW50KCksIHNwZWNpZmllcnMsIG51bGwpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgLy8gRUNNQS0yNjIgMTIuMi4xCisgICAgICAgIGlmIChzdHJpY3QgJiYgaWQudHlwZSA9
PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgeworICAg
ICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChtYXRjaCgnKicpKSB7Ci0gICAgICAgICAgICAvLyBjb3ZlcnM6Ci0g
ICAgICAgICAgICAvLyBleHBvcnQgKiBmcm9tICJmb28iOwotICAgICAgICAgICAgc3BlY2lmaWVy
cy5wdXNoKHBhcnNlRXhwb3J0QmF0Y2hTcGVjaWZpZXIoKSk7Ci0KLSAgICAgICAgICAgIGlmICgh
bWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgbG9va2FoZWFkLnZhbHVlID8KLSAgICAgICAgICAgICAgICAgICAgICAgIE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhl
YWQudmFsdWUpOworICAgICAgICBpZiAoa2luZCA9PT0gJ2NvbnN0JykgeworICAgICAgICAgICAg
aWYgKCFtYXRjaEtleXdvcmQoJ2luJykgJiYgIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykp
IHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJz0nKTsKKyAgICAgICAgICAgICAgICBpbml0ID0g
aXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVT
cGVjaWZpZXIoKTsKLSAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLQotICAgICAgICAg
ICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlRXhwb3J0RGVjbGFy
YXRpb24oZmFsc2UsIG51bGwsIHNwZWNpZmllcnMsIHNyYykpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZXhwZWN0KCd7Jyk7Ci0gICAgICAgIGlmICghbWF0Y2goJ30nKSkgewotICAgICAgICAgICAg
ZG8gewotICAgICAgICAgICAgICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgPSBpc0V4cG9ydEZy
b21JZGVudGlmaWVyIHx8IG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpOwotICAgICAgICAgICAgICAg
IHNwZWNpZmllcnMucHVzaChwYXJzZUV4cG9ydFNwZWNpZmllcigpKTsKLSAgICAgICAgICAgIH0g
d2hpbGUgKG1hdGNoKCcsJykgJiYgbGV4KCkpOwotICAgICAgICB9Ci0gICAgICAgIGV4cGVjdCgn
fScpOwotCi0gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKLSAg
ICAgICAgICAgIC8vIGNvdmVyaW5nOgotICAgICAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fSBm
cm9tICJmb28iOwotICAgICAgICAgICAgLy8gZXhwb3J0IHtmb299IGZyb20gImZvbyI7Ci0gICAg
ICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7
Ci0gICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNF
eHBvcnRGcm9tSWRlbnRpZmllcikgewotICAgICAgICAgICAgLy8gY292ZXJpbmc6Ci0gICAgICAg
ICAgICAvLyBleHBvcnQge2RlZmF1bHR9OyAvLyBtaXNzaW5nIGZyb21DbGF1c2UKLSAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIGxvb2thaGVhZC52YWx1ZSA/Ci0gICAgICAgICAgICAgICAgICAg
IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBs
b29rYWhlYWQudmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gY292ZXIK
LSAgICAgICAgICAgIC8vIGV4cG9ydCB7Zm9vfTsKLSAgICAgICAgICAgIGNvbnN1bWVTZW1pY29s
b24oKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxl
Z2F0ZS5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbihmYWxzZSwgZGVjbGFyYXRpb24sIHNwZWNpZmll
cnMsIHNyYykpOwotICAgIH0KLQotCi0gICAgZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXIo
KSB7Ci0gICAgICAgIC8vIGltcG9ydCB7PGZvbyBhcyBiYXI+fSAuLi47Ci0gICAgICAgIHZhciBp
ZCwgbmFtZSA9IG51bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwotCi0gICAgICAgIGlkID0g
cGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7Ci0gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxL
ZXl3b3JkKCdhcycpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIG5hbWUgPSBw
YXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICB9IGVsc2UgaWYgKCghb3B0aW9ucy5p
bkZvciAmJiBpZC50eXBlICE9PSBTeW50YXguSWRlbnRpZmllcikgfHwgbWF0Y2goJz0nKSkgewor
ICAgICAgICAgICAgZXhwZWN0KCc9Jyk7CisgICAgICAgICAgICBpbml0ID0gaXNvbGF0ZUNvdmVy
R3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKICAgICAgICAgfQogCi0gICAgICAg
IHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUltcG9ydFNwZWNpZmll
cihpZCwgbmFtZSkpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlTmFtZWRJbXBvcnRzKCkg
ewotICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtdOwotICAgICAgICAvLyB7Zm9vLCBiYXIgYXMg
YmFzfQotICAgICAgICBleHBlY3QoJ3snKTsKLSAgICAgICAgaWYgKCFtYXRjaCgnfScpKSB7Ci0g
ICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1w
b3J0U3BlY2lmaWVyKCkpOwotICAgICAgICAgICAgfSB3aGlsZSAobWF0Y2goJywnKSAmJiBsZXgo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZXhwZWN0KCd9Jyk7Ci0gICAgICAgIHJldHVybiBzcGVj
aWZpZXJzOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hWYXJpYWJsZURlY2xhcmF0b3IoaWQs
IGluaXQpOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmll
cigpIHsKLSAgICAgICAgLy8gaW1wb3J0IDxmb28+IC4uLjsKLSAgICAgICAgdmFyIGlkLCBtYXJr
ZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5jdGlvbiBwYXJzZUJpbmRpbmdMaXN0KGtpbmQs
IG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGxpc3QgPSBbXTsKIAotICAgICAgICBpZCA9IHBhcnNl
Tm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOworICAgICAgICBkbyB7CisgICAgICAgICAgICBsaXN0LnB1
c2gocGFyc2VMZXhpY2FsQmluZGluZyhraW5kLCBvcHRpb25zKSk7CisgICAgICAgICAgICBpZiAo
IW1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGxleCgpOworICAgICAgICB9IHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKTsK
IAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVJbXBv
cnREZWZhdWx0U3BlY2lmaWVyKGlkKSk7CisgICAgICAgIHJldHVybiBsaXN0OwogICAgIH0KIAot
ICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkgewotICAgICAgICAv
LyBpbXBvcnQgPCogYXMgZm9vPiAuLi47Ci0gICAgICAgIHZhciBpZCwgbWFya2VyID0gbWFya2Vy
Q3JlYXRlKCk7CisgICAgZnVuY3Rpb24gcGFyc2VMZXhpY2FsRGVjbGFyYXRpb24ob3B0aW9ucykg
eworICAgICAgICB2YXIga2luZCwgZGVjbGFyYXRpb25zLCBub2RlID0gbmV3IE5vZGUoKTsKIAot
ICAgICAgICBleHBlY3QoJyonKTsKLSAgICAgICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3Jk
KCdhcycpKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0FzQWZ0ZXJJ
bXBvcnROYW1lc3BhY2UpOwotICAgICAgICB9Ci0gICAgICAgIGxleCgpOwotICAgICAgICBpZCA9
IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOworICAgICAgICBraW5kID0gbGV4KCkudmFsdWU7
CisgICAgICAgIGFzc2VydChraW5kID09PSAnbGV0JyB8fCBraW5kID09PSAnY29uc3QnLCAnTGV4
aWNhbCBkZWNsYXJhdGlvbiBtdXN0IGJlIGVpdGhlciBsZXQgb3IgY29uc3QnKTsKKworICAgICAg
ICBkZWNsYXJhdGlvbnMgPSBwYXJzZUJpbmRpbmdMaXN0KGtpbmQsIG9wdGlvbnMpOwogCi0gICAg
ICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUltcG9ydE5hbWVz
cGFjZVNwZWNpZmllcihpZCkpOworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2lu
ZCk7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gcGFyc2VJbXBvcnREZWNsYXJhdGlvbigpIHsKLSAg
ICAgICAgdmFyIHNwZWNpZmllcnMsIHNyYywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAg
ZnVuY3Rpb24gcGFyc2VSZXN0RWxlbWVudChwYXJhbXMpIHsKKyAgICAgICAgdmFyIHBhcmFtLCBu
b2RlID0gbmV3IE5vZGUoKTsKIAotICAgICAgICBleHBlY3RLZXl3b3JkKCdpbXBvcnQnKTsKLSAg
ICAgICAgc3BlY2lmaWVycyA9IFtdOworICAgICAgICBsZXgoKTsKIAotICAgICAgICBpZiAobG9v
a2FoZWFkLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKLSAgICAgICAgICAgIC8vIGNv
dmVyczoKLSAgICAgICAgICAgIC8vIGltcG9ydCAiZm9vIjsKLSAgICAgICAgICAgIHNyYyA9IHBh
cnNlTW9kdWxlU3BlY2lmaWVyKCk7Ci0gICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVJbXBv
cnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzcmMpKTsKKyAgICAgICAgaWYgKG1hdGNoKCd7Jykp
IHsKKyAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuT2JqZWN0UGF0dGVybkFzUmVzdFBh
cmFtZXRlcik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1hdGNoS2V5d29yZCgnZGVmYXVs
dCcpICYmIGlzSWRlbnRpZmllck5hbWUobG9va2FoZWFkKSkgewotICAgICAgICAgICAgLy8gY292
ZXJzOgotICAgICAgICAgICAgLy8gaW1wb3J0IGZvbwotICAgICAgICAgICAgLy8gaW1wb3J0IGZv
bywgLi4uCi0gICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnREZWZhdWx0U3Bl
Y2lmaWVyKCkpOwotICAgICAgICAgICAgaWYgKG1hdGNoKCcsJykpIHsKLSAgICAgICAgICAgICAg
ICBsZXgoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobWF0Y2goJyon
KSkgewotICAgICAgICAgICAgLy8gY292ZXJzOgotICAgICAgICAgICAgLy8gaW1wb3J0IGZvbywg
KiBhcyBmb28KLSAgICAgICAgICAgIC8vIGltcG9ydCAqIGFzIGZvbwotICAgICAgICAgICAgc3Bl
Y2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkpOwotICAgICAgICB9
IGVsc2UgaWYgKG1hdGNoKCd7JykpIHsKLSAgICAgICAgICAgIC8vIGNvdmVyczoKLSAgICAgICAg
ICAgIC8vIGltcG9ydCBmb28sIHtiYXJ9Ci0gICAgICAgICAgICAvLyBpbXBvcnQge2Jhcn0KLSAg
ICAgICAgICAgIHNwZWNpZmllcnMgPSBzcGVjaWZpZXJzLmNvbmNhdChwYXJzZU5hbWVkSW1wb3J0
cygpKTsKKyAgICAgICAgcGFyYW1zLnB1c2gobG9va2FoZWFkKTsKKworICAgICAgICBwYXJhbSA9
IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc9JykpIHsK
KyAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuRGVmYXVsdFJlc3RQYXJhbWV0ZXIpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykp
IHsKLSAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIGxvb2thaGVhZC52YWx1ZSA/Ci0gICAgICAg
ICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdG
cm9tQ2xhdXNlLCBsb29rYWhlYWQudmFsdWUpOworICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHsK
KyAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1l
dGVyKTsKICAgICAgICAgfQotICAgICAgICBsZXgoKTsKLSAgICAgICAgc3JjID0gcGFyc2VNb2R1
bGVTcGVjaWZpZXIoKTsKLSAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwogCi0gICAgICAgIHJl
dHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUltcG9ydERlY2xhcmF0aW9u
KHNwZWNpZmllcnMsIHNyYykpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hSZXN0RWxlbWVu
dChwYXJhbSk7CiAgICAgfQogCi0gICAgLy8gMTIuMyBFbXB0eSBTdGF0ZW1lbnQKKyAgICAvLyBF
Q01BLTI2MiAxMy40IEVtcHR5IFN0YXRlbWVudAogCi0gICAgZnVuY3Rpb24gcGFyc2VFbXB0eVN0
YXRlbWVudCgpIHsKLSAgICAgICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1
bmN0aW9uIHBhcnNlRW1wdHlTdGF0ZW1lbnQobm9kZSkgewogICAgICAgICBleHBlY3QoJzsnKTsK
LSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlRW1wdHlT
dGF0ZW1lbnQoKSk7CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEVtcHR5U3RhdGVtZW50KCk7
CiAgICAgfQogCi0gICAgLy8gMTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudAorICAgIC8vIEVDTUEt
MjYyIDEyLjQgRXhwcmVzc2lvbiBTdGF0ZW1lbnQKIAotICAgIGZ1bmN0aW9uIHBhcnNlRXhwcmVz
c2lvblN0YXRlbWVudCgpIHsKLSAgICAgICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLCBl
eHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uU3Rh
dGVtZW50KG5vZGUpIHsKKyAgICAgICAgdmFyIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKICAg
ICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFy
a2VyLCBkZWxlZ2F0ZS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpKTsKKyAgICAgICAg
cmV0dXJuIG5vZGUuZmluaXNoRXhwcmVzc2lvblN0YXRlbWVudChleHByKTsKICAgICB9CiAKLSAg
ICAvLyAxMi41IElmIHN0YXRlbWVudAorICAgIC8vIEVDTUEtMjYyIDEzLjYgSWYgc3RhdGVtZW50
CiAKLSAgICBmdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkgewotICAgICAgICB2YXIgdGVzdCwg
Y29uc2VxdWVudCwgYWx0ZXJuYXRlLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5j
dGlvbiBwYXJzZUlmU3RhdGVtZW50KG5vZGUpIHsKKyAgICAgICAgdmFyIHRlc3QsIGNvbnNlcXVl
bnQsIGFsdGVybmF0ZTsKIAogICAgICAgICBleHBlY3RLZXl3b3JkKCdpZicpOwogCkBAIC0zOTIw
LDEzICs0MTY5LDEzIEBACiAgICAgICAgICAgICBhbHRlcm5hdGUgPSBudWxsOwogICAgICAgICB9
CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlSWZT
dGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSk7CisgICAgICAgIHJldHVybiBu
b2RlLmZpbmlzaElmU3RhdGVtZW50KHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7CiAgICAg
fQogCi0gICAgLy8gMTIuNiBJdGVyYXRpb24gU3RhdGVtZW50cworICAgIC8vIEVDTUEtMjYyIDEz
LjcgSXRlcmF0aW9uIFN0YXRlbWVudHMKIAotICAgIGZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0YXRl
bWVudCgpIHsKLSAgICAgICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uLCBtYXJrZXIg
PSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5jdGlvbiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQobm9k
ZSkgeworICAgICAgICB2YXIgYm9keSwgdGVzdCwgb2xkSW5JdGVyYXRpb247CiAKICAgICAgICAg
ZXhwZWN0S2V5d29yZCgnZG8nKTsKIApAQCAtMzk0OSwxMSArNDE5OCwxMSBAQAogICAgICAgICAg
ICAgbGV4KCk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2Vy
LCBkZWxlZ2F0ZS5jcmVhdGVEb1doaWxlU3RhdGVtZW50KGJvZHksIHRlc3QpKTsKKyAgICAgICAg
cmV0dXJuIG5vZGUuZmluaXNoRG9XaGlsZVN0YXRlbWVudChib2R5LCB0ZXN0KTsKICAgICB9CiAK
LSAgICBmdW5jdGlvbiBwYXJzZVdoaWxlU3RhdGVtZW50KCkgewotICAgICAgICB2YXIgdGVzdCwg
Ym9keSwgb2xkSW5JdGVyYXRpb24sIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0
aW9uIHBhcnNlV2hpbGVTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgdGVzdCwgYm9keSwg
b2xkSW5JdGVyYXRpb247CiAKICAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKIApAQCAt
Mzk3MCw3MyArNDIxOSwxMTEgQEAKIAogICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZElu
SXRlcmF0aW9uOwogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRl
LmNyZWF0ZVdoaWxlU3RhdGVtZW50KHRlc3QsIGJvZHkpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUu
ZmluaXNoV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSk7CiAgICAgfQogCi0gICAgZnVuY3Rpb24g
cGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCkgewotICAgICAgICB2YXIgbWFya2VyID0gbWFy
a2VyQ3JlYXRlKCksCi0gICAgICAgICAgICB0b2tlbiA9IGxleCgpLAotICAgICAgICAgICAgZGVj
bGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOworICAgIGZ1bmN0aW9u
IHBhcnNlRm9yU3RhdGVtZW50KG5vZGUpIHsKKyAgICAgICAgdmFyIGluaXQsIGZvckluLCBpbml0
U2VxLCBpbml0U3RhcnRUb2tlbiwgdGVzdCwgdXBkYXRlLCBsZWZ0LCByaWdodCwga2luZCwgZGVj
bGFyYXRpb25zLAorICAgICAgICAgICAgYm9keSwgb2xkSW5JdGVyYXRpb24sIHByZXZpb3VzQWxs
b3dJbiA9IHN0YXRlLmFsbG93SW47CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtl
ciwgZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIHRva2Vu
LnZhbHVlKSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1lbnQob3B0cykg
ewotICAgICAgICB2YXIgaW5pdCwgdGVzdCwgdXBkYXRlLCBsZWZ0LCByaWdodCwgYm9keSwgb3Bl
cmF0b3IsIG9sZEluSXRlcmF0aW9uLAotICAgICAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRl
KCk7CiAgICAgICAgIGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDsKLSAgICAgICAgZXhwZWN0
S2V5d29yZCgnZm9yJyk7CisgICAgICAgIGZvckluID0gdHJ1ZTsKIAotICAgICAgICAvLyBodHRw
Oi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1wcm9wb3NhbHM6aXRlcmF0b3JzX2Fu
ZF9nZW5lcmF0b3JzJnM9ZWFjaAotICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZCgn
ZWFjaCcpKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5FYWNoTm90QWxs
b3dlZCk7Ci0gICAgICAgIH0KKyAgICAgICAgZXhwZWN0S2V5d29yZCgnZm9yJyk7CiAKICAgICAg
ICAgZXhwZWN0KCcoJyk7CiAKICAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKICAgICAgICAgICAg
IGxleCgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgn
dmFyJykgfHwgbWF0Y2hLZXl3b3JkKCdsZXQnKSB8fCBtYXRjaEtleXdvcmQoJ2NvbnN0JykpIHsK
KyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3ZhcicpKSB7CisgICAgICAgICAgICAgICAg
aW5pdCA9IG5ldyBOb2RlKCk7CisgICAgICAgICAgICAgICAgbGV4KCk7CisKICAgICAgICAgICAg
ICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNl
Rm9yVmFyaWFibGVEZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4g
PSB0cnVlOworICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNs
YXJhdGlvbkxpc3QoeyBpbkZvcjogdHJ1ZSB9KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxv
d0luID0gcHJldmlvdXNBbGxvd0luOwogCi0gICAgICAgICAgICAgICAgaWYgKGluaXQuZGVjbGFy
YXRpb25zLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hLZXl3
b3JkKCdpbicpIHx8IG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdG9yID0gbG9va2FoZWFkOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEoKG9wZXJhdG9yLnZhbHVlID09PSAnaW4nIHx8IGluaXQua2luZCAhPT0gJ3Zhcicp
ICYmIGluaXQuZGVjbGFyYXRpb25zWzBdLmluaXQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkZWNs
YXJhdGlvbnMubGVuZ3RoID09PSAxICYmIG1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAg
ICAgICAgICAgICBpbml0ID0gaW5pdC5maW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0
aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgICAgICBs
ZWZ0ID0gaW5pdDsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24o
KTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0
ID09PSBudWxsICYmIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW5pdCA9IGluaXQuZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlv
bnMpOworICAgICAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgbGVm
dCA9IGluaXQ7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhw
cmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICAgICAgZm9ySW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBpbml0ID0gaW5pdC5maW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xh
cmF0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnOycpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNo
S2V5d29yZCgnY29uc3QnKSB8fCBtYXRjaEtleXdvcmQoJ2xldCcpKSB7CisgICAgICAgICAgICAg
ICAgaW5pdCA9IG5ldyBOb2RlKCk7CisgICAgICAgICAgICAgICAga2luZCA9IGxleCgpLnZhbHVl
OworCiAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGluaXQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS5hbGxv
d0luID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZUJpbmRpbmdM
aXN0KGtpbmQsIHtpbkZvcjogdHJ1ZX0pOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4g
PSBwcmV2aW91c0FsbG93SW47CiAKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFs
S2V5d29yZCgnb2YnKSkgewotICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGxleCgpOwor
ICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0
aW9uc1swXS5pbml0ID09PSBudWxsICYmIG1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAg
ICAgICAgICAgICBpbml0ID0gaW5pdC5maW5pc2hMZXhpY2FsRGVjbGFyYXRpb24oZGVjbGFyYXRp
b25zLCBraW5kKTsKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CiAgICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSBpbml0OwogICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVz
c2lvbigpOwogICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1hdGNoS2V5d29yZCgnaW4nKSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNBc3Np
Z25hYmxlTGVmdEhhbmRTaWRlKGluaXQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5p
bml0ID09PSBudWxsICYmIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW5pdCA9IGluaXQuZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uKGRlY2xhcmF0
aW9ucywga2luZCk7CisgICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAg
ICAgICBsZWZ0ID0gaW5pdDsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOworICAg
ICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAgICAgICAg
ICAgICAgaW5pdCA9IGluaXQuZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywg
a2luZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpbml0U3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgICAgICBzdGF0
ZS5hbGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5pdCA9IGluaGVyaXRDb3Zlckdy
YW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgc3RhdGUu
YWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKworICAgICAgICAgICAgICAgIGlmIChtYXRjaEtl
eXdvcmQoJ2luJykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Fzc2lnbm1lbnRUYXJn
ZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuSW52
YWxpZExIU0luRm9ySW4pOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIG9wZXJhdG9yID0gbGV4KCk7CisKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAg
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihpbml0KTsKICAg
ICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CiAgICAgICAgICAgICAgICAgICAgIHJpZ2h0
ID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvbGVy
YXRlRXJyb3IoTWVzc2FnZXMuSW52YWxpZExIU0luRm9yTG9vcCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgewot
ICAgICAgICAgICAgICAgIGV4cGVjdCgnOycpOworICAgICAgICAgICAgICAgICAgICBsZXgoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGluaXQp
OworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKyAgICAgICAgICAgICAgICAgICAg
cmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAg
IGluaXQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VxID0gW2luaXRdOworICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKG1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VxLnB1c2goaXNv
bGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbmV3IFdyYXBw
aW5nTm9kZShpbml0U3RhcnRUb2tlbikuZmluaXNoU2VxdWVuY2VFeHByZXNzaW9uKGluaXRTZXEp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnOycp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC00MDU3
LDEzMCArNDM0NCwxMjcgQEAKICAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJh
dGlvbjsKICAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOwogCi0gICAgICAgIGlmICgh
KG9wdHMgIT09IHVuZGVmaW5lZCAmJiBvcHRzLmlnbm9yZUJvZHkpKSB7Ci0gICAgICAgICAgICBi
b2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKLSAgICAgICAgfQorICAgICAgICBib2R5ID0gaXNvbGF0
ZUNvdmVyR3JhbW1hcihwYXJzZVN0YXRlbWVudCk7CiAKICAgICAgICAgc3RhdGUuaW5JdGVyYXRp
b24gPSBvbGRJbkl0ZXJhdGlvbjsKIAotICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRl
ZmluZWQnKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0
ZS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAob3BlcmF0b3IudmFsdWUgPT09ICdpbicpIHsKLSAgICAgICAgICAg
IHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUZvckluU3RhdGVtZW50
KGxlZnQsIHJpZ2h0LCBib2R5KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1hcmtlckFw
cGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlRm9yT2ZTdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJv
ZHkpKTsKKyAgICAgICAgcmV0dXJuICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpID8KKyAg
ICAgICAgICAgICAgICBub2RlLmZpbmlzaEZvclN0YXRlbWVudChpbml0LCB0ZXN0LCB1cGRhdGUs
IGJvZHkpIDoKKyAgICAgICAgICAgICAgICBmb3JJbiA/IG5vZGUuZmluaXNoRm9ySW5TdGF0ZW1l
bnQobGVmdCwgcmlnaHQsIGJvZHkpIDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5maW5pc2hG
b3JPZlN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSk7CiAgICAgfQogCi0gICAgLy8gMTIuNyBU
aGUgY29udGludWUgc3RhdGVtZW50CisgICAgLy8gRUNNQS0yNjIgMTMuOCBUaGUgY29udGludWUg
c3RhdGVtZW50CiAKLSAgICBmdW5jdGlvbiBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KCkgewotICAg
ICAgICB2YXIgbGFiZWwgPSBudWxsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5j
dGlvbiBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KG5vZGUpIHsKKyAgICAgICAgdmFyIGxhYmVsID0g
bnVsbCwga2V5OwogCiAgICAgICAgIGV4cGVjdEtleXdvcmQoJ2NvbnRpbnVlJyk7CiAKICAgICAg
ICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9uIGZvcm06ICdjb250aW51ZTsnLgotICAgICAg
ICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSA1OSkgeworICAgICAgICBpZiAoc291
cmNlLmNoYXJDb2RlQXQoc3RhcnRJbmRleCkgPT09IDB4M0IpIHsKICAgICAgICAgICAgIGxleCgp
OwogCiAgICAgICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKKyAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0
ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlz
aENvbnRpbnVlU3RhdGVtZW50KG51bGwpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBlZWtM
aW5lVGVybWluYXRvcigpKSB7CisgICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikgewogICAg
ICAgICAgICAgaWYgKCFzdGF0ZS5pbkl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7CisgICAgICAgICAgICAgICAgdGhy
b3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVDb250aW51
ZVN0YXRlbWVudChudWxsKSk7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hDb250aW51
ZVN0YXRlbWVudChudWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChsb29rYWhlYWQudHlw
ZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewogICAgICAgICAgICAgbGFiZWwgPSBwYXJzZVZhcmlh
YmxlSWRlbnRpZmllcigpOwogCi0gICAgICAgICAgICBpZiAoIXN0YXRlLmxhYmVsU2V0Lmhhcyhs
YWJlbC5uYW1lKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVu
a25vd25MYWJlbCwgbGFiZWwubmFtZSk7CisgICAgICAgICAgICBrZXkgPSAnJCcgKyBsYWJlbC5u
YW1lOworICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh
bGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1l
c3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CiAKICAgICAgICAgaWYgKGxhYmVsID09
PSBudWxsICYmICFzdGF0ZS5pbkl0ZXJhdGlvbikgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7
fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKKyAgICAgICAgICAgIHRocm93RXJyb3IoTWVz
c2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBtYXJr
ZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxhYmVsKSk7
CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaENvbnRpbnVlU3RhdGVtZW50KGxhYmVsKTsKICAg
ICB9CiAKLSAgICAvLyAxMi44IFRoZSBicmVhayBzdGF0ZW1lbnQKKyAgICAvLyBFQ01BLTI2MiAx
My45IFRoZSBicmVhayBzdGF0ZW1lbnQKIAotICAgIGZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1l
bnQoKSB7Ci0gICAgICAgIHZhciBsYWJlbCA9IG51bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgp
OworICAgIGZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIg
bGFiZWwgPSBudWxsLCBrZXk7CiAKICAgICAgICAgZXhwZWN0S2V5d29yZCgnYnJlYWsnKTsKIAot
ICAgICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkg
YSBzZW1pY29sb24gKGNoYXIgIzU5KS4KLSAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGlu
ZGV4KSA9PT0gNTkpIHsKKyAgICAgICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmly
c3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLgorICAgICAgICBpZiAoc291cmNl
LmNoYXJDb2RlQXQobGFzdEluZGV4KSA9PT0gMHgzQikgewogICAgICAgICAgICAgbGV4KCk7CiAK
ICAgICAgICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkg
ewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxl
Z2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKSk7CisgICAgICAgICAgICByZXR1cm4gbm9k
ZS5maW5pc2hCcmVha1N0YXRlbWVudChudWxsKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChw
ZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICBpZiAoaGFzTGluZVRlcm1pbmF0b3IpIHsK
ICAgICAgICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkg
ewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxl
Z2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKSk7CisgICAgICAgICAgICByZXR1cm4gbm9k
ZS5maW5pc2hCcmVha1N0YXRlbWVudChudWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChs
b29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewogICAgICAgICAgICAgbGFiZWwg
PSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwogCi0gICAgICAgICAgICBpZiAoIXN0YXRlLmxh
YmVsU2V0LmhhcyhsYWJlbC5uYW1lKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7CisgICAgICAgICAgICBrZXkgPSAn
JCcgKyBsYWJlbC5uYW1lOworICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CiAKICAgICAgICAg
aWYgKGxhYmVsID09PSBudWxsICYmICEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0
Y2gpKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWsp
OworICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRl
QnJlYWtTdGF0ZW1lbnQobGFiZWwpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQnJlYWtT
dGF0ZW1lbnQobGFiZWwpOwogICAgIH0KIAotICAgIC8vIDEyLjkgVGhlIHJldHVybiBzdGF0ZW1l
bnQKKyAgICAvLyBFQ01BLTI2MiAxMy4xMCBUaGUgcmV0dXJuIHN0YXRlbWVudAogCi0gICAgZnVu
Y3Rpb24gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciBhcmd1bWVudCA9IG51
bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBhcnNlUmV0dXJuU3Rh
dGVtZW50KG5vZGUpIHsKKyAgICAgICAgdmFyIGFyZ3VtZW50ID0gbnVsbDsKIAogICAgICAgICBl
eHBlY3RLZXl3b3JkKCdyZXR1cm4nKTsKIAogICAgICAgICBpZiAoIXN0YXRlLmluRnVuY3Rpb25C
b2R5KSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVn
YWxSZXR1cm4pOworICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5JbGxlZ2FsUmV0
dXJuKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vICdyZXR1cm4nIGZvbGxvd2VkIGJ5IGEgc3Bh
Y2UgYW5kIGFuIGlkZW50aWZpZXIgaXMgdmVyeSBjb21tb24uCi0gICAgICAgIGlmIChzb3VyY2Uu
Y2hhckNvZGVBdChpbmRleCkgPT09IDMyKSB7Ci0gICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVy
U3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHsKKyAgICAgICAgaWYgKHNvdXJj
ZS5jaGFyQ29kZUF0KGxhc3RJbmRleCkgPT09IDB4MjApIHsKKyAgICAgICAgICAgIGlmIChpc0lk
ZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChsYXN0SW5kZXggKyAxKSkpIHsKICAgICAg
ICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgICAgICAgICAg
IGNvbnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHko
bWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBlZWtMaW5lVGVybWluYXRv
cigpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5j
cmVhdGVSZXR1cm5TdGF0ZW1lbnQobnVsbCkpOworICAgICAgICBpZiAoaGFzTGluZVRlcm1pbmF0
b3IpIHsKKyAgICAgICAgICAgIC8vIEhBQ0sKKyAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlz
aFJldHVyblN0YXRlbWVudChudWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbWF0Y2go
JzsnKSkgewpAQCAtNDE5MSwxNiArNDQ3NSwxNiBAQAogCiAgICAgICAgIGNvbnN1bWVTZW1pY29s
b24oKTsKIAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVh
dGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNo
UmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTsKICAgICB9CiAKLSAgICAvLyAxMi4xMCBUaGUgd2l0
aCBzdGF0ZW1lbnQKKyAgICAvLyBFQ01BLTI2MiAxMy4xMSBUaGUgd2l0aCBzdGF0ZW1lbnQKIAot
ICAgIGZ1bmN0aW9uIHBhcnNlV2l0aFN0YXRlbWVudCgpIHsKLSAgICAgICAgdmFyIG9iamVjdCwg
Ym9keSwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgZnVuY3Rpb24gcGFyc2VXaXRoU3Rh
dGVtZW50KG5vZGUpIHsKKyAgICAgICAgdmFyIG9iamVjdCwgYm9keTsKIAogICAgICAgICBpZiAo
c3RyaWN0KSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0
cmljdE1vZGVXaXRoKTsKKyAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuU3RyaWN0
TW9kZVdpdGgpOwogICAgICAgICB9CiAKICAgICAgICAgZXhwZWN0S2V5d29yZCgnd2l0aCcpOwpA
QCAtNDIxMywxNiArNDQ5NywxMyBAQAogCiAgICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgp
OwogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVdp
dGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5KSk7CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFdp
dGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5KTsKICAgICB9CiAKLSAgICAvLyAxMi4xMCBUaGUgc3dp
dGggc3RhdGVtZW50CisgICAgLy8gRUNNQS0yNjIgMTMuMTIgVGhlIHN3aXRjaCBzdGF0ZW1lbnQK
IAogICAgIGZ1bmN0aW9uIHBhcnNlU3dpdGNoQ2FzZSgpIHsKLSAgICAgICAgdmFyIHRlc3QsCi0g
ICAgICAgICAgICBjb25zZXF1ZW50ID0gW10sCi0gICAgICAgICAgICBzb3VyY2VFbGVtZW50LAot
ICAgICAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgICAgIHZhciB0ZXN0LCBj
b25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCwgbm9kZSA9IG5ldyBOb2RlKCk7CiAKICAgICAgICAg
aWYgKG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7CiAgICAgICAgICAgICBsZXgoKTsKQEAgLTQy
MzMsMjIgKzQ1MTQsMTkgQEAKICAgICAgICAgfQogICAgICAgICBleHBlY3QoJzonKTsKIAotICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXgg
PCBsZW5ndGgpIHsKICAgICAgICAgICAgIGlmIChtYXRjaCgnfScpIHx8IG1hdGNoS2V5d29yZCgn
ZGVmYXVsdCcpIHx8IG1hdGNoS2V5d29yZCgnY2FzZScpKSB7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3Vy
Y2VFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZUVsZW1lbnQgPT09ICd1
bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjb25zZXF1ZW50LnB1c2goc291cmNlRWxlbWVudCk7CisgICAgICAgICAgICBzdGF0
ZW1lbnQgPSBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7CisgICAgICAgICAgICBjb25zZXF1ZW50
LnB1c2goc3RhdGVtZW50KTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBs
eShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCkpOwor
ICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hTd2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpOwog
ICAgIH0KIAotICAgIGZ1bmN0aW9uIHBhcnNlU3dpdGNoU3RhdGVtZW50KCkgewotICAgICAgICB2
YXIgZGlzY3JpbWluYW50LCBjYXNlcywgY2xhdXNlLCBvbGRJblN3aXRjaCwgZGVmYXVsdEZvdW5k
LCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaFN0YXRl
bWVudChub2RlKSB7CisgICAgICAgIHZhciBkaXNjcmltaW5hbnQsIGNhc2VzLCBjbGF1c2UsIG9s
ZEluU3dpdGNoLCBkZWZhdWx0Rm91bmQ7CiAKICAgICAgICAgZXhwZWN0S2V5d29yZCgnc3dpdGNo
Jyk7CiAKQEAgLTQyNjQsMjEgKzQ1NDIsMjEgQEAKIAogICAgICAgICBpZiAobWF0Y2goJ30nKSkg
ewogICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFy
a2VyLCBkZWxlZ2F0ZS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcykp
OworICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1p
bmFudCwgY2FzZXMpOwogICAgICAgICB9CiAKICAgICAgICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5p
blN3aXRjaDsKICAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlOwogICAgICAgICBkZWZhdWx0
Rm91bmQgPSBmYWxzZTsKIAotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgICAgIGlmIChtYXRjaCgn
fScpKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBjbGF1c2UgPSBwYXJzZVN3aXRjaENhc2UoKTsKICAgICAgICAgICAgIGlmIChjbGF1c2UudGVz
dCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTXVsdGlwbGVEZWZhdWx0c0lu
U3dpdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5NdWx0aXBs
ZURlZmF1bHRzSW5Td2l0Y2gpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBk
ZWZhdWx0Rm91bmQgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtNDI4OSw1OSArNDU2Nyw2NyBA
QAogCiAgICAgICAgIGV4cGVjdCgnfScpOwogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseSht
YXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2Vz
KSk7CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5h
bnQsIGNhc2VzKTsKICAgICB9CiAKLSAgICAvLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50Cisg
ICAgLy8gRUNNQS0yNjIgMTMuMTQgVGhlIHRocm93IHN0YXRlbWVudAogCi0gICAgZnVuY3Rpb24g
cGFyc2VUaHJvd1N0YXRlbWVudCgpIHsKLSAgICAgICAgdmFyIGFyZ3VtZW50LCBtYXJrZXIgPSBt
YXJrZXJDcmVhdGUoKTsKKyAgICBmdW5jdGlvbiBwYXJzZVRocm93U3RhdGVtZW50KG5vZGUpIHsK
KyAgICAgICAgdmFyIGFyZ3VtZW50OwogCiAgICAgICAgIGV4cGVjdEtleXdvcmQoJ3Rocm93Jyk7
CiAKLSAgICAgICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7Ci0gICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5OZXdsaW5lQWZ0ZXJUaHJvdyk7CisgICAgICAgIGlmIChoYXNM
aW5lVGVybWluYXRvcikgeworICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5OZXdsaW5l
QWZ0ZXJUaHJvdyk7CiAgICAgICAgIH0KIAogICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVz
c2lvbigpOwogCiAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKIAotICAgICAgICByZXR1cm4g
bWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVUaHJvd1N0YXRlbWVudChhcmd1bWVu
dCkpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hUaHJvd1N0YXRlbWVudChhcmd1bWVudCk7
CiAgICAgfQogCi0gICAgLy8gMTIuMTQgVGhlIHRyeSBzdGF0ZW1lbnQKKyAgICAvLyBFQ01BLTI2
MiAxMy4xNSBUaGUgdHJ5IHN0YXRlbWVudAogCiAgICAgZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVz
ZSgpIHsKLSAgICAgICAgdmFyIHBhcmFtLCBib2R5LCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsK
KyAgICAgICAgdmFyIHBhcmFtLCBwYXJhbXMgPSBbXSwgcGFyYW1NYXAgPSB7fSwga2V5LCBpLCBi
b2R5LCBub2RlID0gbmV3IE5vZGUoKTsKIAogICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXRjaCcp
OwogCiAgICAgICAgIGV4cGVjdCgnKCcpOwogICAgICAgICBpZiAobWF0Y2goJyknKSkgewotICAg
ICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgICAgICB0aHJvd1Vu
ZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOworICAgICAgICB9CisKKyAgICAgICAgcGFyYW0gPSBw
YXJzZVBhdHRlcm4ocGFyYW1zKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhcmFtcy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAga2V5ID0gJyQnICsgcGFyYW1zW2ldLnZhbHVlOworICAg
ICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbU1h
cCwga2V5KSkgeworICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuRHVwbGlj
YXRlQmluZGluZywgcGFyYW1zW2ldLnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHBhcmFtTWFwW2tleV0gPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgcGFyYW0gPSBwYXJz
ZUV4cHJlc3Npb24oKTsKLSAgICAgICAgLy8gMTIuMTQuMQotICAgICAgICBpZiAoc3RyaWN0ICYm
IHBhcmFtLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQocGFy
YW0ubmFtZSkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMu
U3RyaWN0Q2F0Y2hWYXJpYWJsZSk7CisgICAgICAgIC8vIEVDTUEtMjYyIDEyLjE0LjEKKyAgICAg
ICAgaWYgKHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7CisgICAgICAg
ICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdENhdGNoVmFyaWFibGUpOwogICAgICAg
ICB9CiAKICAgICAgICAgZXhwZWN0KCcpJyk7CiAgICAgICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7
Ci0gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUNhdGNo
Q2xhdXNlKHBhcmFtLCBib2R5KSk7CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaENhdGNoQ2xh
dXNlKHBhcmFtLCBib2R5KTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBwYXJzZVRyeVN0YXRlbWVu
dCgpIHsKLSAgICAgICAgdmFyIGJsb2NrLCBoYW5kbGVycyA9IFtdLCBmaW5hbGl6ZXIgPSBudWxs
LCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5jdGlvbiBwYXJzZVRyeVN0YXRlbWVu
dChub2RlKSB7CisgICAgICAgIHZhciBibG9jaywgaGFuZGxlciA9IG51bGwsIGZpbmFsaXplciA9
IG51bGw7CiAKICAgICAgICAgZXhwZWN0S2V5d29yZCgndHJ5Jyk7CiAKICAgICAgICAgYmxvY2sg
PSBwYXJzZUJsb2NrKCk7CiAKICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnY2F0Y2gnKSkgewot
ICAgICAgICAgICAgaGFuZGxlcnMucHVzaChwYXJzZUNhdGNoQ2xhdXNlKCkpOworICAgICAgICAg
ICAgaGFuZGxlciA9IHBhcnNlQ2F0Y2hDbGF1c2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChtYXRjaEtleXdvcmQoJ2ZpbmFsbHknKSkgewpAQCAtNDM0OSwxNDEgKzQ2MzUsMTM0IEBACiAg
ICAgICAgICAgICBmaW5hbGl6ZXIgPSBwYXJzZUJsb2NrKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoaGFuZGxlcnMubGVuZ3RoID09PSAwICYmICFmaW5hbGl6ZXIpIHsKLSAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5vQ2F0Y2hPckZpbmFsbHkpOworICAgICAgICBpZiAo
IWhhbmRsZXIgJiYgIWZpbmFsaXplcikgeworICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdl
cy5Ob0NhdGNoT3JGaW5hbGx5KTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBtYXJrZXJB
cHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZVRyeVN0YXRlbWVudChibG9jaywgW10sIGhhbmRs
ZXJzLCBmaW5hbGl6ZXIpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVHJ5U3RhdGVtZW50
KGJsb2NrLCBoYW5kbGVyLCBmaW5hbGl6ZXIpOwogICAgIH0KIAotICAgIC8vIDEyLjE1IFRoZSBk
ZWJ1Z2dlciBzdGF0ZW1lbnQKKyAgICAvLyBFQ01BLTI2MiAxMy4xNiBUaGUgZGVidWdnZXIgc3Rh
dGVtZW50CiAKLSAgICBmdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KCkgewotICAgICAg
ICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7CisgICAgZnVuY3Rpb24gcGFyc2VEZWJ1Z2dl
clN0YXRlbWVudChub2RlKSB7CiAgICAgICAgIGV4cGVjdEtleXdvcmQoJ2RlYnVnZ2VyJyk7CiAK
ICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwogCi0gICAgICAgIHJldHVybiBtYXJrZXJBcHBs
eShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZURlYnVnZ2VyU3RhdGVtZW50KCkpOworICAgICAgICBy
ZXR1cm4gbm9kZS5maW5pc2hEZWJ1Z2dlclN0YXRlbWVudCgpOwogICAgIH0KIAotICAgIC8vIDEy
IFN0YXRlbWVudHMKKyAgICAvLyAxMyBTdGF0ZW1lbnRzCiAKICAgICBmdW5jdGlvbiBwYXJzZVN0
YXRlbWVudCgpIHsKICAgICAgICAgdmFyIHR5cGUgPSBsb29rYWhlYWQudHlwZSwKLSAgICAgICAg
ICAgIG1hcmtlciwKICAgICAgICAgICAgIGV4cHIsCi0gICAgICAgICAgICBsYWJlbGVkQm9keTsK
KyAgICAgICAgICAgIGxhYmVsZWRCb2R5LAorICAgICAgICAgICAga2V5LAorICAgICAgICAgICAg
bm9kZTsKIAogICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uRU9GKSB7Ci0gICAgICAgICAgICB0
aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRv
a2VuKGxvb2thaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4u
UHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09ICd7JykgeworICAgICAgICAgICAgcmV0
dXJuIHBhcnNlQmxvY2soKTsKICAgICAgICAgfQorICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQg
PSBpc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7CiAK
ICAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsKICAgICAgICAgICAgIHN3
aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7CiAgICAgICAgICAgICBjYXNlICc7JzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcGFyc2VFbXB0eVN0YXRlbWVudCgpOwotICAgICAgICAgICAgY2FzZSAn
eyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VFbXB0eVN0YXRlbWVudChub2RlKTsKICAgICAgICAgICAgIGNhc2UgJygn
OgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KG5vZGUpOwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAg
ICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewogICAgICAgICAgICAgc3dp
dGNoIChsb29rYWhlYWQudmFsdWUpIHsKICAgICAgICAgICAgIGNhc2UgJ2JyZWFrJzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VCcmVha1N0YXRlbWVudCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZUJyZWFrU3RhdGVtZW50KG5vZGUpOwogICAgICAgICAgICAgY2FzZSAnY29u
dGludWUnOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udGludWVTdGF0ZW1lbnQobm9kZSk7CiAg
ICAgICAgICAgICBjYXNlICdkZWJ1Z2dlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
RGVidWdnZXJTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VEZWJ1Z2dl
clN0YXRlbWVudChub2RlKTsKICAgICAgICAgICAgIGNhc2UgJ2RvJzoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VEb1doaWxlU3RhdGVtZW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlRG9XaGlsZVN0YXRlbWVudChub2RlKTsKICAgICAgICAgICAgIGNhc2UgJ2Zvcic6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRm9yU3RhdGVtZW50KCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlRm9yU3RhdGVtZW50KG5vZGUpOwogICAgICAgICAgICAgY2FzZSAnZnVu
Y3Rpb24nOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24o
KTsKLSAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFy
c2VDbGFzc0RlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rp
b25EZWNsYXJhdGlvbihub2RlKTsKICAgICAgICAgICAgIGNhc2UgJ2lmJzoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcGFyc2VJZlN0YXRlbWVudCgpOworICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZUlmU3RhdGVtZW50KG5vZGUpOwogICAgICAgICAgICAgY2FzZSAncmV0dXJuJzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VSZXR1cm5TdGF0ZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBjYXNlICdz
d2l0Y2gnOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVN3aXRjaFN0YXRlbWVudCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVN3aXRjaFN0YXRlbWVudChub2RlKTsKICAgICAg
ICAgICAgIGNhc2UgJ3Rocm93JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUaHJvd1N0
YXRlbWVudCgpOworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRocm93U3RhdGVtZW50KG5v
ZGUpOwogICAgICAgICAgICAgY2FzZSAndHJ5JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFy
c2VUcnlTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUcnlTdGF0ZW1l
bnQobm9kZSk7CiAgICAgICAgICAgICBjYXNlICd2YXInOgotICAgICAgICAgICAgICAgIHJldHVy
biBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
VmFyaWFibGVTdGF0ZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBjYXNlICd3aGlsZSc6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VXaGlsZVN0YXRlbWVudChub2RlKTsKICAgICAgICAgICAgIGNhc2UgJ3dp
dGgnOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVdpdGhTdGF0ZW1lbnQoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VXaXRoU3RhdGVtZW50KG5vZGUpOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOwogICAgICAgICBleHByID0gcGFy
c2VFeHByZXNzaW9uKCk7CiAKLSAgICAgICAgLy8gMTIuMTIgTGFiZWxsZWQgU3RhdGVtZW50cwor
ICAgICAgICAvLyBFQ01BLTI2MiAxMi4xMiBMYWJlbGxlZCBTdGF0ZW1lbnRzCiAgICAgICAgIGlm
ICgoZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgJiYgbWF0Y2goJzonKSkgewogICAg
ICAgICAgICAgbGV4KCk7CiAKLSAgICAgICAgICAgIGlmIChzdGF0ZS5sYWJlbFNldC5oYXMoZXhw
ci5uYW1lKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlJlZGVj
bGFyYXRpb24sICdMYWJlbCcsIGV4cHIubmFtZSk7CisgICAgICAgICAgICBrZXkgPSAnJCcgKyBl
eHByLm5hbWU7CisgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0
eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cihNZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBleHByLm5hbWUpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBzdGF0ZS5sYWJlbFNldC5zZXQoZXhwci5uYW1lLCB0cnVlKTsK
KyAgICAgICAgICAgIHN0YXRlLmxhYmVsU2V0W2tleV0gPSB0cnVlOwogICAgICAgICAgICAgbGFi
ZWxlZEJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgc3RhdGUubGFiZWxTZXQu
ZGVsZXRlKGV4cHIubmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2Vy
LCBkZWxlZ2F0ZS5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGV4cHIsIGxhYmVsZWRCb2R5KSk7Cisg
ICAgICAgICAgICBkZWxldGUgc3RhdGUubGFiZWxTZXRba2V5XTsKKyAgICAgICAgICAgIHJldHVy
biBub2RlLmZpbmlzaExhYmVsZWRTdGF0ZW1lbnQoZXhwciwgbGFiZWxlZEJvZHkpOwogICAgICAg
ICB9CiAKICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwogCi0gICAgICAgIHJldHVybiBtYXJr
ZXJBcHBseShtYXJrZXIsIGRlbGVnYXRlLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcikp
OworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOwog
ICAgIH0KIAotICAgIC8vIDEzIEZ1bmN0aW9uIERlZmluaXRpb24KLQotICAgIGZ1bmN0aW9uIHBh
cnNlQ29uY2lzZUJvZHkoKSB7Ci0gICAgICAgIGlmIChtYXRjaCgneycpKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICB9CisgICAgLy8gRUNN
QS0yNjIgMTQuMSBGdW5jdGlvbiBEZWZpbml0aW9uCiAKICAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0
aW9uU291cmNlRWxlbWVudHMoKSB7Ci0gICAgICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VF
bGVtZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQsCi0gICAgICAg
ICAgICBvbGRMYWJlbFNldCwgb2xkSW5JdGVyYXRpb24sIG9sZEluU3dpdGNoLCBvbGRJbkZ1bmN0
aW9uQm9keSwgb2xkUGFyZW50aGVzaXplZENvdW50LAotICAgICAgICAgICAgbWFya2VyID0gbWFy
a2VyQ3JlYXRlKCk7CisgICAgICAgIHZhciBzdGF0ZW1lbnQsIGJvZHkgPSBbXSwgdG9rZW4sIGRp
cmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkLAorICAgICAgICAgICAgb2xkTGFiZWxTZXQsIG9sZElu
SXRlcmF0aW9uLCBvbGRJblN3aXRjaCwgb2xkSW5GdW5jdGlvbkJvZHksIG9sZFBhcmVudGhlc2lz
Q291bnQsCisgICAgICAgICAgICBub2RlID0gbmV3IE5vZGUoKTsKIAogICAgICAgICBleHBlY3Qo
J3snKTsKIAotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgd2hpbGUg
KHN0YXJ0SW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAh
PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CiAKLSAgICAgICAgICAgIHNv
dXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIHNvdXJjZUVs
ZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoc291cmNlRWxlbWVu
dC5leHByZXNzaW9uLnR5cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7CisgICAgICAgICAgICBzdGF0
ZW1lbnQgPSBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7CisgICAgICAgICAgICBib2R5LnB1c2go
c3RhdGVtZW50KTsKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9
PSBTeW50YXguTGl0ZXJhbCkgewogICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVj
dGl2ZQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdICsgMSwgdG9rZW4ucmFuZ2Vb
MV0gLSAxKTsKKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFy
dCArIDEsIHRva2VuLmVuZCAtIDEpOwogICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3Vz
ZSBzdHJpY3QnKSB7CiAgICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7
CisgICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJp
Y3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVk
ICYmIHRva2VuLm9jdGFsKSB7CkBAIC00NDk2LDIzICs0Nzc1LDE5IEBACiAgICAgICAgIG9sZElu
SXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247CiAgICAgICAgIG9sZEluU3dpdGNoID0gc3Rh
dGUuaW5Td2l0Y2g7CiAgICAgICAgIG9sZEluRnVuY3Rpb25Cb2R5ID0gc3RhdGUuaW5GdW5jdGlv
bkJvZHk7Ci0gICAgICAgIG9sZFBhcmVudGhlc2l6ZWRDb3VudCA9IHN0YXRlLnBhcmVudGhlc2l6
ZWRDb3VudDsKKyAgICAgICAgb2xkUGFyZW50aGVzaXNDb3VudCA9IHN0YXRlLnBhcmVudGhlc2l6
ZWRDb3VudDsKIAotICAgICAgICBzdGF0ZS5sYWJlbFNldCA9IG5ldyBTdHJpbmdNYXAoKTsKKyAg
ICAgICAgc3RhdGUubGFiZWxTZXQgPSB7fTsKICAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBm
YWxzZTsKICAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBmYWxzZTsKICAgICAgICAgc3RhdGUuaW5G
dW5jdGlvbkJvZHkgPSB0cnVlOwogICAgICAgICBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQgPSAw
OwogCi0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICB3aGlsZSAoc3Rh
cnRJbmRleCA8IGxlbmd0aCkgewogICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZUVsZW1l
bnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNl
RWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7
CisgICAgICAgICAgICBib2R5LnB1c2gocGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGV4cGVjdCgnfScpOwpAQCAtNDUyMSwxOCArNDc5NiwxOSBAQAogICAg
ICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOwogICAgICAgICBzdGF0ZS5p
blN3aXRjaCA9IG9sZEluU3dpdGNoOwogICAgICAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IG9s
ZEluRnVuY3Rpb25Cb2R5OwotICAgICAgICBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQgPSBvbGRQ
YXJlbnRoZXNpemVkQ291bnQ7CisgICAgICAgIHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudCA9IG9s
ZFBhcmVudGhlc2lzQ291bnQ7CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwg
ZGVsZWdhdGUuY3JlYXRlQmxvY2tTdGF0ZW1lbnQoc291cmNlRWxlbWVudHMpKTsKKyAgICAgICAg
cmV0dXJuIG5vZGUuZmluaXNoQmxvY2tTdGF0ZW1lbnQoYm9keSk7CiAgICAgfQogCiAgICAgZnVu
Y3Rpb24gdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbSwgbmFtZSkgeworICAgICAgICB2YXIg
a2V5ID0gJyQnICsgbmFtZTsKICAgICAgICAgaWYgKHN0cmljdCkgewogICAgICAgICAgICAgaWYg
KGlzUmVzdHJpY3RlZFdvcmQobmFtZSkpIHsKICAgICAgICAgICAgICAgICBvcHRpb25zLnN0cmlj
dGVkID0gcGFyYW07CiAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMu
U3RyaWN0UGFyYW1OYW1lOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wdGlvbnMu
cGFyYW1TZXQuaGFzKG5hbWUpKSB7CisgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMucGFyYW1TZXQsIGtleSkpIHsKICAgICAgICAgICAg
ICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07CiAgICAgICAgICAgICAgICAgb3B0aW9ucy5t
ZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlOwogICAgICAgICAgICAgfQpAQCAtNDU0
Myw3NSArNDgxOSw1OCBAQAogICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNl
cnZlZFdvcmQobmFtZSkpIHsKICAgICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3Rl
ZCA9IHBhcmFtOwogICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0
cmljdFJlc2VydmVkV29yZDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wYXJhbVNl
dC5oYXMobmFtZSkpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9
IHBhcmFtOworICAgICAgICAgICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blBy
b3BlcnR5LmNhbGwob3B0aW9ucy5wYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgIG9w
dGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTsKICAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2Ug
PSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgb3B0aW9ucy5wYXJhbVNldC5zZXQobmFtZSwgdHJ1ZSk7CisgICAgICAgIG9wdGlvbnMu
cGFyYW1TZXRba2V5XSA9IHRydWU7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gcGFyc2VQYXJhbShv
cHRpb25zKSB7Ci0gICAgICAgIHZhciB0b2tlbiwgcmVzdCwgcGFyYW0sIGRlZjsKKyAgICAgICAg
dmFyIHRva2VuLCBwYXJhbSwgcGFyYW1zID0gW10sIGksIGRlZjsKIAogICAgICAgICB0b2tlbiA9
IGxvb2thaGVhZDsKICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnLi4uJykgewotICAgICAg
ICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAgICAgIHJlc3QgPSB0cnVlOworICAgICAgICAg
ICAgcGFyYW0gPSBwYXJzZVJlc3RFbGVtZW50KHBhcmFtcyk7CisgICAgICAgICAgICB2YWxpZGF0
ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTsKKyAg
ICAgICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pOworICAgICAgICAgICAgb3B0aW9u
cy5kZWZhdWx0cy5wdXNoKG51bGwpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKLSAgICAgICAgICAgIHBhcmFtID0gcGFy
c2VBcnJheUluaXRpYWxpc2VyKCk7Ci0gICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1
cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTsKLSAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgn
eycpKSB7Ci0gICAgICAgICAgICBpZiAocmVzdCkgewotICAgICAgICAgICAgICAgIHRocm93RXJy
b3Ioe30sIE1lc3NhZ2VzLk9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXIpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcGFyYW0gPSBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7Ci0gICAg
ICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFt
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcmFtID0gcGFyc2VWYXJpYWJsZUlk
ZW50aWZpZXIoKTsKLSAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgdG9rZW4sIHRv
a2VuLnZhbHVlKTsKKyAgICAgICAgcGFyYW0gPSBwYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJh
bXMpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtc1tpXSwgcGFyYW1zW2ldLnZhbHVl
KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtYXRjaCgnPScpKSB7Ci0gICAgICAgICAgICBp
ZiAocmVzdCkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQs
IE1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxleCgpOwotICAgICAgICAgICAgZGVmID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigp
OworICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuKSB7
CisgICAgICAgICAgICBkZWYgPSBwYXJhbS5yaWdodDsKKyAgICAgICAgICAgIHBhcmFtID0gcGFy
YW0ubGVmdDsKICAgICAgICAgICAgICsrb3B0aW9ucy5kZWZhdWx0Q291bnQ7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAocmVzdCkgewotICAgICAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7Ci0g
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuUGFyYW1ldGVyQWZ0ZXJSZXN0
UGFyYW1ldGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9wdGlvbnMucmVzdCA9IHBh
cmFtOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KICAgICAgICAgb3B0
aW9ucy5wYXJhbXMucHVzaChwYXJhbSk7CiAgICAgICAgIG9wdGlvbnMuZGVmYXVsdHMucHVzaChk
ZWYpOworCiAgICAgICAgIHJldHVybiAhbWF0Y2goJyknKTsKICAgICB9CiAKICAgICBmdW5jdGlv
biBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgdmFyIG9wdGlvbnMsIG1h
cmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgICAgICB2YXIgb3B0aW9uczsKIAogICAgICAgICBv
cHRpb25zID0gewogICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgIGRlZmF1bHRD
b3VudDogMCwKICAgICAgICAgICAgIGRlZmF1bHRzOiBbXSwKLSAgICAgICAgICAgIHJlc3Q6IG51
bGwsCiAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IGZpcnN0UmVzdHJpY3RlZAogICAgICAg
ICB9OwogCiAgICAgICAgIGV4cGVjdCgnKCcpOwogCiAgICAgICAgIGlmICghbWF0Y2goJyknKSkg
ewotICAgICAgICAgICAgb3B0aW9ucy5wYXJhbVNldCA9IG5ldyBTdHJpbmdNYXAoKTsKLSAgICAg
ICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgb3B0aW9ucy5wYXJh
bVNldCA9IHt9OworICAgICAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIXBhcnNlUGFyYW0ob3B0aW9ucykpIHsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDYyNSw4MiArNDg4NCw5MyBAQAog
ICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0cyA9IFtdOwogICAgICAgICB9CiAKLSAgICAgICAg
cmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgb3B0aW9ucyk7CisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLAorICAgICAgICAgICAgZGVmYXVsdHM6
IG9wdGlvbnMuZGVmYXVsdHMsCisgICAgICAgICAgICBzdHJpY3RlZDogb3B0aW9ucy5zdHJpY3Rl
ZCwKKyAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQs
CisgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2UKKyAgICAgICAgfTsKICAgICB9
CiAKLSAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSB7Ci0gICAgICAgIHZh
ciBpZCwgYm9keSwgdG9rZW4sIHRtcCwgZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlLCBwcmV2aW91
c1N0cmljdCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIGdlbmVyYXRvciwKLSAgICAgICAgICAgIG1h
cmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25EZWNsYXJh
dGlvbihub2RlLCBpZGVudGlmaWVySXNPcHRpb25hbCkgeworICAgICAgICB2YXIgaWQgPSBudWxs
LCBwYXJhbXMgPSBbXSwgZGVmYXVsdHMgPSBbXSwgYm9keSwgdG9rZW4sIHN0cmljdGVkLCB0bXAs
IGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgcHJldmlvdXNTdHJpY3QsCisgICAgICAgICAgICBp
c0dlbmVyYXRvciwgcHJldmlvdXNBbGxvd1lpZWxkOworCisgICAgICAgIHByZXZpb3VzQWxsb3dZ
aWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7CiAKICAgICAgICAgZXhwZWN0S2V5d29yZCgnZnVuY3Rp
b24nKTsKIAotICAgICAgICBnZW5lcmF0b3IgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1hdGNoKCcq
JykpIHsKKyAgICAgICAgaXNHZW5lcmF0b3IgPSBtYXRjaCgnKicpOworICAgICAgICBpZiAoaXNH
ZW5lcmF0b3IpIHsKICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgZ2VuZXJhdG9yID0g
dHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotCi0gICAgICAg
IGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLQotICAgICAgICBpZiAoc3RyaWN0KSB7
Ci0gICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0
aW9uTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBmaXJz
dFJlc3RyaWN0ZWQgPSB0b2tlbjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMu
U3RyaWN0RnVuY3Rpb25OYW1lOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVS
ZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmlj
dGVkID0gdG9rZW47Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJl
c2VydmVkV29yZDsKKyAgICAgICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCAhbWF0Y2go
JygnKSkgeworICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICBpZCA9
IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgICAgICBpZiAoc3RyaWN0KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5T
dHJpY3RGdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7
CisgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVl
KSkgeworICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0
ZS5hbGxvd1lpZWxkID0gIWlzR2VuZXJhdG9yOwogICAgICAgICB0bXAgPSBwYXJzZVBhcmFtcyhm
aXJzdFJlc3RyaWN0ZWQpOworICAgICAgICBwYXJhbXMgPSB0bXAucGFyYW1zOworICAgICAgICBk
ZWZhdWx0cyA9IHRtcC5kZWZhdWx0czsKKyAgICAgICAgc3RyaWN0ZWQgPSB0bXAuc3RyaWN0ZWQ7
CiAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7CiAgICAgICAg
IGlmICh0bXAubWVzc2FnZSkgewogICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlOwog
ICAgICAgICB9CiAKLSAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7Ci0gICAgICAgIHBy
ZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkOwotICAgICAgICBzdGF0ZS55
aWVsZEFsbG93ZWQgPSBnZW5lcmF0b3I7CiAKKyAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJp
Y3Q7CiAgICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsKLQogICAg
ICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICAgICAgdGhyb3dF
cnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICAgICAgdGhyb3dVbmV4cGVj
dGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoc3RyaWN0ICYmIHRtcC5zdHJpY3RlZCkgewotICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVy
YW50KHRtcC5zdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0
ZWQpIHsKKyAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHN0cmljdGVkLCBtZXNz
YWdlKTsKICAgICAgICAgfQorCiAgICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotICAg
ICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDsKKyAgICAgICAg
c3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKIAotICAgICAgICByZXR1cm4g
bWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKGlk
LCB0bXAucGFyYW1zLCB0bXAuZGVmYXVsdHMsIGJvZHksIHRtcC5yZXN0LCBnZW5lcmF0b3IsIGZh
bHNlKSk7CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEZ1bmN0aW9uRGVjbGFyYXRpb24oaWQs
IHBhcmFtcywgZGVmYXVsdHMsIGJvZHksIGlzR2VuZXJhdG9yKTsKICAgICB9CiAKICAgICBmdW5j
dGlvbiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIHRva2VuLCBpZCA9
IG51bGwsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgdG1wLCBib2R5LCBwcmV2aW91c1N0cmlj
dCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIGdlbmVyYXRvciwKLSAgICAgICAgICAgIG1hcmtlciA9
IG1hcmtlckNyZWF0ZSgpOworICAgICAgICB2YXIgdG9rZW4sIGlkID0gbnVsbCwgc3RyaWN0ZWQs
IGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgdG1wLAorICAgICAgICAgICAgcGFyYW1zID0gW10s
IGRlZmF1bHRzID0gW10sIGJvZHksIHByZXZpb3VzU3RyaWN0LCBub2RlID0gbmV3IE5vZGUoKSwK
KyAgICAgICAgICAgIGlzR2VuZXJhdG9yLCBwcmV2aW91c0FsbG93WWllbGQ7CiAKLSAgICAgICAg
ZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKyAgICAgICAgcHJldmlvdXNBbGxvd1lpZWxkID0g
c3RhdGUuYWxsb3dZaWVsZDsKIAotICAgICAgICBnZW5lcmF0b3IgPSBmYWxzZTsKKyAgICAgICAg
ZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKIAotICAgICAgICBpZiAobWF0Y2goJyonKSkgewor
ICAgICAgICBpc0dlbmVyYXRvciA9IG1hdGNoKCcqJyk7CisgICAgICAgIGlmIChpc0dlbmVyYXRv
cikgewogICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IgPSB0cnVlOwog
ICAgICAgICB9CiAKKyAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9ICFpc0dlbmVyYXRvcjsKICAg
ICAgICAgaWYgKCFtYXRjaCgnKCcpKSB7CiAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsK
LSAgICAgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAg
IGlkID0gKCFzdHJpY3QgJiYgIWlzR2VuZXJhdG9yICYmIG1hdGNoS2V5d29yZCgneWllbGQnKSkg
PyBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKSA6IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7
CiAgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJp
Y3RlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JU
b2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1
bmN0aW9uTmFtZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKQEAgLTQ3
MTQsMjgwICs0OTg0LDQyMCBAQAogICAgICAgICB9CiAKICAgICAgICAgdG1wID0gcGFyc2VQYXJh
bXMoZmlyc3RSZXN0cmljdGVkKTsKKyAgICAgICAgcGFyYW1zID0gdG1wLnBhcmFtczsKKyAgICAg
ICAgZGVmYXVsdHMgPSB0bXAuZGVmYXVsdHM7CisgICAgICAgIHN0cmljdGVkID0gdG1wLnN0cmlj
dGVkOwogICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmlyc3RSZXN0cmljdGVkOwogICAg
ICAgICBpZiAodG1wLm1lc3NhZ2UpIHsKICAgICAgICAgICAgIG1lc3NhZ2UgPSB0bXAubWVzc2Fn
ZTsKICAgICAgICAgfQogCiAgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OwotICAgICAg
ICBwcmV2aW91c1lpZWxkQWxsb3dlZCA9IHN0YXRlLnlpZWxkQWxsb3dlZDsKLSAgICAgICAgc3Rh
dGUueWllbGRBbGxvd2VkID0gZ2VuZXJhdG9yOwotCiAgICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0
aW9uU291cmNlRWxlbWVudHMoKTsKLQogICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJp
Y3RlZCkgewotICAgICAgICAgICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2Up
OworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBtZXNz
YWdlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyaWN0ICYmIHN0cmljdGVkKSB7CisgICAg
ICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAg
ICAgIH0KKyAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisgICAgICAgIHN0YXRlLmFs
bG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisKKyAgICAgICAgcmV0dXJuIG5vZGUuZmlu
aXNoRnVuY3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5LCBpc0dlbmVy
YXRvcik7CisgICAgfQorCisgICAgLy8gRUNNQS0yNjIgMTQuNSBDbGFzcyBEZWZpbml0aW9ucwor
CisgICAgZnVuY3Rpb24gcGFyc2VDbGFzc0JvZHkoKSB7CisgICAgICAgIHZhciBjbGFzc0JvZHks
IHRva2VuLCBpc1N0YXRpYywgaGFzQ29uc3RydWN0b3IgPSBmYWxzZSwgYm9keSwgbWV0aG9kLCBj
b21wdXRlZCwga2V5OworCisgICAgICAgIGNsYXNzQm9keSA9IG5ldyBOb2RlKCk7CisKKyAgICAg
ICAgZXhwZWN0KCd7Jyk7CisgICAgICAgIGJvZHkgPSBbXTsKKyAgICAgICAgd2hpbGUgKCFtYXRj
aCgnfScpKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJzsnKSkgeworICAgICAgICAgICAgICAg
IGxleCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBu
ZXcgTm9kZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAg
ICAgICAgIGlzU3RhdGljID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRj
aCgnWycpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKicpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGtleS5uYW1lID09PSAnc3RhdGljJyAmJiAobG9va2FoZWFkUHJvcGVydHlOYW1lKCkgfHwg
bWF0Y2goJyonKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFk
OworICAgICAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWMgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaCgnWycpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hdGNoKCcqJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG1ldGhvZCA9IHRyeVBhcnNlTWV0aG9kRGVmaW5pdGlvbih0b2tlbiwga2V5LCBj
b21wdXRlZCwgbWV0aG9kKTsKKyAgICAgICAgICAgICAgICBpZiAobWV0aG9kKSB7CisgICAgICAg
ICAgICAgICAgICAgIG1ldGhvZFsnc3RhdGljJ10gPSBpc1N0YXRpYzsgLy8ganNjczppZ25vcmUg
cmVxdWlyZURvdE5vdGF0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCA9
PT0gJ2luaXQnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9ICdtZXRo
b2QnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNT
dGF0aWMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYm
IChtZXRob2Qua2V5Lm5hbWUgfHwgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSA9PT0gJ2Nv
bnN0cnVjdG9yJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2lu
ZCAhPT0gJ21ldGhvZCcgfHwgIW1ldGhvZC5tZXRob2QgfHwgbWV0aG9kLnZhbHVlLmdlbmVyYXRv
cikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tl
bih0b2tlbiwgTWVzc2FnZXMuQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Nv
bnN0cnVjdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBl
Y3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5EdXBsaWNhdGVDb25zdHJ1Y3Rvcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzQ29uc3RydWN0b3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9ICdjb25zdHJ1Y3Rv
cic7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZC5jb21wdXRlZCAmJiAobWV0
aG9kLmtleS5uYW1lIHx8IG1ldGhvZC5rZXkudmFsdWUudG9TdHJpbmcoKSkgPT09ICdwcm90b3R5
cGUnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4o
dG9rZW4sIE1lc3NhZ2VzLlN0YXRpY1Byb3RvdHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kLnR5
cGUgPSBTeW50YXguTWV0aG9kRGVmaW5pdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IG1ldGhvZC5tZXRob2Q7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtZXRob2Quc2hvcnRo
YW5kOworICAgICAgICAgICAgICAgICAgICBib2R5LnB1c2gobWV0aG9kKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihs
b29rYWhlYWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBsZXgoKTsKKyAgICAgICAgcmV0dXJuIGNsYXNzQm9keS5maW5pc2hDbGFzc0JvZHko
Ym9keSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKGlkZW50
aWZpZXJJc09wdGlvbmFsKSB7CisgICAgICAgIHZhciBpZCA9IG51bGwsIHN1cGVyQ2xhc3MgPSBu
dWxsLCBjbGFzc05vZGUgPSBuZXcgTm9kZSgpLCBjbGFzc0JvZHksIHByZXZpb3VzU3RyaWN0ID0g
c3RyaWN0OworICAgICAgICBzdHJpY3QgPSB0cnVlOworCisgICAgICAgIGV4cGVjdEtleXdvcmQo
J2NsYXNzJyk7CisKKyAgICAgICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCBsb29rYWhl
YWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgaWQgPSBwYXJzZVZh
cmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoS2V5d29y
ZCgnZXh0ZW5kcycpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHN1cGVyQ2xh
c3MgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93
Q2FsbCk7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3NCb2R5ID0gcGFyc2VDbGFzc0JvZHkoKTsK
KyAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisKKyAgICAgICAgcmV0dXJuIGNsYXNz
Tm9kZS5maW5pc2hDbGFzc0RlY2xhcmF0aW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCkgeworICAgICAgICB2
YXIgaWQgPSBudWxsLCBzdXBlckNsYXNzID0gbnVsbCwgY2xhc3NOb2RlID0gbmV3IE5vZGUoKSwg
Y2xhc3NCb2R5LCBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgc3RyaWN0ID0gdHJ1
ZTsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdjbGFzcycpOworCisgICAgICAgIGlmIChsb29r
YWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgaWQgPSBwYXJz
ZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoS2V5
d29yZCgnZXh0ZW5kcycpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHN1cGVy
Q2xhc3MgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFs
bG93Q2FsbCk7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3NCb2R5ID0gcGFyc2VDbGFzc0JvZHko
KTsKKyAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisKKyAgICAgICAgcmV0dXJuIGNs
YXNzTm9kZS5maW5pc2hDbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9keSk7
CisgICAgfQorCisgICAgLy8gRUNNQS0yNjIgMTUuMiBNb2R1bGVzCisKKyAgICBmdW5jdGlvbiBw
YXJzZU1vZHVsZVNwZWNpZmllcigpIHsKKyAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpOwor
CisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgewor
ICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hMaXRlcmFsKGxleCgpKTsKKyAg
ICB9CisKKyAgICAvLyBFQ01BLTI2MiAxNS4yLjMgRXhwb3J0cworCisgICAgZnVuY3Rpb24gcGFy
c2VFeHBvcnRTcGVjaWZpZXIoKSB7CisgICAgICAgIHZhciBleHBvcnRlZCwgbG9jYWwsIG5vZGUg
PSBuZXcgTm9kZSgpLCBkZWY7CisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkg
eworICAgICAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fSBmcm9tICdzb21ldGhpbmcnOworICAg
ICAgICAgICAgZGVmID0gbmV3IE5vZGUoKTsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAg
ICAgbG9jYWwgPSBkZWYuZmluaXNoSWRlbnRpZmllcignZGVmYXVsdCcpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbG9jYWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAg
ICAgICB9CisgICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7CisgICAg
ICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGV4cG9ydGVkID0gcGFyc2VOb25Db21wdXRlZFBy
b3BlcnR5KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0U3Bl
Y2lmaWVyKGxvY2FsLCBleHBvcnRlZCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VFeHBv
cnROYW1lZERlY2xhcmF0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gbnVs
bCwKKyAgICAgICAgICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIsCisgICAgICAgICAgICBzcmMg
PSBudWxsLCBzcGVjaWZpZXJzID0gW107CisKKyAgICAgICAgLy8gbm9uLWRlZmF1bHQgZXhwb3J0
CisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgeworICAgICAg
ICAgICAgLy8gY292ZXJzOgorICAgICAgICAgICAgLy8gZXhwb3J0IHZhciBmID0gMTsKKyAgICAg
ICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAn
bGV0JzoKKyAgICAgICAgICAgICAgICBjYXNlICdjb25zdCc6CisgICAgICAgICAgICAgICAgY2Fz
ZSAndmFyJzoKKyAgICAgICAgICAgICAgICBjYXNlICdjbGFzcyc6CisgICAgICAgICAgICAgICAg
Y2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNl
U3RhdGVtZW50TGlzdEl0ZW0oKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmlu
aXNoRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgbnVsbCk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmljdCAmJiB0bXAuc3Ry
aWN0ZWQpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0bXAuc3RyaWN0ZWQsIG1l
c3NhZ2UpOworCisgICAgICAgIGV4cGVjdCgneycpOworICAgICAgICB3aGlsZSAoIW1hdGNoKCd9
JykpIHsKKyAgICAgICAgICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgPSBpc0V4cG9ydEZyb21J
ZGVudGlmaWVyIHx8IG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpOworICAgICAgICAgICAgc3BlY2lm
aWVycy5wdXNoKHBhcnNlRXhwb3J0U3BlY2lmaWVyKCkpOworICAgICAgICAgICAgaWYgKCFtYXRj
aCgnfScpKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICAgICAg
aWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHN0cmljdCA9IHByZXZp
b3VzU3RyaWN0OwotICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxs
b3dlZDsKKyAgICAgICAgZXhwZWN0KCd9Jyk7CiAKLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5
KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKGlkLCB0bXAucGFyYW1z
LCB0bXAuZGVmYXVsdHMsIGJvZHksIHRtcC5yZXN0LCBnZW5lcmF0b3IsIGZhbHNlKSk7CisgICAg
ICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKyAgICAgICAgICAgIC8v
IGNvdmVyaW5nOgorICAgICAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fSBmcm9tICdmb28nOwor
ICAgICAgICAgICAgLy8gZXhwb3J0IHtmb299IGZyb20gJ2Zvbyc7CisgICAgICAgICAgICBsZXgo
KTsKKyAgICAgICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7CisgICAgICAgICAg
ICBjb25zdW1lU2VtaWNvbG9uKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNFeHBvcnRGcm9tSWRl
bnRpZmllcikgeworICAgICAgICAgICAgLy8gY292ZXJpbmc6CisgICAgICAgICAgICAvLyBleHBv
cnQge2RlZmF1bHR9OyAvLyBtaXNzaW5nIGZyb21DbGF1c2UKKyAgICAgICAgICAgIHRocm93RXJy
b3IobG9va2FoZWFkLnZhbHVlID8KKyAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBl
Y3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVhZC52YWx1ZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBjb3ZlcgorICAgICAgICAgICAgLy8g
ZXhwb3J0IHtmb299OworICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFy
YXRpb24sIHNwZWNpZmllcnMsIHNyYyk7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gcGFyc2VZaWVs
ZEV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciB5aWVsZFRva2VuLCBkZWxlZ2F0ZUZsYWcsIGV4
cHIsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpOworICAgIGZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVm
YXVsdERlY2xhcmF0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCwK
KyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBudWxsOwogCi0gICAgICAgIHlpZWxkVG9rZW4gPSBs
ZXgoKTsKLSAgICAgICAgYXNzZXJ0KHlpZWxkVG9rZW4udmFsdWUgPT09ICd5aWVsZCcsICdDYWxs
ZWQgcGFyc2VZaWVsZEV4cHJlc3Npb24gd2l0aCBub24teWllbGQgbG9va2FoZWFkLicpOworICAg
ICAgICAvLyBjb3ZlcnM6CisgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IC4uLgorICAgICAgICBl
eHBlY3RLZXl3b3JkKCdkZWZhdWx0Jyk7CiAKLSAgICAgICAgaWYgKCFzdGF0ZS55aWVsZEFsbG93
ZWQpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdh
bFlpZWxkKTsKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgeworICAgICAg
ICAgICAgLy8gY292ZXJzOgorICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24g
Zm9vICgpIHt9CisgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7fQor
ICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24obmV3IE5v
ZGUoKSwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnREZWZhdWx0
RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRjaEtl
eXdvcmQoJ2NsYXNzJykpIHsKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VDbGFzc0Rl
Y2xhcmF0aW9uKHRydWUpOworICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0RGVm
YXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGRlbGVn
YXRlRmxhZyA9IGZhbHNlOwotICAgICAgICBpZiAobWF0Y2goJyonKSkgewotICAgICAgICAgICAg
bGV4KCk7Ci0gICAgICAgICAgICBkZWxlZ2F0ZUZsYWcgPSB0cnVlOworICAgICAgICBpZiAobWF0
Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKE1l
c3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGV4cHIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0KLSAgICAgICAgcmV0
dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVsZWdhdGUuY3JlYXRlWWllbGRFeHByZXNzaW9uKGV4
cHIsIGRlbGVnYXRlRmxhZykpOworICAgICAgICAvLyBjb3ZlcnM6CisgICAgICAgIC8vIGV4cG9y
dCBkZWZhdWx0IHt9OworICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBbXTsKKyAgICAgICAgLy8g
ZXhwb3J0IGRlZmF1bHQgKDEgKyAyKTsKKyAgICAgICAgaWYgKG1hdGNoKCd7JykpIHsKKyAgICAg
ICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZU9iamVjdEluaXRpYWxpemVyKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlQXJy
YXlJbml0aWFsaXplcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhwcmVzc2lv
biA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorICAgICAgICBjb25z
dW1lU2VtaWNvbG9uKCk7CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydERlZmF1bHRE
ZWNsYXJhdGlvbihleHByZXNzaW9uKTsKICAgICB9CiAKLSAgICAvLyAxNCBGdW5jdGlvbnMgYW5k
IGNsYXNzZXMKKyAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uKG5vZGUpIHsK
KyAgICAgICAgdmFyIHNyYzsKIAotICAgIC8vIDE0LjEgRnVuY3Rpb25zIGlzIGRlZmluZWQgYWJv
dmUgKDEzIGluIEVTNSkKLSAgICAvLyAxNC4yIEFycm93IEZ1bmN0aW9ucyBEZWZpbml0aW9ucyBp
cyBkZWZpbmVkIGluICg3LjMgYXNzaWdubWVudHMpCisgICAgICAgIC8vIGNvdmVyczoKKyAgICAg
ICAgLy8gZXhwb3J0ICogZnJvbSAnZm9vJzsKKyAgICAgICAgZXhwZWN0KCcqJyk7CisgICAgICAg
IGlmICghbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yKGxvb2thaGVhZC52YWx1ZSA/CisgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVu
ZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhlYWQudmFs
dWUpOworICAgICAgICB9CisgICAgICAgIGxleCgpOworICAgICAgICBzcmMgPSBwYXJzZU1vZHVs
ZVNwZWNpZmllcigpOworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CiAKLSAgICAvLyAxNC4z
IE1ldGhvZCBEZWZpbml0aW9ucwotICAgIC8vIDE0LjMuNwotICAgIGZ1bmN0aW9uIHNwZWNpYWxN
ZXRob2QobWV0aG9kRGVmaW5pdGlvbikgewotICAgICAgICByZXR1cm4gbWV0aG9kRGVmaW5pdGlv
bi5raW5kID09PSAnZ2V0JyB8fAotICAgICAgICAgICAgbWV0aG9kRGVmaW5pdGlvbi5raW5kID09
PSAnc2V0JyB8fAotICAgICAgICAgICAgbWV0aG9kRGVmaW5pdGlvbi52YWx1ZS5nZW5lcmF0b3I7
CisgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydEFsbERlY2xhcmF0aW9uKHNyYyk7CiAg
ICAgfQogCi0gICAgZnVuY3Rpb24gcGFyc2VNZXRob2REZWZpbml0aW9uKCkgewotICAgICAgICB2
YXIgdG9rZW4sIGtleSwgcGFyYW0sIHByb3BUeXBlLCBjb21wdXRlZCwKLSAgICAgICAgICAgIG1h
cmtlciA9IG1hcmtlckNyZWF0ZSgpOwotCi0gICAgICAgIGlmIChsb29rYWhlYWQudmFsdWUgPT09
ICdzdGF0aWMnKSB7Ci0gICAgICAgICAgICBwcm9wVHlwZSA9IENsYXNzUHJvcGVydHlUeXBlLnN0
YXRpYzsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cHJvcFR5cGUgPSBDbGFzc1Byb3BlcnR5VHlwZS5wcm90b3R5cGU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobWF0Y2goJyonKSkgewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICBj
b21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09ICdbJyk7Ci0gICAgICAgICAgICByZXR1cm4g
bWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVNZXRob2REZWZpbml0aW9uKAotICAg
ICAgICAgICAgICAgIHByb3BUeXBlLAotICAgICAgICAgICAgICAgICcnLAotICAgICAgICAgICAg
ICAgIHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSwKLSAgICAgICAgICAgICAgICBwYXJzZVByb3Bl
cnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IHRydWUgfSksCi0gICAgICAgICAgICAgICAg
Y29tcHV0ZWQKLSAgICAgICAgICAgICkpOworICAgIGZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVjbGFy
YXRpb24oKSB7CisgICAgICAgIHZhciBub2RlID0gbmV3IE5vZGUoKTsKKyAgICAgICAgaWYgKHN0
YXRlLmluRnVuY3Rpb25Cb2R5KSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLkls
bGVnYWxFeHBvcnREZWNsYXJhdGlvbik7CiAgICAgICAgIH0KIAotICAgICAgICB0b2tlbiA9IGxv
b2thaGVhZDsKLSAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwotCi0gICAg
ICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ2dldCcgJiYgIW1hdGNoKCcoJykpIHsKLSAgICAgICAg
ICAgIGNvbXB1dGVkID0gKGxvb2thaGVhZC52YWx1ZSA9PT0gJ1snKTsKLSAgICAgICAgICAgIGtl
eSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnZXhw
b3J0Jyk7CiAKLSAgICAgICAgICAgIGV4cGVjdCgnKCcpOwotICAgICAgICAgICAgZXhwZWN0KCcp
Jyk7Ci0gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVh
dGVNZXRob2REZWZpbml0aW9uKAotICAgICAgICAgICAgICAgIHByb3BUeXBlLAotICAgICAgICAg
ICAgICAgICdnZXQnLAotICAgICAgICAgICAgICAgIGtleSwKLSAgICAgICAgICAgICAgICBwYXJz
ZVByb3BlcnR5RnVuY3Rpb24oeyBnZW5lcmF0b3I6IGZhbHNlIH0pLAotICAgICAgICAgICAgICAg
IGNvbXB1dGVkCi0gICAgICAgICAgICApKTsKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZGVm
YXVsdCcpKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VFeHBvcnREZWZhdWx0RGVjbGFyYXRp
b24obm9kZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnc2V0JyAm
JiAhbWF0Y2goJygnKSkgewotICAgICAgICAgICAgY29tcHV0ZWQgPSAobG9va2FoZWFkLnZhbHVl
ID09PSAnWycpOwotICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwot
Ci0gICAgICAgICAgICBleHBlY3QoJygnKTsKLSAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFk
OwotICAgICAgICAgICAgcGFyYW0gPSBbIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgXTsKLSAg
ICAgICAgICAgIGV4cGVjdCgnKScpOwotICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1h
cmtlciwgZGVsZWdhdGUuY3JlYXRlTWV0aG9kRGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgICBw
cm9wVHlwZSwKLSAgICAgICAgICAgICAgICAnc2V0JywKLSAgICAgICAgICAgICAgICBrZXksCi0g
ICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHsgcGFyYW1zOiBwYXJhbSwgZ2Vu
ZXJhdG9yOiBmYWxzZSwgbmFtZTogdG9rZW4gfSksCi0gICAgICAgICAgICAgICAgY29tcHV0ZWQK
LSAgICAgICAgICAgICkpOworICAgICAgICBpZiAobWF0Y2goJyonKSkgeworICAgICAgICAgICAg
cmV0dXJuIHBhcnNlRXhwb3J0QWxsRGVjbGFyYXRpb24obm9kZSk7CiAgICAgICAgIH0KLQotICAg
ICAgICBjb21wdXRlZCA9ICh0b2tlbi52YWx1ZSA9PT0gJ1snKTsKLQotICAgICAgICByZXR1cm4g
bWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVNZXRob2REZWZpbml0aW9uKAotICAg
ICAgICAgICAgcHJvcFR5cGUsCi0gICAgICAgICAgICAnJywKLSAgICAgICAgICAgIGtleSwKLSAg
ICAgICAgICAgIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbih7IGdlbmVyYXRvcjogZmFsc2Ug
fSksCi0gICAgICAgICAgICBjb21wdXRlZAotICAgICAgICApKTsKKyAgICAgICAgcmV0dXJuIHBh
cnNlRXhwb3J0TmFtZWREZWNsYXJhdGlvbihub2RlKTsKICAgICB9CiAKLSAgICAvLyAxNC41IENs
YXNzIERlZmluaXRpb25zCisgICAgLy8gRUNNQS0yNjIgMTUuMi4yIEltcG9ydHMKIAotICAgIGZ1
bmN0aW9uIHBhcnNlQ2xhc3NFbGVtZW50KCkgewotICAgICAgICBpZiAobWF0Y2goJzsnKSkgewor
ICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkgeworICAgICAgICAvLyBpbXBvcnQg
ezxmb28gYXMgYmFyPn0gLi4uOworICAgICAgICB2YXIgbG9jYWwsIGltcG9ydGVkLCBub2RlID0g
bmV3IE5vZGUoKTsKKworICAgICAgICBpbXBvcnRlZCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0
eSgpOworICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXMnKSkgewogICAgICAg
ICAgICAgbGV4KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VN
ZXRob2REZWZpbml0aW9uKCk7CisgICAgICAgICAgICBsb2NhbCA9IHBhcnNlVmFyaWFibGVJZGVu
dGlmaWVyKCk7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUNsYXNzQm9k
eSgpIHsKLSAgICAgICAgdmFyIGNsYXNzRWxlbWVudCwgY2xhc3NFbGVtZW50cyA9IFtdLCBleGlz
dGluZ1Byb3BzID0ge30sCi0gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSwgcHJv
cE5hbWUsIHByb3BUeXBlOwogCi0gICAgICAgIGV4aXN0aW5nUHJvcHNbQ2xhc3NQcm9wZXJ0eVR5
cGUuc3RhdGljXSA9IG5ldyBTdHJpbmdNYXAoKTsKLSAgICAgICAgZXhpc3RpbmdQcm9wc1tDbGFz
c1Byb3BlcnR5VHlwZS5wcm90b3R5cGVdID0gbmV3IFN0cmluZ01hcCgpOworICAgICAgICByZXR1
cm4gbm9kZS5maW5pc2hJbXBvcnRTcGVjaWZpZXIobG9jYWwsIGltcG9ydGVkKTsKKyAgICB9CiAK
KyAgICBmdW5jdGlvbiBwYXJzZU5hbWVkSW1wb3J0cygpIHsKKyAgICAgICAgdmFyIHNwZWNpZmll
cnMgPSBbXTsKKyAgICAgICAgLy8ge2ZvbywgYmFyIGFzIGJhc30KICAgICAgICAgZXhwZWN0KCd7
Jyk7Ci0KLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAo
bWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2xhc3NFbGVtZW50ID0gcGFyc2VDbGFzc0VsZW1lbnQoZXhpc3RpbmdQcm9wcyk7
Ci0KLSAgICAgICAgICAgIGlmICh0eXBlb2YgY2xhc3NFbGVtZW50ICE9PSAndW5kZWZpbmVkJykg
ewotICAgICAgICAgICAgICAgIGNsYXNzRWxlbWVudHMucHVzaChjbGFzc0VsZW1lbnQpOwotCi0g
ICAgICAgICAgICAgICAgcHJvcE5hbWUgPSAhY2xhc3NFbGVtZW50LmNvbXB1dGVkICYmIGdldEZp
ZWxkTmFtZShjbGFzc0VsZW1lbnQua2V5KTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcE5hbWUg
IT09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BUeXBlID0gY2xhc3NFbGVtZW50
LnN0YXRpYyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzUHJvcGVydHlU
eXBlLnN0YXRpYyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzUHJvcGVy
dHlUeXBlLnByb3RvdHlwZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcE5hbWUgPT09
ICdjb25zdHJ1Y3RvcicgJiYgIWNsYXNzRWxlbWVudC5zdGF0aWMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzcGVjaWFsTWV0aG9kKGNsYXNzRWxlbWVudCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGNsYXNzRWxlbWVudCwgTWVzc2FnZXMuSWxsZWdh
bENsYXNzQ29uc3RydWN0b3JQcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdQcm9wc1tDbGFzc1Byb3BlcnR5VHlw
ZS5wcm90b3R5cGVdLmhhcygnY29uc3RydWN0b3InKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXJyb3IoY2xhc3NFbGVtZW50LmtleSwgTWVzc2FnZXMuSWxsZWdhbER1cGxp
Y2F0ZUNsYXNzUHJvcGVydHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUHJvcHNbcHJvcFR5cGVd
LnNldChwcm9wTmFtZSwgdHJ1ZSk7CisgICAgICAgIHdoaWxlICghbWF0Y2goJ30nKSkgeworICAg
ICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkpOworICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAg
ICAgZXhwZWN0KCd9Jyk7Ci0KLSAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZGVs
ZWdhdGUuY3JlYXRlQ2xhc3NCb2R5KGNsYXNzRWxlbWVudHMpKTsKKyAgICAgICAgcmV0dXJuIHNw
ZWNpZmllcnM7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gcGFyc2VDbGFzc0V4cHJlc3Npb24oKSB7
Ci0gICAgICAgIHZhciBpZCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIHN1cGVyQ2xhc3MgPSBudWxs
LCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsKKyAgICBmdW5jdGlvbiBwYXJzZUltcG9ydERlZmF1
bHRTcGVjaWZpZXIoKSB7CisgICAgICAgIC8vIGltcG9ydCA8Zm9vPiAuLi47CisgICAgICAgIHZh
ciBsb2NhbCwgbm9kZSA9IG5ldyBOb2RlKCk7CiAKLSAgICAgICAgZXhwZWN0S2V5d29yZCgnY2xh
c3MnKTsKKyAgICAgICAgbG9jYWwgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKIAotICAg
ICAgICBpZiAoIW1hdGNoS2V5d29yZCgnZXh0ZW5kcycpICYmICFtYXRjaCgneycpKSB7Ci0gICAg
ICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoSW1wb3J0RGVmYXVsdFNwZWNpZmllcihsb2NhbCk7CisgICAg
fQogCi0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2V4dGVuZHMnKSkgewotICAgICAgICAgICAg
ZXhwZWN0S2V5d29yZCgnZXh0ZW5kcycpOwotICAgICAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93
ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7Ci0gICAgICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCk7Ci0gICAgICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxs
b3dlZDsKKyAgICBmdW5jdGlvbiBwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpIHsKKyAg
ICAgICAgLy8gaW1wb3J0IDwqIGFzIGZvbz4gLi4uOworICAgICAgICB2YXIgbG9jYWwsIG5vZGUg
PSBuZXcgTm9kZSgpOworCisgICAgICAgIGV4cGVjdCgnKicpOworICAgICAgICBpZiAoIW1hdGNo
Q29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2Fn
ZXMuTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlKTsKICAgICAgICAgfQorICAgICAgICBsZXgoKTsK
KyAgICAgICAgbG9jYWwgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKIAotICAgICAgICBy
ZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVDbGFzc0V4cHJlc3Npb24o
aWQsIHN1cGVyQ2xhc3MsIHBhcnNlQ2xhc3NCb2R5KCkpKTsKKyAgICAgICAgcmV0dXJuIG5vZGUu
ZmluaXNoSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKGxvY2FsKTsKICAgICB9CiAKLSAgICBmdW5j
dGlvbiBwYXJzZUNsYXNzRGVjbGFyYXRpb24oKSB7Ci0gICAgICAgIHZhciBpZCwgcHJldmlvdXNZ
aWVsZEFsbG93ZWQsIHN1cGVyQ2xhc3MgPSBudWxsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTsK
LQotICAgICAgICBleHBlY3RLZXl3b3JkKCdjbGFzcycpOwotCi0gICAgICAgIGlkID0gcGFyc2VW
YXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICBmdW5jdGlvbiBwYXJzZUltcG9ydERlY2xhcmF0aW9u
KCkgeworICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtdLCBzcmMsIG5vZGUgPSBuZXcgTm9kZSgp
OwogCi0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2V4dGVuZHMnKSkgewotICAgICAgICAgICAg
ZXhwZWN0S2V5d29yZCgnZXh0ZW5kcycpOwotICAgICAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93
ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7Ci0gICAgICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCk7Ci0gICAgICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxs
b3dlZDsKKyAgICAgICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7CiAgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVDbGFz
c0RlY2xhcmF0aW9uKGlkLCBzdXBlckNsYXNzLCBwYXJzZUNsYXNzQm9keSgpKSk7Ci0gICAgfQor
ICAgICAgICBleHBlY3RLZXl3b3JkKCdpbXBvcnQnKTsKIAotICAgIC8vIDE1IFByb2dyYW0KKyAg
ICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAg
ICAgICAgICAvLyBpbXBvcnQgJ2Zvbyc7CisgICAgICAgICAgICBzcmMgPSBwYXJzZU1vZHVsZVNw
ZWNpZmllcigpOworICAgICAgICB9IGVsc2UgewogCi0gICAgZnVuY3Rpb24gcGFyc2VTb3VyY2VF
bGVtZW50KCkgewotICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQp
IHsKLSAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7Ci0gICAgICAgICAgICBj
YXNlICdjb25zdCc6Ci0gICAgICAgICAgICBjYXNlICdsZXQnOgotICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24obG9va2FoZWFkLnZhbHVlKTsKLSAgICAgICAg
ICAgIGNhc2UgJ2Z1bmN0aW9uJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlv
bkRlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICBjYXNlICdleHBvcnQnOgotICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbEV4cG9ydERlY2xhcmF0
aW9uKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VFeHBvcnREZWNsYXJhdGlvbigpOwot
ICAgICAgICAgICAgY2FzZSAnaW1wb3J0JzoKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9s
ZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgICAg
ICBpZiAobWF0Y2goJ3snKSkgeworICAgICAgICAgICAgICAgIC8vIGltcG9ydCB7YmFyfQorICAg
ICAgICAgICAgICAgIHNwZWNpZmllcnMgPSBzcGVjaWZpZXJzLmNvbmNhdChwYXJzZU5hbWVkSW1w
b3J0cygpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJyonKSkgeworICAgICAgICAg
ICAgICAgIC8vIGltcG9ydCAqIGFzIGZvbworICAgICAgICAgICAgICAgIHNwZWNpZmllcnMucHVz
aChwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNJZGVudGlmaWVyTmFtZShsb29rYWhlYWQpICYmICFtYXRjaEtleXdvcmQoJ2RlZmF1bHQn
KSkgeworICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28KKyAgICAgICAgICAgICAgICBzcGVj
aWZpZXJzLnB1c2gocGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyKCkpOworICAgICAgICAgICAg
ICAgIGlmIChtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobWF0Y2goJyonKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaW1wb3J0IGZvbywgKiBhcyBmb28KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmll
cnMucHVzaChwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChtYXRjaCgneycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbXBvcnQgZm9vLCB7YmFyfQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVycyA9
IHNwZWNpZmllcnMuY29uY2F0KHBhcnNlTmFtZWRJbXBvcnRzKCkpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9r
ZW4obG9va2FoZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9r
ZW4obGV4KCkpOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvb2th
aGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVN0YXRl
bWVudCgpOwotICAgICAgICB9Ci0gICAgfQogCi0gICAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtRWxl
bWVudCgpIHsKLSAgICAgICAgaWYgKGV4dHJhLmlzTW9kdWxlICYmIGxvb2thaGVhZC50eXBlID09
PSBUb2tlbi5LZXl3b3JkKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkg
ewotICAgICAgICAgICAgY2FzZSAnZXhwb3J0JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFy
c2VFeHBvcnREZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgY2FzZSAnaW1wb3J0JzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VJbXBvcnREZWNsYXJhdGlvbigpOworICAgICAgICAgICAg
aWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKyAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKGxvb2thaGVhZC52YWx1ZSA/CisgICAgICAgICAgICAgICAgICAgICAgICBNZXNz
YWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2Fo
ZWFkLnZhbHVlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAg
ICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKICAgICAgICAgfQogCi0gICAgICAgIHJl
dHVybiBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwor
ICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hJbXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBz
cmMpOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHBhcnNlUHJvZ3JhbUVsZW1lbnRzKCkgewotICAg
ICAgICB2YXIgc291cmNlRWxlbWVudCwgc291cmNlRWxlbWVudHMgPSBbXSwgdG9rZW4sIGRpcmVj
dGl2ZSwgZmlyc3RSZXN0cmljdGVkOworICAgIC8vIEVDTUEtMjYyIDE1LjEgU2NyaXB0cwogCi0g
ICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgIGZ1bmN0aW9uIHBhcnNlU2NyaXB0
Qm9keSgpIHsKKyAgICAgICAgdmFyIHN0YXRlbWVudCwgYm9keSA9IFtdLCB0b2tlbiwgZGlyZWN0
aXZlLCBmaXJzdFJlc3RyaWN0ZWQ7CisKKyAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5n
dGgpIHsKICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwogICAgICAgICAgICAgaWYgKHRv
a2VuLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlUHJv
Z3JhbUVsZW1lbnQoKTsKLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxl
bWVudCk7Ci0gICAgICAgICAgICBpZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9uLnR5cGUgIT09
IFN5bnRheC5MaXRlcmFsKSB7CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVu
dExpc3RJdGVtKCk7CisgICAgICAgICAgICBib2R5LnB1c2goc3RhdGVtZW50KTsKKyAgICAgICAg
ICAgIGlmIChzdGF0ZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgewog
ICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNs
aWNlKHRva2VuLnJhbmdlWzBdICsgMSwgdG9rZW4ucmFuZ2VbMV0gLSAxKTsKKyAgICAgICAgICAg
IGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEp
OwogICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7CiAgICAgICAg
ICAgICAgICAgc3RyaWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmlj
dGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3Ry
aWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgICAg
IHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0
T2N0YWxMaXRlcmFsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7CkBA
IC00OTk2LDEwMyArNTQwNiwyNSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0g
cGFyc2VQcm9ncmFtRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVt
ZW50ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0
aCkgeworICAgICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpOwor
ICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovCisgICAgICAgICAgICBpZiAodHlw
ZW9mIHN0YXRlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxl
bWVudCk7CisgICAgICAgICAgICBib2R5LnB1c2goc3RhdGVtZW50KTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gc291cmNlRWxlbWVudHM7CisgICAgICAgIHJldHVybiBib2R5OwogICAgIH0K
IAogICAgIGZ1bmN0aW9uIHBhcnNlUHJvZ3JhbSgpIHsKLSAgICAgICAgdmFyIGJvZHksIG1hcmtl
ciA9IG1hcmtlckNyZWF0ZSgpOwotICAgICAgICBzdHJpY3QgPSAhIWV4dHJhLmlzTW9kdWxlOwot
ICAgICAgICBwZWVrKCk7Ci0gICAgICAgIGJvZHkgPSBwYXJzZVByb2dyYW1FbGVtZW50cygpOwot
ICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBkZWxlZ2F0ZS5jcmVhdGVQcm9ncmFt
KGJvZHkpKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjb2xsZWN0VG9rZW4oKSB7Ci0gICAgICAg
IHZhciBsb2MsIHRva2VuLCByYW5nZSwgdmFsdWUsIGVudHJ5OwotCi0gICAgICAgIHNraXBDb21t
ZW50KCk7Ci0gICAgICAgIGxvYyA9IHsKLSAgICAgICAgICAgIHN0YXJ0OiB7Ci0gICAgICAgICAg
ICAgICAgbGluZTogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0g
bGluZVN0YXJ0Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdG9rZW4gPSBl
eHRyYS5hZHZhbmNlKCk7Ci0gICAgICAgIGxvYy5lbmQgPSB7Ci0gICAgICAgICAgICBsaW5lOiBs
aW5lTnVtYmVyLAotICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAotICAgICAg
ICB9OwotCi0gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHsKLSAgICAgICAg
ICAgIHJhbmdlID0gW3Rva2VuLnJhbmdlWzBdLCB0b2tlbi5yYW5nZVsxXV07Ci0gICAgICAgICAg
ICB2YWx1ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV0pOwot
ICAgICAgICAgICAgZW50cnkgPSB7Ci0gICAgICAgICAgICAgICAgdHlwZTogVG9rZW5OYW1lW3Rv
a2VuLnR5cGVdLAotICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKLSAgICAgICAgICAgICAg
ICByYW5nZTogcmFuZ2UsCi0gICAgICAgICAgICAgICAgbG9jOiBsb2MKLSAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHsKLSAgICAgICAgICAgICAgICBlbnRyeS5y
ZWdleCA9IHsKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogdG9rZW4ucmVnZXgucGF0dGVy
biwKLSAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHRva2VuLnJlZ2V4LmZsYWdzCi0gICAgICAg
ICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wdXNo
KGVudHJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBjb2xsZWN0UmVnZXgoKSB7Ci0gICAgICAgIHZhciBwb3MsIGxvYywgcmVnZXgs
IHRva2VuOwotCi0gICAgICAgIHNraXBDb21tZW50KCk7Ci0KLSAgICAgICAgcG9zID0gaW5kZXg7
Ci0gICAgICAgIGxvYyA9IHsKLSAgICAgICAgICAgIHN0YXJ0OiB7Ci0gICAgICAgICAgICAgICAg
bGluZTogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0
YXJ0Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgcmVnZXggPSBleHRyYS5z
Y2FuUmVnRXhwKCk7Ci0gICAgICAgIGxvYy5lbmQgPSB7Ci0gICAgICAgICAgICBsaW5lOiBsaW5l
TnVtYmVyLAotICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAotICAgICAgICB9
OwotCi0gICAgICAgIGlmICghZXh0cmEudG9rZW5pemUpIHsKLSAgICAgICAgICAgIC8qIGlzdGFu
YnVsIGlnbm9yZSBuZXh0ICovCi0gICAgICAgICAgICAvLyBQb3AgdGhlIHByZXZpb3VzIHRva2Vu
LCB3aGljaCBpcyBsaWtlbHkgJy8nIG9yICcvPScKLSAgICAgICAgICAgIGlmIChleHRyYS50b2tl
bnMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgIHRva2VuID0gZXh0cmEudG9rZW5zW2V4
dHJhLnRva2Vucy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4ucmFuZ2Vb
MF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSAnUHVuY3R1YXRvcicpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnLycgfHwgdG9rZW4udmFsdWUgPT09ICcvPScp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wb3AoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAg
dmFyIGJvZHksIG5vZGU7CiAKLSAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKHsKLSAgICAg
ICAgICAgICAgICB0eXBlOiAnUmVndWxhckV4cHJlc3Npb24nLAotICAgICAgICAgICAgICAgIHZh
bHVlOiByZWdleC5saXRlcmFsLAotICAgICAgICAgICAgICAgIHJlZ2V4OiByZWdleC5yZWdleCwK
LSAgICAgICAgICAgICAgICByYW5nZTogW3BvcywgaW5kZXhdLAotICAgICAgICAgICAgICAgIGxv
YzogbG9jCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQorICAgICAgICBwZWVrKCk7CisgICAg
ICAgIG5vZGUgPSBuZXcgTm9kZSgpOwogCi0gICAgICAgIHJldHVybiByZWdleDsKKyAgICAgICAg
Ym9keSA9IHBhcnNlU2NyaXB0Qm9keSgpOworICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9n
cmFtKGJvZHksIHN0YXRlLnNvdXJjZVR5cGUpOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIGZpbHRl
clRva2VuTG9jYXRpb24oKSB7CkBAIC01MTIyLDQ4ICs1NDU0LDggQEAKICAgICAgICAgZXh0cmEu
dG9rZW5zID0gdG9rZW5zOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHBhdGNoKCkgewotICAgICAg
ICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAg
IGV4dHJhLmFkdmFuY2UgPSBhZHZhbmNlOwotICAgICAgICAgICAgZXh0cmEuc2NhblJlZ0V4cCA9
IHNjYW5SZWdFeHA7Ci0KLSAgICAgICAgICAgIGFkdmFuY2UgPSBjb2xsZWN0VG9rZW47Ci0gICAg
ICAgICAgICBzY2FuUmVnRXhwID0gY29sbGVjdFJlZ2V4OwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gdW5wYXRjaCgpIHsKLSAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5zY2FuUmVn
RXhwID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICBhZHZhbmNlID0gZXh0cmEuYWR2YW5j
ZTsKLSAgICAgICAgICAgIHNjYW5SZWdFeHAgPSBleHRyYS5zY2FuUmVnRXhwOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gVGhpcyBpcyB1c2VkIHRvIG1vZGlmeSB0aGUgZGVsZWdhdGUuCi0K
LSAgICBmdW5jdGlvbiBleHRlbmQob2JqZWN0LCBwcm9wZXJ0aWVzKSB7Ci0gICAgICAgIHZhciBl
bnRyeSwgcmVzdWx0ID0ge307Ci0KLSAgICAgICAgZm9yIChlbnRyeSBpbiBvYmplY3QpIHsKLSAg
ICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovCi0gICAgICAgICAgICBpZiAob2Jq
ZWN0Lmhhc093blByb3BlcnR5KGVudHJ5KSkgewotICAgICAgICAgICAgICAgIHJlc3VsdFtlbnRy
eV0gPSBvYmplY3RbZW50cnldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Zm9yIChlbnRyeSBpbiBwcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25v
cmUgZWxzZSAqLwotICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoZW50
cnkpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0W2VudHJ5XSA9IHByb3BlcnRpZXNbZW50cnld
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0KICAgICBmdW5jdGlvbiB0b2tlbml6ZShjb2RlLCBvcHRpb25zKSB7CiAgICAgICAgIHZh
ciB0b1N0cmluZywKLSAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICAgdG9rZW5zOwogCiAg
ICAgICAgIHRvU3RyaW5nID0gU3RyaW5nOwpAQCAtNTE3MSwyMSArNTQ2MywyNCBAQAogICAgICAg
ICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOwogICAgICAgICB9CiAKLSAgICAgICAgZGVsZWdh
dGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CiAgICAgICAgIHNvdXJjZSA9IGNvZGU7CiAgICAgICAg
IGluZGV4ID0gMDsKICAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAx
IDogMDsKICAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4
OworICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICBzdGFydExp
bmVTdGFydCA9IGxpbmVTdGFydDsKICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAg
ICAgICAgbG9va2FoZWFkID0gbnVsbDsKICAgICAgICAgc3RhdGUgPSB7Ci0gICAgICAgICAgICBh
bGxvd0tleXdvcmQ6IHRydWUsCiAgICAgICAgICAgICBhbGxvd0luOiB0cnVlLAotICAgICAgICAg
ICAgbGFiZWxTZXQ6IG5ldyBTdHJpbmdNYXAoKSwKKyAgICAgICAgICAgIGFsbG93WWllbGQ6IHRy
dWUsCisgICAgICAgICAgICBsYWJlbFNldDoge30sCiAgICAgICAgICAgICBpbkZ1bmN0aW9uQm9k
eTogZmFsc2UsCiAgICAgICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsCiAgICAgICAgICAgICBp
blN3aXRjaDogZmFsc2UsCi0gICAgICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMQorICAgICAg
ICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEsCisgICAgICAgICAgICBjdXJseVN0YWNrOiBbXQog
ICAgICAgICB9OwogCiAgICAgICAgIGV4dHJhID0ge307CkBAIC01MjExLDIyICs1NTA2LDE5IEBA
CiAgICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTsKICAgICAgICAgfQogCi0gICAgICAgIHBh
dGNoKCk7Ci0KICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHBlZWsoKTsKICAgICAgICAgICAg
IGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGV4dHJhLnRva2VuczsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdG9rZW4gPSBs
ZXgoKTsKKyAgICAgICAgICAgIGxleCgpOwogICAgICAgICAgICAgd2hpbGUgKGxvb2thaGVhZC50
eXBlICE9PSBUb2tlbi5FT0YpIHsKICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAg
ICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgICAgICAgICBsZXgoKTsKICAgICAg
ICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikgewotICAgICAgICAgICAgICAgICAgICB0b2tl
biA9IGxvb2thaGVhZDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmVycm9ycykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2gobGV4RXJyb3IpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjb3JkRXJyb3IobGV4RXJyb3IpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBvbiB0aGUgZmlyc3QgZXJyb3IKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGluZmluaXRlIGxvb3BzLgogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MjQ3LDcgKzU1MzksNiBAQAogICAgICAgICB9IGNh
dGNoIChlKSB7CiAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICB9IGZpbmFsbHkgewotICAg
ICAgICAgICAgdW5wYXRjaCgpOwogICAgICAgICAgICAgZXh0cmEgPSB7fTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gdG9rZW5zOwpAQCAtNTI2MSwyNCArNTU1MiwyNyBAQAogICAgICAgICAg
ICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOwogICAgICAgICB9CiAKLSAgICAgICAgZGVsZWdhdGUg
PSBTeW50YXhUcmVlRGVsZWdhdGU7CiAgICAgICAgIHNvdXJjZSA9IGNvZGU7CiAgICAgICAgIGlu
ZGV4ID0gMDsKICAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDog
MDsKICAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4Owor
ICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICBzdGFydExpbmVT
dGFydCA9IGxpbmVTdGFydDsKICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAgICAg
ICAgbG9va2FoZWFkID0gbnVsbDsKICAgICAgICAgc3RhdGUgPSB7Ci0gICAgICAgICAgICBhbGxv
d0tleXdvcmQ6IGZhbHNlLAogICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSwKLSAgICAgICAgICAg
IGxhYmVsU2V0OiBuZXcgU3RyaW5nTWFwKCksCi0gICAgICAgICAgICBwYXJlbnRoZXNpemVkQ291
bnQ6IDAsCisgICAgICAgICAgICBhbGxvd1lpZWxkOiB0cnVlLAorICAgICAgICAgICAgbGFiZWxT
ZXQ6IHt9LAogICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAogICAgICAgICAgICAg
aW5JdGVyYXRpb246IGZhbHNlLAogICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAogICAgICAg
ICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEsCi0gICAgICAgICAgICB5aWVsZEFsbG93ZWQ6IGZh
bHNlCisgICAgICAgICAgICBjdXJseVN0YWNrOiBbXSwKKyAgICAgICAgICAgIHNvdXJjZVR5cGU6
ICdzY3JpcHQnCiAgICAgICAgIH07CisgICAgICAgIHN0cmljdCA9IGZhbHNlOwogCiAgICAgICAg
IGV4dHJhID0ge307CiAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcp
IHsKQEAgLTUyODcsMTcgKzU1ODEsOSBAQAogICAgICAgICAgICAgZXh0cmEuYXR0YWNoQ29tbWVu
dCA9ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSAnYm9vbGVhbicpICYmIG9wdGlv
bnMuYXR0YWNoQ29tbWVudDsKIAogICAgICAgICAgICAgaWYgKGV4dHJhLmxvYyAmJiBvcHRpb25z
LnNvdXJjZSAhPT0gbnVsbCAmJiBvcHRpb25zLnNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAg
ICAgICAgICAgICAgZGVsZWdhdGUgPSBleHRlbmQoZGVsZWdhdGUsIHsKLSAgICAgICAgICAgICAg
ICAgICAgJ3Bvc3RQcm9jZXNzJzogZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUubG9jLnNvdXJjZSA9IHRvU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZXh0cmEuc291cmNlID0gdG9TdHJp
bmcob3B0aW9ucy5zb3VyY2UpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAob3B0
aW9ucy5zb3VyY2VUeXBlID09PSAnbW9kdWxlJykgewotICAgICAgICAgICAgICAgIGV4dHJhLmlz
TW9kdWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0
aW9ucy50b2tlbnMgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRva2VucykgewogICAgICAgICAg
ICAgICAgIGV4dHJhLnRva2VucyA9IFtdOwogICAgICAgICAgICAgfQpAQCAtNTMxNCw5ICs1NjAw
LDEzIEBACiAgICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdOwogICAg
ICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gJ21vZHVsZScpIHsKKyAgICAg
ICAgICAgICAgICAvLyB2ZXJ5IHJlc3RyaWN0aXZlIGNvbmRpdGlvbiBmb3Igbm93CisgICAgICAg
ICAgICAgICAgc3RhdGUuc291cmNlVHlwZSA9IG9wdGlvbnMuc291cmNlVHlwZTsKKyAgICAgICAg
ICAgICAgICBzdHJpY3QgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgcGF0Y2goKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHByb2dyYW0gPSBwYXJzZVBy
b2dyYW0oKTsKICAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09ICd1bmRl
ZmluZWQnKSB7CkBAIC01MzMyLDcgKzU2MjIsNiBAQAogICAgICAgICB9IGNhdGNoIChlKSB7CiAg
ICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgdW5w
YXRjaCgpOwogICAgICAgICAgICAgZXh0cmEgPSB7fTsKICAgICAgICAgfQogCkBAIC01MzQwLDE0
ICs1NjI5LDE0IEBACiAgICAgfQogCiAgICAgLy8gU3luYyB3aXRoICouanNvbiBtYW5pZmVzdHMu
Ci0gICAgZXhwb3J0cy52ZXJzaW9uID0gJzEuMS4wLWRldi1oYXJtb255JzsKKyAgICBleHBvcnRz
LnZlcnNpb24gPSAnMi42LjAnOwogCiAgICAgZXhwb3J0cy50b2tlbml6ZSA9IHRva2VuaXplOwog
CiAgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOwogCiAgICAgLy8gRGVlcCBjb3B5LgotICAgLyog
aXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwog
ICAgIGV4cG9ydHMuU3ludGF4ID0gKGZ1bmN0aW9uICgpIHsKICAgICAgICAgdmFyIG5hbWUsIHR5
cGVzID0ge307CiAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCShyZXZpc2lvbiAx
OTAwNjEpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2Ny
aXB0U3ludGF4VHJlZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2MCw4IEBAIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyczsKKyAgICAgICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFzc2lnbm1l
bnRQYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2F0aGVySWRlbnRpZmllcnMo
bm9kZS5sZWZ0KTsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAg
ICBjb25zb2xlLmFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgbm9kZSB0eXBlIGluIHZhcmlhYmxl
IGRlY2xhcmF0b3I6ICIgKyBub2RlLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
W107CkBAIC0yOTgsNiArMzAwLDExIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0g
Y2xhc3MgU2MKICAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKICAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmVsZW1lbnRzLCBjYWxsYmFjaywgc3RhdGUpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuQXNzaWdubWVudFBhdHRlcm46CisgICAgICAgICAgICBjYWxsYmFjayhub2Rl
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGVmdCwgY2FsbGJhY2ss
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5yaWdodCwgY2FsbGJhY2ss
IHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJsb2NrU3RhdGVtZW50OgogICAgICAgICAgICAgY2Fs
bGJhY2sobm9kZSwgc3RhdGUpOwogICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUu
Ym9keSwgY2FsbGJhY2ssIHN0YXRlKTsKQEAgLTQwMCw2ICs0MDcsOSBAQCBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZSA9IGNsYXNzIFNjCiAgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUub2JqZWN0LCBjYWxsYmFjaywgc3RhdGUpOwogICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLnByb3BlcnR5LCBjYWxsYmFjaywgc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTWV0YVByb3Bl
cnR5OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
TWV0aG9kRGVmaW5pdGlvbjoKICAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKICAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5rZXksIGNhbGxiYWNrLCBzdGF0ZSk7CkBAIC00
MzYsNiArNDQ2LDkgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUgPSBjbGFzcyBTYwog
ICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOwogICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3Vw
ZXI6CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5T
d2l0Y2hTdGF0ZW1lbnQ6CiAgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CiAgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuZGlzY3JpbWluYW50LCBjYWxsYmFjaywgc3RhdGUp
OwpAQCAtNDc1LDggKzQ4OCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xh
c3MgU2MKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5UcnlTdGF0ZW1lbnQ6CiAgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CiAgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYmxvY2ssIGNhbGxiYWNrLCBzdGF0ZSk7Ci0gICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5ndWFyZGVkSGFuZGxlcnMsIGNhbGxiYWNr
LCBzdGF0ZSk7Ci0gICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5oYW5kbGVycywg
Y2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5oYW5kbGVy
LCBjYWxsYmFjaywgc3RhdGUpOwogICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmZpbmFs
aXplciwgY2FsbGJhY2ssIHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlVuYXJ5RXhwcmVzc2lvbjoK
QEAgLTUzNiw2ICs1NDgsMTQgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUgPSBjbGFz
cyBTYwogICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRy
ZWUobm9kZS5yaWdodCkKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAiQXNzaWdubWVudFBhdHRlcm4iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LkFzc2lnbm1lbnRQYXR0ZXJuLAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCksCisKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAiQXJyYXlFeHByZXNzaW9uIjoKICAg
ICAgICAgICAgIHJlc3VsdCA9IHsKICAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5BcnJheUV4cHJlc3Npb24sCkBAIC03MzAsNiArNzUw
LDE0IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAg
ICAgICAgICBjb21wdXRlZDogbm9kZS5jb21wdXRlZAogICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJNZXRhUHJvcGVydHkiOgorICAgICAgICAgICAgLy8g
aS5lOiBuZXcudGFyZ2V0IHByb2R1Y2VzIHttZXRhOiAibmV3IiwgcHJvcGVydHk6ICJ0YXJnZXQi
fQorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk1ldGFQcm9wZXJ0eSwKKyAgICAgICAgICAg
ICAgICBtZXRhOiBub2RlLm1ldGEsCisgICAgICAgICAgICAgICAgcHJvcGVydHk6IG5vZGUucHJv
cGVydHkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAi
TWV0aG9kRGVmaW5pdGlvbiI6CiAgICAgICAgICAgICByZXN1bHQgPSB7CiAgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTWV0aG9kRGVm
aW5pdGlvbiwKQEAgLTc3MCw2ICs3OTgsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZSA9IGNsYXNzIFNjCiAgICAgICAgIGNhc2UgIlByb2dyYW0iOgogICAgICAgICAgICAgcmVzdWx0
ID0gewogICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLlByb2dyYW0sCisgICAgICAgICAgICAgICAgc291cmNlVHlwZTogbm9kZS5zb3Vy
Y2VUeXBlLAogICAgICAgICAgICAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAodGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpCiAgICAgICAgICAgICB9OwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC04MDMsNiArODMyLDExIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlID0gY2xhc3MgU2MKICAgICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlKG5vZGUuYXJndW1lbnQpLAogICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJTdXBlciI6CisgICAgICAgICAgICByZXN1bHQgPSB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuU3VwZXIKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSAiU3dpdGNoU3RhdGVtZW50IjoKICAgICAgICAgICAgIHJlc3VsdCA9IHsKICAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0
Y2hTdGF0ZW1lbnQsCkBAIC04NTMsOSArODg3LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUgPSBjbGFzcyBTYwogICAgICAgICAgICAgcmVzdWx0ID0gewogICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRyeVN0YXRlbWVu
dCwKICAgICAgICAgICAgICAgICBibG9jazogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVl
KG5vZGUuYmxvY2spLAotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGFyZSBndWFyZGVk
IGhhbmRsZXJzPwotICAgICAgICAgICAgICAgIGd1YXJkZWRIYW5kbGVyczogbm9kZS5ndWFyZGVk
SGFuZGxlcnMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwK
LSAgICAgICAgICAgICAgICBoYW5kbGVyczogbm9kZS5oYW5kbGVycy5tYXAodGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIGhhbmRsZXI6
IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmhhbmRsZXIpLAogICAgICAgICAg
ICAgICAgIGZpbmFsaXplcjogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuZmlu
YWxpemVyKQogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTI1LDYgKzk1
Nyw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlID0KICAgICBBcnJh
eUV4cHJlc3Npb246IFN5bWJvbCgiYXJyYXktZXhwcmVzc2lvbiIpLAogICAgIEFycmF5UGF0dGVy
bjogU3ltYm9sKCJhcnJheS1wYXR0ZXJuIiksCiAgICAgQXNzaWdubWVudEV4cHJlc3Npb246IFN5
bWJvbCgiYXNzaWdubWVudC1leHByZXNzaW9uIiksCisgICAgQXNzaWdubWVudFBhdHRlcm46IFN5
bWJvbCgiYXNzaWdubWVudC1wYXR0ZXJuIiksCiAgICAgQmluYXJ5RXhwcmVzc2lvbjogU3ltYm9s
KCJiaW5hcnktZXhwcmVzc2lvbiIpLAogICAgIEJsb2NrU3RhdGVtZW50OiBTeW1ib2woImJsb2Nr
LXN0YXRlbWVudCIpLAogICAgIEJyZWFrU3RhdGVtZW50OiBTeW1ib2woImJyZWFrLXN0YXRlbWVu
dCIpLApAQCAtOTUwLDYgKzk4Myw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlID0KICAgICBMaXRlcmFsOiBTeW1ib2woImxpdGVyYWwiKSwKICAgICBMb2dpY2FsRXhw
cmVzc2lvbjogU3ltYm9sKCJsb2dpY2FsLWV4cHJlc3Npb24iKSwKICAgICBNZW1iZXJFeHByZXNz
aW9uOiBTeW1ib2woIm1lbWJlci1leHByZXNzaW9uIiksCisgICAgTWV0YVByb3BlcnR5OiBTeW1i
b2woIm1ldGEtcHJvcGVydHkiKSwKICAgICBNZXRob2REZWZpbml0aW9uOiBTeW1ib2woIm1ldGhv
ZC1kZWZpbml0aW9uIiksCiAgICAgTmV3RXhwcmVzc2lvbjogU3ltYm9sKCJuZXctZXhwcmVzc2lv
biIpLAogICAgIE9iamVjdEV4cHJlc3Npb246IFN5bWJvbCgib2JqZWN0LWV4cHJlc3Npb24iKSwK
QEAgLTk1OSw2ICs5OTMsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZSA9CiAgICAgUmV0dXJuU3RhdGVtZW50OiBTeW1ib2woInJldHVybi1zdGF0ZW1lbnQiKSwKICAg
ICBTZXF1ZW5jZUV4cHJlc3Npb246IFN5bWJvbCgic2VxdWVuY2UtZXhwcmVzc2lvbiIpLAogICAg
IFNwcmVhZEVsZW1lbnQ6IFN5bWJvbCgic3ByZWFkLWVsZW1lbnQiKSwKKyAgICBTdXBlcjogU3lt
Ym9sKCJzdXBlciIpLAogICAgIFN3aXRjaENhc2U6IFN5bWJvbCgic3dpdGNoLWNhc2UiKSwKICAg
ICBTd2l0Y2hTdGF0ZW1lbnQ6IFN5bWJvbCgic3dpdGNoLXN0YXRlbWVudCIpLAogICAgIFRhZ2dl
ZFRlbXBsYXRlRXhwcmVzc2lvbjogU3ltYm9sKCJ0YWdnZWQtdGVtcGxhdGUtZXhwcmVzc2lvbiIp
LApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMDk4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMDktMjEgIFNhYW0gYmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogdXBkYXRlIEVzcHJp
bWEgdG8gbGF0ZXN0IHZlcnNpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0ODk2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaW5zcGVjdG9yL21vZGVsL3BhcnNlLXNjcmlwdC1zeW50YXgtdHJlZS1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL21vZGVsL3BhcnNlLXNjcmlwdC1zeW50
YXgtdHJlZS5odG1sOgorCiAyMDE1LTA5LTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIEFkZCBtb3JlIHJlbmRlcmluZyB0ZXN0cyBmb3Igc2hhZG93IERPTQpJ
bmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL3BhcnNlLXNjcmlwdC1zeW50YXgtdHJl
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVs
L3BhcnNlLXNjcmlwdC1zeW50YXgtdHJlZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE5MDA2MSkK
KysrIExheW91dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRyZWUt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw1ICszOCw3IEBAIHBhc3NlZCBWYXJp
YWJsZURlY2xhcmF0aW9uCiBwYXNzZWQgVmFyaWFibGVEZWNsYXJhdG9yCiBwYXNzZWQgV2hpbGVT
dGF0ZW1lbnQKIHBhc3NlZCBXaXRoU3RhdGVtZW50CitwYXNzZWQgQ2xhc3NTdGF0ZW1lbnQsIFN1
cGVyLCBNZXRhUHJvcGVydHkKK3Bhc3NlZCBBc3NpZ25tZW50UGF0dGVybgogcGFzc2VkIEFMTCBU
RVNUUwogCkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5
bnRheC10cmVlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVs
L3BhcnNlLXNjcmlwdC1zeW50YXgtdHJlZS5odG1sCShyZXZpc2lvbiAxOTAwNjEpCisrKyBMYXlv
dXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICBub2Rl
ID0gbWFrZU5vZGUoInRyeSB7fSBjYXRjaChlKSB7fSAiLCBmYWxzZSk7CiAgICAgSW5zcGVjdG9y
VGVzdC5hc3NlcnQobm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5UcnlTdGF0ZW1lbnQpOwogICAgIEluc3BlY3RvclRlc3QubG9nKCJwYXNzZWQgVHJ5
U3RhdGVtZW50Iik7Ci0gICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5oYW5kbGVycy5sZW5n
dGggPT09IDEpOwotICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuaGFuZGxlcnNbMF0udHlw
ZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ2F0Y2hDbGF1c2Up
OworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuaGFuZGxlci50eXBlID09PSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5DYXRjaENsYXVzZSk7CiAgICAgSW5zcGVj
dG9yVGVzdC5sb2coInBhc3NlZCBDYXRjaENsYXVzZSIpOwogCiAgICAgbm9kZSA9IG1ha2VOb2Rl
KCJmb28gPyBiYXIgOiBiYXo7IiwgdHJ1ZSk7CkBAIC00NDcsNiArNDQ2LDM2IEBAIGZ1bmN0aW9u
IHRlc3QoKQogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9keS50eXBlID09PSBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5CbG9ja1N0YXRlbWVudCk7CiAgICAg
SW5zcGVjdG9yVGVzdC5sb2coInBhc3NlZCBXaXRoU3RhdGVtZW50Iik7CiAKKyAgICBub2RlID0g
bWFrZU5vZGUoImNsYXNzIEMgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgbmV3LnRhcmdldDsg
fSB9IiwgZmFsc2UpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUudHlwZSA9PT0gV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ2xhc3NEZWNsYXJhdGlvbik7Cisg
ICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5ib2R5LnR5cGUgPT09IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNsYXNzQm9keSk7CisgICAgSW5zcGVjdG9yVGVzdC5h
c3NlcnQobm9kZS5ib2R5LmJvZHlbMF0udHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuTWV0aG9kRGVmaW5pdGlvbik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3Nl
cnQobm9kZS5ib2R5LmJvZHlbMF0udmFsdWUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNzaW9uKTsKKyAgICBJbnNwZWN0b3JUZXN0
LmFzc2VydChub2RlLmJvZHkuYm9keVswXS52YWx1ZS5ib2R5LnR5cGUgPT09IFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJsb2NrU3RhdGVtZW50KTsKKyAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydChub2RlLmJvZHkuYm9keVswXS52YWx1ZS5ib2R5LmJvZHkubGVuZ3RoID09
PSAyKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmJvZHkuYm9keVswXS52YWx1ZS5i
b2R5LmJvZHlbMF0udHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuRXhwcmVzc2lvblN0YXRlbWVudCk7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5i
b2R5LmJvZHlbMF0udmFsdWUuYm9keS5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSA9PT0gV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ2FsbEV4cHJlc3Npb24pOworICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9keS5ib2R5WzBdLnZhbHVlLmJvZHkuYm9keVswXS5l
eHByZXNzaW9uLmNhbGxlZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5TdXBlcik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5ib2R5LmJvZHlb
MF0udmFsdWUuYm9keS5ib2R5WzFdLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLkV4cHJlc3Npb25TdGF0ZW1lbnQpOworICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0KG5vZGUuYm9keS5ib2R5WzBdLnZhbHVlLmJvZHkuYm9keVsxXS5leHByZXNzaW9uLnR5cGUg
PT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk1ldGFQcm9wZXJ0eSk7
CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5ib2R5LmJvZHlbMF0udmFsdWUuYm9keS5i
b2R5WzFdLmV4cHJlc3Npb24ubWV0YSA9PT0gIm5ldyIpOworICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0KG5vZGUuYm9keS5ib2R5WzBdLnZhbHVlLmJvZHkuYm9keVsxXS5leHByZXNzaW9uLnByb3Bl
cnR5ID09PSAidGFyZ2V0Iik7CisgICAgSW5zcGVjdG9yVGVzdC5sb2coInBhc3NlZCBDbGFzc1N0
YXRlbWVudCwgU3VwZXIsIE1ldGFQcm9wZXJ0eSIpOworCisgICAgbm9kZSA9IG1ha2VOb2RlKCJs
ZXQgW3g9MjBdID0gW107IiwgZmFsc2UpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVE
ZWNsYXJhdGlvbik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5raW5kID09PSAibGV0
Iik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoID09
PSAxKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmRlY2xhcmF0aW9uc1swXS50eXBl
ID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xh
cmF0b3IpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuZGVjbGFyYXRpb25zWzBdLmlk
LnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFycmF5UGF0
dGVybik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQu
ZWxlbWVudHMubGVuZ3RoID09PSAxKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmRl
Y2xhcmF0aW9uc1swXS5pZC5lbGVtZW50c1swXS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5Bc3NpZ25tZW50UGF0dGVybik7CisgICAgSW5zcGVjdG9yVGVz
dC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQuZWxlbWVudHNbMF0ubGVmdC50eXBlID09
PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyKTsKKyAg
ICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmRlY2xhcmF0aW9uc1swXS5pZC5lbGVtZW50c1sw
XS5sZWZ0Lm5hbWUgPT09ICJ4Iik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5kZWNs
YXJhdGlvbnNbMF0uaWQuZWxlbWVudHNbMF0ucmlnaHQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTGl0ZXJhbCk7CisgICAgSW5zcGVjdG9yVGVzdC5hc3Nl
cnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQuZWxlbWVudHNbMF0ucmlnaHQudmFsdWUgPT09IDIw
KTsKKyAgICBJbnNwZWN0b3JUZXN0LmxvZygicGFzc2VkIEFzc2lnbm1lbnRQYXR0ZXJuIik7CisK
ICAgICBJbnNwZWN0b3JUZXN0LmxvZygicGFzc2VkIEFMTCBURVNUUyIpOwogICAgIEluc3BlY3Rv
clRlc3QuY29tcGxldGVUZXN0KCk7CiB9Cg==
</data>
<flag name="review"
          id="286910"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>