<?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>113433</bug_id>
          
          <creation_ts>2013-03-27 12:17:19 -0700</creation_ts>
          <short_desc>ContainerNode::removeChildren should first detach the children then remove them</short_desc>
          <delta_ts>2013-04-19 10:24:46 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>110352</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrei Bucur">abucur</reporter>
          <assigned_to name="Andrei Bucur">abucur</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>esprehn</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>864769</commentid>
    <comment_count>0</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-03-27 12:17:19 -0700</bug_when>
    <thetext>The order of operations in ContainerNode::removeChildren is unintuitive and can lead to subtle bugs. The function ContainerNode::removeChild first detaches the child and then removes it from the DOM tree. ContainerNode::removeChildren does it the other way around. This leaves the render tree in an inconsistent state when calling detach on the removed nodes (the renderers point to nodes that are no longer in the DOM).
The main reason invoked for this behaviour is the performance gain. However, the removeChildren method makes two iterations thorough the children list that may be avoided:
- removedChildren.reserveInitialCapacity(childNodeCount()); // childNodeCount is O(n)
- children detachment is another O(n)
The patch should also try to remove these time consumers as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867036</commentid>
    <comment_count>1</comment_count>
      <attachid>195951</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-01 04:13:55 -0700</bug_when>
    <thetext>Created attachment 195951
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867044</commentid>
    <comment_count>2</comment_count>
      <attachid>195951</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-04-01 04:50:18 -0700</bug_when>
    <thetext>Comment on attachment 195951
Patch

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

&gt; Source/WebCore/dom/ContainerNode.cpp:459
&gt; +static void willRemoveChildren(ContainerNode* container, NodeVector&amp; children)

This function has unclear purpose (doing both pre-removal tasks and building up the child vector). I think it would be better to pass in an initialized child vector and possibly rename the function to something more descriptive (though I don&apos;t have great suggestions, fireEventsBeforeRemovingAllChildren or something).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870792</commentid>
    <comment_count>3</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-08 08:31:16 -0700</bug_when>
    <thetext>This will be fixed in https://bugs.webkit.org/show_bug.cgi?id=113517 .

*** This bug has been marked as a duplicate of bug 113517 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875490</commentid>
    <comment_count>4</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-15 00:55:26 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=113517 is a lot harder than initially estimated. Just refactor the code a bit and first detach then remove the nodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875721</commentid>
    <comment_count>5</comment_count>
      <attachid>198113</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-15 05:24:39 -0700</bug_when>
    <thetext>Created attachment 198113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875765</commentid>
    <comment_count>6</comment_count>
      <attachid>198121</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-15 06:48:09 -0700</bug_when>
    <thetext>Created attachment 198121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876507</commentid>
    <comment_count>7</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-16 04:14:43 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 114677 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877731</commentid>
    <comment_count>8</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-18 00:54:12 -0700</bug_when>
    <thetext>Use this bug to track the simple change of first detaching a child before it is removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877830</commentid>
    <comment_count>9</comment_count>
      <attachid>198725</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-18 05:33:48 -0700</bug_when>
    <thetext>Created attachment 198725
Simple version of the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877900</commentid>
    <comment_count>10</comment_count>
      <attachid>198738</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-18 08:16:49 -0700</bug_when>
    <thetext>Created attachment 198738
Perf results for the very simple patch

innserHTML-setter.html and html5-full-render.html
There doesn&apos;t seem to be any performance regression. This is aligned with the small performance boost found in the more complex patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878361</commentid>
    <comment_count>11</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-04-19 04:02:34 -0700</bug_when>
    <thetext>I think the Simple version is the way to go. Make tiny changes and watch the perf and security issues as you go. Calling shrink(0) on the vector is also really weird, I don&apos;t think that&apos;s what you want to do since it frees the vector buffer and you end up mallocing again.

btw I don&apos;t think html5-full-render.html is the right benchmark for this. It&apos;s doing document.write() which goes directly at the parser/tree builder. It doesn&apos;t go through innerHTML which would benchmark this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878385</commentid>
    <comment_count>12</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-19 05:39:14 -0700</bug_when>
    <thetext>Great, thanks for the review!

(In reply to comment #11)
&gt; I think the Simple version is the way to go. Make tiny changes and watch the perf and security issues as you go. Calling shrink(0) on the vector is also really weird, I don&apos;t think that&apos;s what you want to do since it frees the vector buffer and you end up mallocing again.

shrink() doesn&apos;t modify the capacity. It will just remove the nodes, keeping the buffer intact. This is why I said reserveInitialCapacity() is not required any more.
shrinkCapacity() does what you describe.
The advanced patch saves a free() and possibly a malloc(). The free() that happens when exiting willRemoveChildren() and the possible malloc() when calling reserveInitialCapacity, if the inline size of the vector is smaller than the number of nodes. I&apos;m not counting the loop through the children required when calling reserveInitialCapacity.

&gt; 
&gt; btw I don&apos;t think html5-full-render.html is the right benchmark for this. It&apos;s doing document.write() which goes directly at the parser/tree builder. It doesn&apos;t go through innerHTML which would benchmark this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878455</commentid>
    <comment_count>13</comment_count>
      <attachid>198725</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-19 08:41:51 -0700</bug_when>
    <thetext>Comment on attachment 198725
Simple version of the patch

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

&gt; Source/WebCore/dom/ContainerNode.cpp:633
&gt; -            for (size_t i = 0; i &lt; removedChildren.size(); ++i) {
&gt; -                Node* removedChild = removedChildren[i].get();
&gt; -                if (removedChild-&gt;attached())
&gt; -                    removedChild-&gt;detach();
&gt; +                removedChildren.append(n.release());

Why aren&apos;t we moving this loop before the other loop?
Is the comment you removed no longer applicable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878540</commentid>
    <comment_count>14</comment_count>
      <attachid>198725</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-19 09:21:11 -0700</bug_when>
    <thetext>Comment on attachment 198725
Simple version of the patch

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

&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:633
&gt;&gt; +                removedChildren.append(n.release());
&gt; 
&gt; Why aren&apos;t we moving this loop before the other loop?
&gt; Is the comment you removed no longer applicable?

No, it&apos;s not applicable. The pointers are fixed after each node is removed and I didn&apos;t find any evidence of detachment being faster for removed nodes that a new iteration through them is worth the effort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878541</commentid>
    <comment_count>15</comment_count>
      <attachid>198725</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-19 09:23:10 -0700</bug_when>
    <thetext>Comment on attachment 198725
Simple version of the patch

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

&gt;&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:633
&gt;&gt;&gt; +                removedChildren.append(n.release());
&gt;&gt; 
&gt;&gt; Why aren&apos;t we moving this loop before the other loop?
&gt;&gt; Is the comment you removed no longer applicable?
&gt; 
&gt; No, it&apos;s not applicable. The pointers are fixed after each node is removed and I didn&apos;t find any evidence of detachment being faster for removed nodes that a new iteration through them is worth the effort.

Please clarify that in the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878549</commentid>
    <comment_count>16</comment_count>
      <attachid>198893</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-19 09:56:49 -0700</bug_when>
    <thetext>Created attachment 198893
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878559</commentid>
    <comment_count>17</comment_count>
      <attachid>198893</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-19 10:24:42 -0700</bug_when>
    <thetext>Comment on attachment 198893
Patch for landing

Clearing flags on attachment: 198893

Committed r148754: &lt;http://trac.webkit.org/changeset/148754&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878560</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-19 10:24:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195951</attachid>
            <date>2013-04-01 04:13:55 -0700</date>
            <delta_ts>2013-04-15 05:24:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113433-20130401141347.patch</filename>
            <type>text/plain</type>
            <size>4700</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3MzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODg2ZjE3ODVkNDM3Zjk1
ODEzNzkzZDIyZjUwNDZiNTQzNzdhYjg5YS4uNjdmNTUzZDE2NjQ0ZGViYjFjOTRkMWNmMDBlM2Nh
YTg1YzM1NzI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEzLTA0LTAxICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIENvbnRhaW5lck5vZGU6OnJl
bW92ZUNoaWxkcmVuIHNob3VsZCBmaXJzdCBkZXRhY2ggdGhlIGNoaWxkcmVuIHRoZW4gcmVtb3Zl
IHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MzQzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
ZSBwYXRjaCBmaXhlcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBDb250YWluZXJOb2RlOjpy
ZW1vdmVDaGlsZHJlbiBhbmQgcmVtb3ZlcyB0d28gdW5uZWNlc2FyeQorICAgICAgICBpdGVyYXRp
b25zIHRocm91Z2ggdGhlIHJlbW92ZWQgY2hpbGRyZW4gbGlzdC4KKyAgICAgICAgQ3VycmVudGx5
LCBDb250YWluZXJOb2RlOjpyZW1vdmVDaGlsZHJlbiBpbml0aWFsbHkgcmVtb3ZlcyB0aGUgbm9k
ZXMgZnJvbSB0aGUgRE9NIHRyZWUgYW5kIHRoZW4KKyAgICAgICAgY2FsbHMgZGV0YWNoKCkgb24g
ZWFjaCBvZiB0aGVtLiBUaGlzIGlzIGFudGktaW50dWl0aXZlIGFuZCBjYW4gbGVhZCB0byBzdWJ0
bGUgYnVncyBiZWNhdXNlIHRoZQorICAgICAgICBkZXRhY2hlZCByZW5kZXJlcnMgYXJlIG5vdCBi
YWNrZWQgYnkgYSB2YWxpZCBET00gdHJlZSBhbnkgbW9yZS4gV2l0aCB0aGUgcGF0Y2gsIHRoZSBu
b2RlcyBhcmUgZmlyc3QKKyAgICAgICAgZGV0YWNoZWQgYW5kIHRoZW4gcmVtb3ZlZCBmcm9tIHRo
ZSBET00uCisgICAgICAgIFRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlLCB0aGUgdmVjdG9yIGNv
bXB1dGVkIGluIHdpbGxSZW1vdmVDaGlsZHJlbiBhbmQgY29udGFpbmluZyB0aGUgcmVtb3ZlZCBu
b2RlcyAKKyAgICAgICAgaXMgcmV1c2VkIGFuZCBub3QgcmVjb25zdHJ1Y3RlZCBhcyBpdCBjdXJy
ZW50bHkgaGFwcGVucy4KKyAgICAgICAgVXNpbmcgdGhpcyBwYXRjaCBvbiBteSBtYWNoaW5lLCB0
aGUgUGFyc2VyL2lubmVySFRNTC1zZXR0dGVyLmh0bWwgaXMgaW1wcm92ZWQgZnJvbSBhcm91bmQg
MTM3cnVucy9zIHRvCisgICAgICAgIDE0N3J1bnMvcy4KKworICAgICAgICBUZXN0czogTm8gbmV3
IHRlc3RzIGJlY2F1c2UgdGhlcmUncyBubyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAg
ICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpbGxSZW1v
dmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZW1vdmVDaGls
ZHJlbik6CisKIDIwMTMtMDQtMDEgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEZsYW1lIENoYXJ0LiBFeHRyYWN0IGl0ZW0g
dG8gY29vcmRpbmF0ZXMgY29udmVyc2lvbiBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggY2JmNTkzZWEzNGNhZjMzZjQ5ZTJkNTE3
NDA5NTlkYWYyMzkxYTI3ZC4uOGY4M2IwYTE2YzkxYjk1YzU5NjY1YWY0ZTcyOGM3ZWFhMzkzNTI2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtNDU2LDkgKzQ1Niw4IEBA
IHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZChOb2RlKiBjaGlsZCkKICAgICBDaGlsZEZyYW1l
RGlzY29ubmVjdG9yKGNoaWxkKS5kaXNjb25uZWN0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHdpbGxS
ZW1vdmVDaGlsZHJlbihDb250YWluZXJOb2RlKiBjb250YWluZXIpCitzdGF0aWMgdm9pZCB3aWxs
UmVtb3ZlQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogY29udGFpbmVyLCBOb2RlVmVjdG9yJiBjaGls
ZHJlbikKIHsKLSAgICBOb2RlVmVjdG9yIGNoaWxkcmVuOwogICAgIGdldENoaWxkTm9kZXMoY29u
dGFpbmVyLCBjaGlsZHJlbik7CiAKICAgICBjb250YWluZXItPmRvY3VtZW50KCktPm5vZGVDaGls
ZHJlbldpbGxCZVJlbW92ZWQoY29udGFpbmVyKTsKQEAgLTYwNiwyMCArNjA1LDE5IEBAIHZvaWQg
Q29udGFpbmVyTm9kZTo6cmVtb3ZlQ2hpbGRyZW4oKQogCiAgICAgLy8gRG8gYW55IHByZXAgd29y
ayBuZWVkZWQgYmVmb3JlIGFjdHVhbGx5IHN0YXJ0aW5nIHRvIGRldGFjaAogICAgIC8vIGFuZCBy
ZW1vdmUuLi4gZS5nLiBzdG9wIGxvYWRpbmcgZnJhbWVzLCBmaXJlIHVubG9hZCBldmVudHMuCi0g
ICAgd2lsbFJlbW92ZUNoaWxkcmVuKHByb3RlY3QuZ2V0KCkpOworICAgIE5vZGVWZWN0b3IgcmVt
b3ZlZENoaWxkcmVuOworICAgIHdpbGxSZW1vdmVDaGlsZHJlbihwcm90ZWN0LmdldCgpLCByZW1v
dmVkQ2hpbGRyZW4pOwogCi0gICAgVmVjdG9yPFJlZlB0cjxOb2RlPiwgMTA+IHJlbW92ZWRDaGls
ZHJlbjsKLSAgICB7CisgICAgaWYgKHJlbW92ZWRDaGlsZHJlbi5zaXplKCkpIHsKICAgICAgICAg
V2lkZ2V0SGllcmFyY2h5VXBkYXRlc1N1c3BlbnNpb25TY29wZSBzdXNwZW5kV2lkZ2V0SGllcmFy
Y2h5VXBkYXRlczsKICAgICAgICAgewogICAgICAgICAgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0
aW9uIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKLSAgICAgICAgICAgIHJlbW92ZWRDaGlsZHJlbi5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNoaWxkTm9kZUNvdW50KCkpOwogICAgICAgICAgICAgd2hp
bGUgKFJlZlB0cjxOb2RlPiBuID0gbV9maXJzdENoaWxkKSB7CiAgICAgICAgICAgICAgICAgTm9k
ZSogbmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW1vdmUg
dGhlIG5vZGUgZnJvbSB0aGUgdHJlZSBiZWZvcmUgY2FsbGluZyBkZXRhY2ggb3IgcmVtb3ZlZEZy
b21Eb2N1bWVudCAoNDQyNzAyNCwgNDEyOTc0NCkuCi0gICAgICAgICAgICAgICAgLy8gcmVtb3Zl
Q2hpbGQoKSBkb2VzIHRoaXMgYWZ0ZXIgY2FsbGluZyBkZXRhY2goKS4gVGhlcmUgaXMgbm8gZXhw
bGFuYXRpb24gZm9yCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBkaXNjcmVwYW5jeSBiZXR3ZWVu
IHJlbW92ZUNoaWxkKCkgYW5kIGl0cyBvcHRpbWl6ZWQgdmVyc2lvbiByZW1vdmVDaGlsZHJlbigp
LgorICAgICAgICAgICAgICAgIGlmIChuLT5hdHRhY2hlZCgpKQorICAgICAgICAgICAgICAgICAg
ICBuLT5kZXRhY2goKTsKKwogICAgICAgICAgICAgICAgIG4tPnNldFByZXZpb3VzU2libGluZygw
KTsKICAgICAgICAgICAgICAgICBuLT5zZXROZXh0U2libGluZygwKTsKICAgICAgICAgICAgICAg
ICBuLT5zZXRQYXJlbnRPclNoYWRvd0hvc3ROb2RlKDApOwpAQCAtNjI4LDE5ICs2MjYsOCBAQCB2
b2lkIENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkcmVuKCkKICAgICAgICAgICAgICAgICBtX2Zp
cnN0Q2hpbGQgPSBuZXh0OwogICAgICAgICAgICAgICAgIGlmIChuID09IG1fbGFzdENoaWxkKQog
ICAgICAgICAgICAgICAgICAgICBtX2xhc3RDaGlsZCA9IDA7Ci0gICAgICAgICAgICAgICAgcmVt
b3ZlZENoaWxkcmVuLmFwcGVuZChuLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIERldGFjaCB0aGUgbm9kZXMgb25seSBhZnRlciBwcm9wZXJseSByZW1vdmVkIGZy
b20gdGhlIHRyZWUgYmVjYXVzZQotICAgICAgICAgICAgLy8gYS4gZGV0YWNoaW5nIHJlcXVpcmVz
IGEgcHJvcGVyIERPTSB0cmVlIChmb3IgY291bnRlcnMgYW5kIHF1b3RlcyBmb3IKLSAgICAgICAg
ICAgIC8vIGV4YW1wbGUpIGFuZCBkdXJpbmcgdGhlIHByZXZpb3VzIGxvb3AgdGhlIG5leHQgc2li
bGluZyBzdGlsbCBwb2ludHMgdG8KLSAgICAgICAgICAgIC8vIHRoZSBub2RlIGJlaW5nIHJlbW92
ZWQgd2hpbGUgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBkb2VzIG5vdCBwb2ludCBiYWNrCi0gICAg
ICAgICAgICAvLyBhbmQgZG9lcyBub3QgcG9pbnQgdG8gdGhlIHNhbWUgcGFyZW50IGFzIGl0cyBu
ZXh0IHNpYmxpbmcuCi0gICAgICAgICAgICAvLyBiLiBkZXN0cm95aW5nIFJlbmRlcmVycyBvZiBz
dGFuZGFsb25lIG5vZGVzIGlzIHNvbWV0aW1lcyBmYXN0ZXIuCi0gICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHJlbW92ZWRDaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgIE5vZGUqIHJlbW92ZWRDaGlsZCA9IHJlbW92ZWRDaGlsZHJlbltpXS5nZXQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAocmVtb3ZlZENoaWxkLT5hdHRhY2hlZCgpKQotICAgICAgICAgICAg
ICAgICAgICByZW1vdmVkQ2hpbGQtPmRldGFjaCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgbV9maXJzdENoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmcoMCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198113</attachid>
            <date>2013-04-15 05:24:39 -0700</date>
            <delta_ts>2013-04-15 06:48:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113433-20130415152412.patch</filename>
            <type>text/plain</type>
            <size>7533</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkyOWJmOWMxZWNiZGIy
MzNkODRlNWVjOGZkYTdjNjcyOWE5YzRlNS4uMDBiN2IyN2UxNjI4ZmJlYzFiNDgxYzc4MWJmMjY3
YmZhN2ExNTUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTA0LTE1ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIENvbnRhaW5lck5vZGU6OnJl
bW92ZUNoaWxkcmVuIHNob3VsZCBmaXJzdCBkZXRhY2ggdGhlIGNoaWxkcmVuIHRoZW4gcmVtb3Zl
IHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MzQzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
ZSBwYXRjaCBmaXhlcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBDb250YWluZXJOb2RlOjpy
ZW1vdmVDaGlsZHJlbiBhbmQgcmVtb3ZlcyB0d28gdW5uZWNlc2FyeQorICAgICAgICBpdGVyYXRp
b25zIHRocm91Z2ggdGhlIHJlbW92ZWQgY2hpbGRyZW4gbGlzdC4KKyAgICAgICAgQ3VycmVudGx5
LCBDb250YWluZXJOb2RlOjpyZW1vdmVDaGlsZHJlbiBpbml0aWFsbHkgcmVtb3ZlcyB0aGUgbm9k
ZXMgZnJvbSB0aGUgRE9NIHRyZWUgYW5kIHRoZW4KKyAgICAgICAgY2FsbHMgZGV0YWNoKCkgb24g
ZWFjaCBvZiB0aGVtLiBUaGlzIGlzIGFudGktaW50dWl0aXZlIGFuZCBjYW4gbGVhZCB0byBzdWJ0
bGUgYnVncyBiZWNhdXNlIHRoZQorICAgICAgICBkZXRhY2hlZCByZW5kZXJlcnMgYXJlIG5vdCBi
YWNrZWQgYnkgYSB2YWxpZCBET00gdHJlZSBhbnkgbW9yZS4gV2l0aCB0aGUgcGF0Y2gsIHRoZSBu
b2RlcyBhcmUgZmlyc3QKKyAgICAgICAgZGV0YWNoZWQgYW5kIHRoZW4gcmVtb3ZlZCBmcm9tIHRo
ZSBET00gKHRoaXMgcmVtb3ZlcyB0aGUgZmlyc3QgbG9vcCkuCisgICAgICAgIFRoZSBwYXRjaCBy
ZW1vdmVzIHRoZSBzZWNvbmQgbG9vcCB0aHJvdWdoIHRoZSBub2RlcyBpbiBtb3N0IGNhc2VzIGJ5
IHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuCisgICAgICAgIGluIHByZXBhcmVDb250
YWluZXJDaGlsZHJlblJlbW92YWwgYW5kIHVzaW5nIHRoYXQgdmFsdWUgdG8gaW5pdGlhbGl6ZSB0
aGUgcmVtb3ZlZCBub2RlcyB2ZWN0b3IuCisgICAgICAgIFVzaW5nIHRoaXMgcGF0Y2ggb24gbXkg
bWFjaGluZSwgdGhlIFBhcnNlci9pbm5lckhUTUwtc2V0dHRlci5odG1sIHBlcmZvcm1hbmNlIHRl
c3QgaXMgaW1wcm92ZWQgYnkgYXJvdW5kIDEtMiUuCisKKyAgICAgICAgVGVzdHM6IG5vIG5ldyBv
ciBjaGFuZ2VkIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlQ2hpbGRSZW1vdmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OnByZXBhcmVDb250YWluZXJDaGlsZHJlblJlbW92YWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFpbmVyTm9kZTo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFp
bmVyTm9kZTo6cmVtb3ZlQ2hpbGRyZW4pOgorCiAyMDEzLTA0LTE0ICBKYWVodW4gTGltICA8bGph
ZWh1bi5saW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW2NzczMtdGV4dF0gUGFyc2luZyAtd2Vi
a2l0LWhhbmdpbmcgdmFsdWUgZm9yIHRleHQtaW5kZW50IGZyb20gY3NzMy10ZXh0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggNDljYzg1NzA0ZTQwNTY0OTY4YWYwZDFjNWYz
OTk3N2NmMjMyODY4Yy4uNWUwNzE5ODgzODZiNGZkNzRkZjlmNTM4MTM2NGMxOThlY2FlMzAyNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtNDQ0LDcgKzQ0NCw3IEBAIGJv
b2wgQ29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQs
IE5vZGUqIG9sZENoaWxkLCBFeGNlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lk
IHdpbGxSZW1vdmVDaGlsZChOb2RlKiBjaGlsZCkKK3N0YXRpYyB2b2lkIHByZXBhcmVDaGlsZFJl
bW92YWwoTm9kZSogY2hpbGQpCiB7CiAgICAgQVNTRVJUKGNoaWxkLT5wYXJlbnROb2RlKCkpOwog
ICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUoY2hpbGQtPnBhcmVudE5vZGUoKSkud2lsbFJlbW92
ZUNoaWxkKGNoaWxkKTsKQEAgLTQ1NCwxMSArNDU0LDI2IEBAIHN0YXRpYyB2b2lkIHdpbGxSZW1v
dmVDaGlsZChOb2RlKiBjaGlsZCkKICAgICBDaGlsZEZyYW1lRGlzY29ubmVjdG9yKGNoaWxkKS5k
aXNjb25uZWN0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWlu
ZXJOb2RlKiBjb250YWluZXIpCisvLyBSZXR1cm5zIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIg
b2YgdGhlIGNoaWxkcmVuIHRoYXQgd2lsbCBiZSByZW1vdmVkLgorLy8gSXQgZG9lc24ndCByZXR1
cm4gYW4gZXhhY3QgdmFsdWUgYmVjYXVzZSB0aGUgc2NyaXB0cyB0aGlzIGZ1bmN0aW9uIGV4ZWN1
dGUKKy8vIG1heSBjaGFuZ2UgdGhlIGNvbnRhaW5lciBET00gc3ViLXRyZWUuIFRoaXMgY2FzZSBz
aG91bGRuJ3QgYmUgdmVyeSBjb21tb24KKy8vIGluIHRoZSB3aWxkIGJlY2F1c2UgaXQncyBub3Qg
dmVyeSB1c2VmdWwgKHRoZSBjaGlsZHJlbiB3aWxsIGJlIHJlbW92ZWQgYW55d2F5KQorLy8gYW5k
IHRoZSBiZWhhdmlvciBpbiB0aGUgZWRnZSBjYXNlcyB2YXJpZXMgYmV0d2VlbiBicm93c2Vycy4K
K3N0YXRpYyBzaXplX3QgcHJlcGFyZUNvbnRhaW5lckNoaWxkcmVuUmVtb3ZhbChDb250YWluZXJO
b2RlKiBjb250YWluZXIpCiB7CisgICAgLy8gRXhjbHVkZSB0aGlzIG5vZGUgd2hlbiBsb29raW5n
IGZvciByZW1vdmVkIGZvY3VzZWROb2RlIHNpbmNlIG9ubHkgY2hpbGRyZW4gd2lsbCBiZSByZW1v
dmVkLgorICAgIGNvbnRhaW5lci0+ZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVPZlN1YnRy
ZWUoY29udGFpbmVyLCB0cnVlKTsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBj
b250YWluZXItPmRvY3VtZW50KCktPnJlbW92ZUZ1bGxTY3JlZW5FbGVtZW50T2ZTdWJ0cmVlKGNv
bnRhaW5lciwgdHJ1ZSk7CisjZW5kaWYKKworICAgIC8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHRp
bWluZyBmb3IgdGFraW5nIHRoZSBjaGlsZHJlbiBzbmFwc2hvdC4KICAgICBOb2RlVmVjdG9yIGNo
aWxkcmVuOwogICAgIGdldENoaWxkTm9kZXMoY29udGFpbmVyLCBjaGlsZHJlbik7CiAKKyAgICAv
LyBGSVhNRTogTm9kZXMgYWRkZWQgYnkgdGhlIG11dGF0aW9uIGV2ZW50cy9mcmFtZSB1bmxvYWQg
ZXZlbnRzIGFyZSBub3QgcHJvY2Vzc2VkIGJ5IG5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoKS4K
KyAgICAvLyBUaGlzIGNhbiBsZWFkIHRvIGludmFsaWQgcmFuZ2VzIGluIHRoZSBkb2N1bWVudC4K
ICAgICBjb250YWluZXItPmRvY3VtZW50KCktPm5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoY29u
dGFpbmVyKTsKIAogICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oY29udGFpbmVy
KTsKQEAgLTQ2NywxMSArNDgyLDEzIEBAIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZHJlbihD
b250YWluZXJOb2RlKiBjb250YWluZXIpCiAgICAgICAgIG11dGF0aW9uLndpbGxSZW1vdmVDaGls
ZChjaGlsZCk7CiAgICAgICAgIGNoaWxkLT5ub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVXaWxs
RGV0YWNoKCk7CiAKLSAgICAgICAgLy8gZmlyZSByZW1vdmVkIGZyb20gZG9jdW1lbnQgbXV0YXRp
b24gZXZlbnRzLgorICAgICAgICAvLyBGaXJlIHJlbW92ZWQgZnJvbSBkb2N1bWVudCBtdXRhdGlv
biBldmVudHMuCiAgICAgICAgIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKGNoaWxkKTsKICAg
ICB9CiAKICAgICBDaGlsZEZyYW1lRGlzY29ubmVjdG9yKGNvbnRhaW5lcikuZGlzY29ubmVjdChD
aGlsZEZyYW1lRGlzY29ubmVjdG9yOjpEZXNjZW5kYW50c09ubHkpOworCisgICAgcmV0dXJuIGNo
aWxkcmVuLnNpemUoKTsKIH0KIAogdm9pZCBDb250YWluZXJOb2RlOjpkaXNjb25uZWN0RGVzY2Vu
ZGFudEZyYW1lcygpCkBAIC01MTYsNyArNTMzLDcgQEAgYm9vbCBDb250YWluZXJOb2RlOjpyZW1v
dmVDaGlsZChOb2RlKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICB3aWxsUmVtb3ZlQ2hpbGQoY2hpbGQuZ2V0KCkpOworICAg
IHByZXBhcmVDaGlsZFJlbW92YWwoY2hpbGQuZ2V0KCkpOwogCiAgICAgLy8gTXV0YXRpb24gZXZl
bnRzIG1pZ2h0IGhhdmUgbW92ZWQgdGhpcyBjaGlsZCBpbnRvIGEgZGlmZmVyZW50IHBhcmVudC4K
ICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSAhPSB0aGlzKSB7CkBAIC01OTUsMjkgKzYxMiwy
NCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkcmVuKCkKICAgICAvLyBUaGUgY29u
dGFpbmVyIG5vZGUgY2FuIGJlIHJlbW92ZWQgZnJvbSBldmVudCBoYW5kbGVycy4KICAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gcHJvdGVjdCh0aGlzKTsKIAotICAgIC8vIGV4Y2x1ZGUgdGhpcyBu
b2RlIHdoZW4gbG9va2luZyBmb3IgcmVtb3ZlZCBmb2N1c2VkTm9kZSBzaW5jZSBvbmx5IGNoaWxk
cmVuIHdpbGwgYmUgcmVtb3ZlZAotICAgIGRvY3VtZW50KCktPnJlbW92ZUZvY3VzZWROb2RlT2ZT
dWJ0cmVlKHRoaXMsIHRydWUpOwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIGRv
Y3VtZW50KCktPnJlbW92ZUZ1bGxTY3JlZW5FbGVtZW50T2ZTdWJ0cmVlKHRoaXMsIHRydWUpOwot
I2VuZGlmCi0KICAgICAvLyBEbyBhbnkgcHJlcCB3b3JrIG5lZWRlZCBiZWZvcmUgYWN0dWFsbHkg
c3RhcnRpbmcgdG8gZGV0YWNoCiAgICAgLy8gYW5kIHJlbW92ZS4uLiBlLmcuIHN0b3AgbG9hZGlu
ZyBmcmFtZXMsIGZpcmUgdW5sb2FkIGV2ZW50cy4KLSAgICB3aWxsUmVtb3ZlQ2hpbGRyZW4ocHJv
dGVjdC5nZXQoKSk7CisgICAgc2l6ZV90IGNoaWxkcmVuQ291bnRFc3RpbWF0ZSA9IHByZXBhcmVD
b250YWluZXJDaGlsZHJlblJlbW92YWwocHJvdGVjdC5nZXQoKSk7CiAKLSAgICBWZWN0b3I8UmVm
UHRyPE5vZGU+LCAxMD4gcmVtb3ZlZENoaWxkcmVuOworICAgIE5vZGVWZWN0b3IgcmVtb3ZlZENo
aWxkcmVuOworICAgIC8vIFVzZSB0aGUgZXN0aW1hdGVkIGNoaWxkcmVuIGNvdW50IHRvIGluaXRh
bGl6ZSB0aGUgcmVtb3ZlZAorICAgIC8vIGNoaWxkcmVuIHZlY3RvciB0aHVzIGF2b2lkaW5nIHNv
bWUgbWVtb3J5IGFsbG9jYXRpb25zLgorICAgIHJlbW92ZWRDaGlsZHJlbi5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGNoaWxkcmVuQ291bnRFc3RpbWF0ZSk7CiAgICAgewogICAgICAgICBXaWRnZXRI
aWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlIHN1c3BlbmRXaWRnZXRIaWVyYXJjaHlVcGRh
dGVzOwogICAgICAgICB7CiAgICAgICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNz
ZXJ0Tm9FdmVudERpc3BhdGNoOwotICAgICAgICAgICAgcmVtb3ZlZENoaWxkcmVuLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoY2hpbGROb2RlQ291bnQoKSk7CiAgICAgICAgICAgICB3aGlsZSAoUmVm
UHRyPE5vZGU+IG4gPSBtX2ZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBuZXh0
ID0gbi0+bmV4dFNpYmxpbmcoKTsKIAotICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgbm9k
ZSBmcm9tIHRoZSB0cmVlIGJlZm9yZSBjYWxsaW5nIGRldGFjaCBvciByZW1vdmVkRnJvbURvY3Vt
ZW50ICg0NDI3MDI0LCA0MTI5NzQ0KS4KLSAgICAgICAgICAgICAgICAvLyByZW1vdmVDaGlsZCgp
IGRvZXMgdGhpcyBhZnRlciBjYWxsaW5nIGRldGFjaCgpLiBUaGVyZSBpcyBubyBleHBsYW5hdGlv
biBmb3IKLSAgICAgICAgICAgICAgICAvLyB0aGlzIGRpc2NyZXBhbmN5IGJldHdlZW4gcmVtb3Zl
Q2hpbGQoKSBhbmQgaXRzIG9wdGltaXplZCB2ZXJzaW9uIHJlbW92ZUNoaWxkcmVuKCkuCisgICAg
ICAgICAgICAgICAgaWYgKG4tPmF0dGFjaGVkKCkpCisgICAgICAgICAgICAgICAgICAgIG4tPmRl
dGFjaCgpOworCiAgICAgICAgICAgICAgICAgbi0+c2V0UHJldmlvdXNTaWJsaW5nKDApOwogICAg
ICAgICAgICAgICAgIG4tPnNldE5leHRTaWJsaW5nKDApOwogICAgICAgICAgICAgICAgIG4tPnNl
dFBhcmVudE9yU2hhZG93SG9zdE5vZGUoMCk7CkBAIC02MjYsMTkgKzYzOCwxMCBAQCB2b2lkIENv
bnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkcmVuKCkKICAgICAgICAgICAgICAgICBtX2ZpcnN0Q2hp
bGQgPSBuZXh0OwogICAgICAgICAgICAgICAgIGlmIChuID09IG1fbGFzdENoaWxkKQogICAgICAg
ICAgICAgICAgICAgICBtX2xhc3RDaGlsZCA9IDA7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlZENo
aWxkcmVuLmFwcGVuZChuLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBuZXh0LT5zZXRQcmV2aW91c1NpYmxpbmcoMCk7
CiAKLSAgICAgICAgICAgIC8vIERldGFjaCB0aGUgbm9kZXMgb25seSBhZnRlciBwcm9wZXJseSBy
ZW1vdmVkIGZyb20gdGhlIHRyZWUgYmVjYXVzZQotICAgICAgICAgICAgLy8gYS4gZGV0YWNoaW5n
IHJlcXVpcmVzIGEgcHJvcGVyIERPTSB0cmVlIChmb3IgY291bnRlcnMgYW5kIHF1b3RlcyBmb3IK
LSAgICAgICAgICAgIC8vIGV4YW1wbGUpIGFuZCBkdXJpbmcgdGhlIHByZXZpb3VzIGxvb3AgdGhl
IG5leHQgc2libGluZyBzdGlsbCBwb2ludHMgdG8KLSAgICAgICAgICAgIC8vIHRoZSBub2RlIGJl
aW5nIHJlbW92ZWQgd2hpbGUgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBkb2VzIG5vdCBwb2ludCBi
YWNrCi0gICAgICAgICAgICAvLyBhbmQgZG9lcyBub3QgcG9pbnQgdG8gdGhlIHNhbWUgcGFyZW50
IGFzIGl0cyBuZXh0IHNpYmxpbmcuCi0gICAgICAgICAgICAvLyBiLiBkZXN0cm95aW5nIFJlbmRl
cmVycyBvZiBzdGFuZGFsb25lIG5vZGVzIGlzIHNvbWV0aW1lcyBmYXN0ZXIuCi0gICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbW92ZWRDaGlsZHJlbi5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgICAgIE5vZGUqIHJlbW92ZWRDaGlsZCA9IHJlbW92ZWRDaGlsZHJlbltpXS5n
ZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZENoaWxkLT5hdHRhY2hlZCgpKQotICAg
ICAgICAgICAgICAgICAgICByZW1vdmVkQ2hpbGQtPmRldGFjaCgpOworICAgICAgICAgICAgICAg
IHJlbW92ZWRDaGlsZHJlbi5hcHBlbmQobi5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198121</attachid>
            <date>2013-04-15 06:48:09 -0700</date>
            <delta_ts>2013-04-19 09:56:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113433-20130415164743.patch</filename>
            <type>text/plain</type>
            <size>6771</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkyOWJmOWMxZWNiZGIy
MzNkODRlNWVjOGZkYTdjNjcyOWE5YzRlNS4uNzdmZGVjZTljNWUwNWRhZWJiYjljZjE0ZTJhZWIz
OGQ2MWI0MGRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTA0LTE1ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIENvbnRhaW5lck5vZGU6OnJl
bW92ZUNoaWxkcmVuIHNob3VsZCBmaXJzdCBkZXRhY2ggdGhlIGNoaWxkcmVuIHRoZW4gcmVtb3Zl
IHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MzQzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
ZSBwYXRjaCBmaXhlcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBDb250YWluZXJOb2RlOjpy
ZW1vdmVDaGlsZHJlbiBhbmQgcmVtb3ZlcyB0d28gdW5uZWNlc2FyeQorICAgICAgICBpdGVyYXRp
b25zIHRocm91Z2ggdGhlIHJlbW92ZWQgY2hpbGRyZW4gbGlzdC4KKyAgICAgICAgQ3VycmVudGx5
LCBDb250YWluZXJOb2RlOjpyZW1vdmVDaGlsZHJlbiBpbml0aWFsbHkgcmVtb3ZlcyB0aGUgbm9k
ZXMgZnJvbSB0aGUgRE9NIHRyZWUgYW5kIHRoZW4KKyAgICAgICAgY2FsbHMgZGV0YWNoKCkgb24g
ZWFjaCBvZiB0aGVtLiBUaGlzIGlzIGFudGktaW50dWl0aXZlIGFuZCBjYW4gbGVhZCB0byBzdWJ0
bGUgYnVncyBiZWNhdXNlIHRoZQorICAgICAgICBkZXRhY2hlZCByZW5kZXJlcnMgYXJlIG5vdCBi
YWNrZWQgYnkgYSB2YWxpZCBET00gdHJlZSBhbnkgbW9yZS4gV2l0aCB0aGUgcGF0Y2gsIHRoZSBu
b2RlcyBhcmUgZmlyc3QKKyAgICAgICAgZGV0YWNoZWQgYW5kIHRoZW4gcmVtb3ZlZCBmcm9tIHRo
ZSBET00gKHRoaXMgcmVtb3ZlcyB0aGUgZmlyc3QgbG9vcCkuCisgICAgICAgIFRoZSBwYXRjaCBy
ZW1vdmVzIHRoZSBzZWNvbmQgbG9vcCB0aHJvdWdoIHRoZSBub2RlcyBieSByZXVzaW5nIHRoZSBO
b2RlVmVjdG9yIHBhc3NlZCB0byB3aWxsUmVtb3ZlQ2hpbGRyZW4KKyAgICAgICAgd2hlbiBkb2lu
ZyB0aGUgYWN0dWFsIHJlbW92YWwuIFRoaXMgdmVjdG9yIGlzIGFscmVhZHkgcHJvcGVybHkgc2l6
ZWQgZm9yIG1vc3QgY2FzZXMgc28gd2UgYXJlIGF2b2lkaW5nCisgICAgICAgIG1lbW9yeSBhbGxv
Y2F0aW9ucy4KKyAgICAgICAgVXNpbmcgdGhpcyBwYXRjaCBvbiBteSBtYWNoaW5lLCB0aGUgUGFy
c2VyL2lubmVySFRNTC1zZXR0dGVyLmh0bWwgcGVyZm9ybWFuY2UgdGVzdCBpcyBpbXByb3ZlZCBi
eSBhcm91bmQgMS0yJS4KKworICAgICAgICBUZXN0czogbm8gbmV3IG9yIGNoYW5nZWQgZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OndpbGxSZW1vdmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJO
b2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZW1v
dmVDaGlsZHJlbik6CisKIDIwMTMtMDQtMTQgIEphZWh1biBMaW0gIDxsamFlaHVuLmxpbUBzYW1z
dW5nLmNvbT4KIAogICAgICAgICBbY3NzMy10ZXh0XSBQYXJzaW5nIC13ZWJraXQtaGFuZ2luZyB2
YWx1ZSBmb3IgdGV4dC1pbmRlbnQgZnJvbSBjc3MzLXRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmNwcAppbmRleCA0OWNjODU3MDRlNDA1NjQ5NjhhZjBkMWM1ZjM5OTc3Y2YyMzI4Njhj
Li5jODg5MGNiNjA1OGNmNTc1MjRjZDIxYmJkZWI0MzgxYjllYWQzZTdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC00NTQsMTEgKzQ1NCwyNiBAQCBzdGF0aWMgdm9pZCB3
aWxsUmVtb3ZlQ2hpbGQoTm9kZSogY2hpbGQpCiAgICAgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcihj
aGlsZCkuZGlzY29ubmVjdCgpOwogfQogCi1zdGF0aWMgdm9pZCB3aWxsUmVtb3ZlQ2hpbGRyZW4o
Q29udGFpbmVyTm9kZSogY29udGFpbmVyKQorLy8gVGhlIGNoaWxkcmVuIHZlY3RvciB3aWxsIGJl
IHBvcHVsYXRlZCB3aXRoIGFsbCBvZiB0aGUgY29udGFpbmVyJ3MgY2hpbGRyZW4uCisvLyBIb3dl
dmVyLCB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSBiZWNhdXNlIHRoZSBzY3JpcHRzIHRoaXMgZnVu
Y3Rpb24gZXhlY3V0ZQorLy8gbWF5IGNoYW5nZSB0aGUgY29udGFpbmVyIERPTSBzdWItdHJlZS4g
VGhpcyBjYXNlIHNob3VsZG4ndCBiZSB2ZXJ5IGNvbW1vbgorLy8gaW4gdGhlIHdpbGQgYmVjYXVz
ZSBpdCdzIG5vdCB2ZXJ5IHVzZWZ1bCAodGhlIGNoaWxkcmVuIHdpbGwgYmUgcmVtb3ZlZCBhbnl3
YXkpCisvLyBhbmQgdGhlIGJlaGF2aW9yIGluIHRoZSBlZGdlIGNhc2VzIHZhcmllcyBiZXR3ZWVu
IGJyb3dzZXJzLgorc3RhdGljIHZvaWQgd2lsbFJlbW92ZUNoaWxkcmVuKENvbnRhaW5lck5vZGUq
IGNvbnRhaW5lciwgTm9kZVZlY3RvciYgY2hpbGRyZW4pCiB7Ci0gICAgTm9kZVZlY3RvciBjaGls
ZHJlbjsKKyAgICAvLyBFeGNsdWRlIHRoaXMgbm9kZSB3aGVuIGxvb2tpbmcgZm9yIHJlbW92ZWQg
Zm9jdXNlZE5vZGUgc2luY2Ugb25seSBjaGlsZHJlbiB3aWxsIGJlIHJlbW92ZWQuCisgICAgY29u
dGFpbmVyLT5kb2N1bWVudCgpLT5yZW1vdmVGb2N1c2VkTm9kZU9mU3VidHJlZShjb250YWluZXIs
IHRydWUpOworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGNvbnRhaW5lci0+ZG9j
dW1lbnQoKS0+cmVtb3ZlRnVsbFNjcmVlbkVsZW1lbnRPZlN1YnRyZWUoY29udGFpbmVyLCB0cnVl
KTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgdGltaW5nIGZvciB0YWtp
bmcgdGhlIGNoaWxkcmVuIHNuYXBzaG90LgorICAgIEFTU0VSVChjaGlsZHJlbi5pc0VtcHR5KCkp
OwogICAgIGdldENoaWxkTm9kZXMoY29udGFpbmVyLCBjaGlsZHJlbik7CiAKKyAgICAvLyBGSVhN
RTogTm9kZXMgYWRkZWQgYnkgdGhlIG11dGF0aW9uIGV2ZW50cy9mcmFtZSB1bmxvYWQgZXZlbnRz
IGFyZSBub3QgcHJvY2Vzc2VkIGJ5IG5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoKS4KKyAgICAv
LyBUaGlzIGNhbiBsZWFkIHRvIGludmFsaWQgcmFuZ2VzIGluIHRoZSBkb2N1bWVudC4KICAgICBj
b250YWluZXItPmRvY3VtZW50KCktPm5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoY29udGFpbmVy
KTsKIAogICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oY29udGFpbmVyKTsKQEAg
LTQ2Nyw3ICs0ODIsNyBAQCBzdGF0aWMgdm9pZCB3aWxsUmVtb3ZlQ2hpbGRyZW4oQ29udGFpbmVy
Tm9kZSogY29udGFpbmVyKQogICAgICAgICBtdXRhdGlvbi53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQp
OwogICAgICAgICBjaGlsZC0+bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCgp
OwogCi0gICAgICAgIC8vIGZpcmUgcmVtb3ZlZCBmcm9tIGRvY3VtZW50IG11dGF0aW9uIGV2ZW50
cy4KKyAgICAgICAgLy8gRmlyZSByZW1vdmVkIGZyb20gZG9jdW1lbnQgbXV0YXRpb24gZXZlbnRz
LgogICAgICAgICBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhjaGlsZCk7CiAgICAgfQogCkBA
IC01OTQsMzAgKzYwOSwyOCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkcmVuKCkK
IAogICAgIC8vIFRoZSBjb250YWluZXIgbm9kZSBjYW4gYmUgcmVtb3ZlZCBmcm9tIGV2ZW50IGhh
bmRsZXJzLgogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwcm90ZWN0KHRoaXMpOwotCi0gICAg
Ly8gZXhjbHVkZSB0aGlzIG5vZGUgd2hlbiBsb29raW5nIGZvciByZW1vdmVkIGZvY3VzZWROb2Rl
IHNpbmNlIG9ubHkgY2hpbGRyZW4gd2lsbCBiZSByZW1vdmVkCi0gICAgZG9jdW1lbnQoKS0+cmVt
b3ZlRm9jdXNlZE5vZGVPZlN1YnRyZWUodGhpcywgdHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCi0gICAgZG9jdW1lbnQoKS0+cmVtb3ZlRnVsbFNjcmVlbkVsZW1lbnRPZlN1YnRy
ZWUodGhpcywgdHJ1ZSk7Ci0jZW5kaWYKKyAgICBOb2RlVmVjdG9yIHJlbW92ZWRDaGlsZHJlbjsK
IAogICAgIC8vIERvIGFueSBwcmVwIHdvcmsgbmVlZGVkIGJlZm9yZSBhY3R1YWxseSBzdGFydGlu
ZyB0byBkZXRhY2gKICAgICAvLyBhbmQgcmVtb3ZlLi4uIGUuZy4gc3RvcCBsb2FkaW5nIGZyYW1l
cywgZmlyZSB1bmxvYWQgZXZlbnRzLgotICAgIHdpbGxSZW1vdmVDaGlsZHJlbihwcm90ZWN0Lmdl
dCgpKTsKKyAgICB3aWxsUmVtb3ZlQ2hpbGRyZW4ocHJvdGVjdC5nZXQoKSwgcmVtb3ZlZENoaWxk
cmVuKTsKKworICAgIC8vIEluIG1vc3QgY2FzZXMgdGhlIHJlbW92ZWRDaGlsZHJlbiB2ZWN0b3Ig
d2lsbCBoYXZlIGVub3VnaAorICAgIC8vIGNhcGFjaXR5IHRvIHN0b3JlIGFsbCB0aGUgY2hpbGRy
ZW4uCisgICAgLy8gUmVtb3ZlIHRoZSBzdG9yZWQgbm9kZXMgc28gdGhlIHZlY3RvciBjYW4gYmUg
cmV1c2VkIHdoZW4KKyAgICAvLyBkb2luZyB0aGUgYWN0dWFsIHJlbW92YWwuCisgICAgcmVtb3Zl
ZENoaWxkcmVuLnNocmluaygwKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4sIDEwPiByZW1v
dmVkQ2hpbGRyZW47CiAgICAgewogICAgICAgICBXaWRnZXRIaWVyYXJjaHlVcGRhdGVzU3VzcGVu
c2lvblNjb3BlIHN1c3BlbmRXaWRnZXRIaWVyYXJjaHlVcGRhdGVzOwogICAgICAgICB7CiAgICAg
ICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwot
ICAgICAgICAgICAgcmVtb3ZlZENoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2hpbGRO
b2RlQ291bnQoKSk7CiAgICAgICAgICAgICB3aGlsZSAoUmVmUHRyPE5vZGU+IG4gPSBtX2ZpcnN0
Q2hpbGQpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBuZXh0ID0gbi0+bmV4dFNpYmxpbmcoKTsK
IAotICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSB0cmVlIGJlZm9y
ZSBjYWxsaW5nIGRldGFjaCBvciByZW1vdmVkRnJvbURvY3VtZW50ICg0NDI3MDI0LCA0MTI5NzQ0
KS4KLSAgICAgICAgICAgICAgICAvLyByZW1vdmVDaGlsZCgpIGRvZXMgdGhpcyBhZnRlciBjYWxs
aW5nIGRldGFjaCgpLiBUaGVyZSBpcyBubyBleHBsYW5hdGlvbiBmb3IKLSAgICAgICAgICAgICAg
ICAvLyB0aGlzIGRpc2NyZXBhbmN5IGJldHdlZW4gcmVtb3ZlQ2hpbGQoKSBhbmQgaXRzIG9wdGlt
aXplZCB2ZXJzaW9uIHJlbW92ZUNoaWxkcmVuKCkuCisgICAgICAgICAgICAgICAgaWYgKG4tPmF0
dGFjaGVkKCkpCisgICAgICAgICAgICAgICAgICAgIG4tPmRldGFjaCgpOworCiAgICAgICAgICAg
ICAgICAgbi0+c2V0UHJldmlvdXNTaWJsaW5nKDApOwogICAgICAgICAgICAgICAgIG4tPnNldE5l
eHRTaWJsaW5nKDApOwogICAgICAgICAgICAgICAgIG4tPnNldFBhcmVudE9yU2hhZG93SG9zdE5v
ZGUoMCk7CkBAIC02MjYsMTkgKzYzOSwxMCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnJlbW92ZUNo
aWxkcmVuKCkKICAgICAgICAgICAgICAgICBtX2ZpcnN0Q2hpbGQgPSBuZXh0OwogICAgICAgICAg
ICAgICAgIGlmIChuID09IG1fbGFzdENoaWxkKQogICAgICAgICAgICAgICAgICAgICBtX2xhc3RD
aGlsZCA9IDA7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlZENoaWxkcmVuLmFwcGVuZChuLnJlbGVh
c2UoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBuZXh0LT5zZXRQcmV2aW91c1NpYmxpbmcoMCk7CiAKLSAgICAgICAgICAgIC8vIERl
dGFjaCB0aGUgbm9kZXMgb25seSBhZnRlciBwcm9wZXJseSByZW1vdmVkIGZyb20gdGhlIHRyZWUg
YmVjYXVzZQotICAgICAgICAgICAgLy8gYS4gZGV0YWNoaW5nIHJlcXVpcmVzIGEgcHJvcGVyIERP
TSB0cmVlIChmb3IgY291bnRlcnMgYW5kIHF1b3RlcyBmb3IKLSAgICAgICAgICAgIC8vIGV4YW1w
bGUpIGFuZCBkdXJpbmcgdGhlIHByZXZpb3VzIGxvb3AgdGhlIG5leHQgc2libGluZyBzdGlsbCBw
b2ludHMgdG8KLSAgICAgICAgICAgIC8vIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQgd2hpbGUgdGhl
IG5vZGUgYmVpbmcgcmVtb3ZlZCBkb2VzIG5vdCBwb2ludCBiYWNrCi0gICAgICAgICAgICAvLyBh
bmQgZG9lcyBub3QgcG9pbnQgdG8gdGhlIHNhbWUgcGFyZW50IGFzIGl0cyBuZXh0IHNpYmxpbmcu
Ci0gICAgICAgICAgICAvLyBiLiBkZXN0cm95aW5nIFJlbmRlcmVycyBvZiBzdGFuZGFsb25lIG5v
ZGVzIGlzIHNvbWV0aW1lcyBmYXN0ZXIuCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlbW92ZWRDaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGUq
IHJlbW92ZWRDaGlsZCA9IHJlbW92ZWRDaGlsZHJlbltpXS5nZXQoKTsKLSAgICAgICAgICAgICAg
ICBpZiAocmVtb3ZlZENoaWxkLT5hdHRhY2hlZCgpKQotICAgICAgICAgICAgICAgICAgICByZW1v
dmVkQ2hpbGQtPmRldGFjaCgpOworICAgICAgICAgICAgICAgIHJlbW92ZWRDaGlsZHJlbi5hcHBl
bmQobi5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198725</attachid>
            <date>2013-04-18 05:33:48 -0700</date>
            <delta_ts>2013-04-19 09:56:43 -0700</delta_ts>
            <desc>Simple version of the patch</desc>
            <filename>bug-113433-20130418153318.patch</filename>
            <type>text/plain</type>
            <size>3225</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4NjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjUzOWI3ZTBhY2M2MTg3
Y2I5MTNkZmNkMWViZTViYjI1ZTBhNDQzNS4uZTljNjgzNDk0NzJmNDJjOTcwMTViZDNmOTAyNTdh
NjdmNWJhNGJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTA0LTE4ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIENvbnRhaW5lck5vZGU6OnJl
bW92ZUNoaWxkcmVuIHNob3VsZCBmaXJzdCBkZXRhY2ggdGhlIGNoaWxkcmVuIHRoZW4gcmVtb3Zl
IHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MzQzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1
cnJlbnRseSwgQ29udGFpbmVyTm9kZTo6cmVtb3ZlQ2hpbGRyZW4gaW5pdGlhbGx5IHJlbW92ZXMg
dGhlIG5vZGVzIGZyb20gdGhlIERPTSB0cmVlIGFuZCB0aGVuCisgICAgICAgIGNhbGxzIGRldGFj
aCgpIG9uIGVhY2ggb2YgdGhlbS4gVGhpcyBpcyBhbnRpLWludHVpdGl2ZSBhbmQgY2FuIGxlYWQg
dG8gc3VidGxlIGJ1Z3MgYmVjYXVzZSB0aGUKKyAgICAgICAgZGV0YWNoZWQgcmVuZGVyZXJzIGFy
ZSBub3QgYmFja2VkIGJ5IGEgdmFsaWQgRE9NIHRyZWUgYW55IG1vcmUuIFdpdGggdGhlIHBhdGNo
LCB0aGUgbm9kZXMgYXJlIGZpcnN0CisgICAgICAgIGRldGFjaGVkIGFuZCB0aGVuIHJlbW92ZWQg
ZnJvbSB0aGUgRE9NLgorCisgICAgICAgIFRlc3RzOiBObyBjaGFuZ2VkIHZpc2libGUgZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkcmVuKToKKwogMjAxMy0wNC0xNyAgSmFl
aHVuIExpbSAgPGxqYWVodW4ubGltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtjc3MzLXRleHRd
IFJlbmRlcmluZyAtd2Via2l0LWhhbmdpbmcgdmFsdWUgZm9yIHRleHQtaW5kZW50IGZyb20gY3Nz
My10ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggZjZjZmZmZWU2YzNk
ZWNjYTFiYTNjZjBlMTg3NDlhZjcxOTlkNDUxOS4uNzc0NjZkZmQ5MTk5MjhjY2FjNjI2NDQ4NzRm
ZTgxZTcwMWU0ZmU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtNjE2
LDkgKzYxNiw5IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cmVtb3ZlQ2hpbGRyZW4oKQogICAgICAg
ICAgICAgd2hpbGUgKFJlZlB0cjxOb2RlPiBuID0gbV9maXJzdENoaWxkKSB7CiAgICAgICAgICAg
ICAgICAgTm9kZSogbmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7CiAKLSAgICAgICAgICAgICAgICAv
LyBSZW1vdmUgdGhlIG5vZGUgZnJvbSB0aGUgdHJlZSBiZWZvcmUgY2FsbGluZyBkZXRhY2ggb3Ig
cmVtb3ZlZEZyb21Eb2N1bWVudCAoNDQyNzAyNCwgNDEyOTc0NCkuCi0gICAgICAgICAgICAgICAg
Ly8gcmVtb3ZlQ2hpbGQoKSBkb2VzIHRoaXMgYWZ0ZXIgY2FsbGluZyBkZXRhY2goKS4gVGhlcmUg
aXMgbm8gZXhwbGFuYXRpb24gZm9yCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBkaXNjcmVwYW5j
eSBiZXR3ZWVuIHJlbW92ZUNoaWxkKCkgYW5kIGl0cyBvcHRpbWl6ZWQgdmVyc2lvbiByZW1vdmVD
aGlsZHJlbigpLgorICAgICAgICAgICAgICAgIGlmIChuLT5hdHRhY2hlZCgpKQorICAgICAgICAg
ICAgICAgICAgICBuLT5kZXRhY2goKTsKKwogICAgICAgICAgICAgICAgIG4tPnNldFByZXZpb3Vz
U2libGluZygwKTsKICAgICAgICAgICAgICAgICBuLT5zZXROZXh0U2libGluZygwKTsKICAgICAg
ICAgICAgICAgICBuLT5zZXRQYXJlbnRPclNoYWRvd0hvc3ROb2RlKDApOwpAQCAtNjI3LDE5ICs2
MjcsMTAgQEAgdm9pZCBDb250YWluZXJOb2RlOjpyZW1vdmVDaGlsZHJlbigpCiAgICAgICAgICAg
ICAgICAgbV9maXJzdENoaWxkID0gbmV4dDsKICAgICAgICAgICAgICAgICBpZiAobiA9PSBtX2xh
c3RDaGlsZCkKICAgICAgICAgICAgICAgICAgICAgbV9sYXN0Q2hpbGQgPSAwOwotICAgICAgICAg
ICAgICAgIHJlbW92ZWRDaGlsZHJlbi5hcHBlbmQobi5yZWxlYXNlKCkpOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9maXJzdENoaWxk
LT5zZXRQcmV2aW91c1NpYmxpbmcoMCk7CiAKLSAgICAgICAgICAgIC8vIERldGFjaCB0aGUgbm9k
ZXMgb25seSBhZnRlciBwcm9wZXJseSByZW1vdmVkIGZyb20gdGhlIHRyZWUgYmVjYXVzZQotICAg
ICAgICAgICAgLy8gYS4gZGV0YWNoaW5nIHJlcXVpcmVzIGEgcHJvcGVyIERPTSB0cmVlIChmb3Ig
Y291bnRlcnMgYW5kIHF1b3RlcyBmb3IKLSAgICAgICAgICAgIC8vIGV4YW1wbGUpIGFuZCBkdXJp
bmcgdGhlIHByZXZpb3VzIGxvb3AgdGhlIG5leHQgc2libGluZyBzdGlsbCBwb2ludHMgdG8KLSAg
ICAgICAgICAgIC8vIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQgd2hpbGUgdGhlIG5vZGUgYmVpbmcg
cmVtb3ZlZCBkb2VzIG5vdCBwb2ludCBiYWNrCi0gICAgICAgICAgICAvLyBhbmQgZG9lcyBub3Qg
cG9pbnQgdG8gdGhlIHNhbWUgcGFyZW50IGFzIGl0cyBuZXh0IHNpYmxpbmcuCi0gICAgICAgICAg
ICAvLyBiLiBkZXN0cm95aW5nIFJlbmRlcmVycyBvZiBzdGFuZGFsb25lIG5vZGVzIGlzIHNvbWV0
aW1lcyBmYXN0ZXIuCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbW92ZWRD
aGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGUqIHJlbW92ZWRDaGls
ZCA9IHJlbW92ZWRDaGlsZHJlbltpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVtb3Zl
ZENoaWxkLT5hdHRhY2hlZCgpKQotICAgICAgICAgICAgICAgICAgICByZW1vdmVkQ2hpbGQtPmRl
dGFjaCgpOworICAgICAgICAgICAgICAgIHJlbW92ZWRDaGlsZHJlbi5hcHBlbmQobi5yZWxlYXNl
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>198738</attachid>
            <date>2013-04-18 08:16:49 -0700</date>
            <delta_ts>2013-04-18 08:16:49 -0700</delta_ts>
            <desc>Perf results for the very simple patch</desc>
            <filename>WebKit Performance Test Results.webarchive</filename>
            <type>application/x-webarchive</type>
            <size>495584</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">YnBsaXN0MDDSAQIDHF8QD1dlYlN1YnJlc291cmNlc18QD1dlYk1haW5SZXNvdXJjZaQEDRIX1AUG
BwgJCgsMXxATV2ViUmVzb3VyY2VSZXNwb25zZV8QD1dlYlJlc291cmNlRGF0YV8QE1dlYlJlc291
cmNlTUlNRVR5cGVeV2ViUmVzb3VyY2VVUkxPEQJpYnBsaXN0MDDUAQIDBAUGNjdYJHZlcnNpb25Y
JG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKsHCB8lJi0uLzAxMlUkbnVsbNsJCgsMDQ4PEBES
ExQVFhcYGRobHB0eUiQzViRjbGFzc1IkNlIkMVIkOVIkNFIkN1IkMlIkNVIkMFIkOIACgAqABxAA
gAmABYAAEAeABhAIgAjTIAohGiMkV05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEGlmaWxlOi8v
L1ZvbHVtZXMvSEREL05vblBlcmZvcmNlL1dlYktpdC9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8v
cmVzb3VyY2VzL2Ryb21hZW8vd2ViL2xpYi9qcXVlcnktMS42LjQuanPSJygpKlokY2xhc3NuYW1l
WCRjbGFzc2VzVU5TVVJMoissVU5TVVJMWE5TT2JqZWN0I0G3IETeHHEuEAJfEA90ZXh0L2phdmFz
Y3JpcHQSAAXJPyN/7////////9InKDM0XU5TVVJMUmVzcG9uc2WiNSxdTlNVUkxSZXNwb25zZV8Q
D05TS2V5ZWRBcmNoaXZlctE4OV8QE1dlYlJlc291cmNlUmVzcG9uc2WAAQAIABEAGgAjAC0AMgA3
AEMASQBgAGMAagBtAHAAcwB2AHkAfAB/AIIAhQCHAIkAiwCNAI8AkQCTAJUAlwCZAJsAogCqALYA
uAC6ALwBKAEtATgBQQFHAUoBUAFZAWIBZAF2AXsBhAGJAZcBmgGoAboBvQHTAAAAAAAAAgEAAAAA
AAAAOgAAAAAAAAAAAAAAAAAAAdVPEgAFyT8vKiEKICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFy
eSB2MS42LjQKICogaHR0cDovL2pxdWVyeS5jb20vCiAqCiAqIENvcHlyaWdodCAyMDExLCBKb2hu
IFJlc2lnCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxp
Y2Vuc2VzLgogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCiAqCiAqIEluY2x1ZGVzIFNpenps
ZS5qcwogKiBodHRwOi8vc2l6emxlanMuY29tLwogKiBDb3B5cmlnaHQgMjAxMSwgVGhlIERvam8g
Rm91bmRhdGlvbgogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlULCBCU0QsIGFuZCBHUEwgTGljZW5z
ZXMuCiAqCiAqIERhdGU6IE1vbiBTZXAgMTIgMTg6NTQ6NDggMjAxMSAtMDQwMAogKi8KKGZ1bmN0
aW9uKCB3aW5kb3csIHVuZGVmaW5lZCApIHsKCi8vIFVzZSB0aGUgY29ycmVjdCBkb2N1bWVudCBh
Y2NvcmRpbmdseSB3aXRoIHdpbmRvdyBhcmd1bWVudCAoc2FuZGJveCkKdmFyIGRvY3VtZW50ID0g
d2luZG93LmRvY3VtZW50LAogICAgICAgIG5hdmlnYXRvciA9IHdpbmRvdy5uYXZpZ2F0b3IsCiAg
ICAgICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247CnZhciBqUXVlcnkgPSAoZnVuY3Rpb24o
KSB7CgovLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQp2YXIgalF1ZXJ5ID0gZnVuY3Rp
b24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgLy8gVGhlIGpRdWVyeSBv
YmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCiAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4
dCwgcm9vdGpRdWVyeSApOwogICAgICAgIH0sCgogICAgICAgIC8vIE1hcCBvdmVyIGpRdWVyeSBp
biBjYXNlIG9mIG92ZXJ3cml0ZQogICAgICAgIF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAoKICAg
ICAgICAvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQogICAgICAgIF8kID0g
d2luZG93LiQsCgogICAgICAgIC8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1
ZXJ5KGRvY3VtZW50KQogICAgICAgIHJvb3RqUXVlcnksCgogICAgICAgIC8vIEEgc2ltcGxlIHdh
eSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzIG9yIElEIHN0cmluZ3MKICAgICAgICAvLyBQcmlv
cml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1
MjEpCiAgICAgICAgcXVpY2tFeHByID0gL14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtc
d1wtXSopJCkvLAoKICAgICAgICAvLyBDaGVjayBpZiBhIHN0cmluZyBoYXMgYSBub24td2hpdGVz
cGFjZSBjaGFyYWN0ZXIgaW4gaXQKICAgICAgICBybm90d2hpdGUgPSAvXFMvLAoKICAgICAgICAv
LyBVc2VkIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlCiAgICAgICAgdHJpbUxlZnQgPSAvXlxzKy8s
CiAgICAgICAgdHJpbVJpZ2h0ID0gL1xzKyQvLAoKICAgICAgICAvLyBDaGVjayBmb3IgZGlnaXRz
CiAgICAgICAgcmRpZ2l0ID0gL1xkLywKCiAgICAgICAgLy8gTWF0Y2ggYSBzdGFuZGFsb25lIHRh
ZwogICAgICAgIHJzaW5nbGVUYWcgPSAvXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLAoKICAg
ICAgICAvLyBKU09OIFJlZ0V4cAogICAgICAgIHJ2YWxpZGNoYXJzID0gL15bXF0sOnt9XHNdKiQv
LAogICAgICAgIHJ2YWxpZGVzY2FwZSA9IC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17
NH0pL2csCiAgICAgICAgcnZhbGlkdG9rZW5zID0gLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxu
dWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLAogICAgICAgIHJ2YWxpZGJy
YWNlcyA9IC8oPzpefDp8LCkoPzpccypcWykrL2csCgogICAgICAgIC8vIFVzZXJhZ2VudCBSZWdF
eHAKICAgICAgICByd2Via2l0ID0gLyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8sCiAgICAgICAgcm9w
ZXJhID0gLyhvcGVyYSkoPzouKnZlcnNpb24pP1sgXC9dKFtcdy5dKykvLAogICAgICAgIHJtc2ll
ID0gLyhtc2llKSAoW1x3Ll0rKS8sCiAgICAgICAgcm1vemlsbGEgPSAvKG1vemlsbGEpKD86Lio/
IHJ2OihbXHcuXSspKT8vLAoKICAgICAgICAvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNh
bWVsaXppbmcKICAgICAgICByZGFzaEFscGhhID0gLy0oW2Etel18WzAtOV0pL2lnLAogICAgICAg
IHJtc1ByZWZpeCA9IC9eLW1zLS8sCgogICAgICAgIC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2Fz
ZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKCkKICAgICAgICBmY2FtZWxDYXNlID0gZnVuY3Rpb24o
IGFsbCwgbGV0dGVyICkgewogICAgICAgICAgICAgICAgcmV0dXJuICggbGV0dGVyICsgIiIgKS50
b1VwcGVyQ2FzZSgpOwogICAgICAgIH0sCgogICAgICAgIC8vIEtlZXAgYSBVc2VyQWdlbnQgc3Ry
aW5nIGZvciB1c2Ugd2l0aCBqUXVlcnkuYnJvd3NlcgogICAgICAgIHVzZXJBZ2VudCA9IG5hdmln
YXRvci51c2VyQWdlbnQsCgogICAgICAgIC8vIEZvciBtYXRjaGluZyB0aGUgZW5naW5lIGFuZCB2
ZXJzaW9uIG9mIHRoZSBicm93c2VyCiAgICAgICAgYnJvd3Nlck1hdGNoLAoKICAgICAgICAvLyBU
aGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHkKICAgICAgICByZWFkeUxpc3QsCgogICAgICAg
IC8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyCiAgICAgICAgRE9NQ29udGVudExvYWRlZCwKCiAg
ICAgICAgLy8gU2F2ZSBhIHJlZmVyZW5jZSB0byBzb21lIGNvcmUgbWV0aG9kcwogICAgICAgIHRv
U3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKICAgICAgICBoYXNPd24gPSBPYmpl
Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LAogICAgICAgIHB1c2ggPSBBcnJheS5wcm90b3R5
cGUucHVzaCwKICAgICAgICBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZSwKICAgICAgICB0
cmltID0gU3RyaW5nLnByb3RvdHlwZS50cmltLAogICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90
b3R5cGUuaW5kZXhPZiwKCiAgICAgICAgLy8gW1tDbGFzc11dIC0+IHR5cGUgcGFpcnMKICAgICAg
ICBjbGFzczJ0eXBlID0ge307CgpqUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewogICAg
ICAgIGNvbnN0cnVjdG9yOiBqUXVlcnksCiAgICAgICAgaW5pdDogZnVuY3Rpb24oIHNlbGVjdG9y
LCBjb250ZXh0LCByb290alF1ZXJ5ICkgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoLCBlbGVt
LCByZXQsIGRvYzsKCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgJCgiIiksICQobnVsbCksIG9y
ICQodW5kZWZpbmVkKQogICAgICAgICAgICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSAkKERPTUVsZW1lbnQpCiAgICAgICAgICAgICAgICBpZiAoIHNlbGVj
dG9yLm5vZGVUeXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB0
aGlzWzBdID0gc2VsZWN0b3I7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0g
MTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gVGhlIGJvZHkgZWxlbWVudCBvbmx5IGV4aXN0cyBvbmNlLCBv
cHRpbWl6ZSBmaW5kaW5nIGl0CiAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9yID09PSAiYm9k
eSIgJiYgIWNvbnRleHQgJiYgZG9jdW1lbnQuYm9keSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNb
MF0gPSBkb2N1bWVudC5ib2R5OwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9y
ID0gc2VsZWN0b3I7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gSGFuZGxlIEhUTUwgc3RyaW5ncwogICAgICAgICAgICAgICAgaWYgKCB0
eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICAv
LyBBcmUgd2UgZGVhbGluZyB3aXRoIEhUTUwgc3RyaW5nIG9yIGFuIElEPwogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHNlbGVjdG9yLmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNo
YXJBdCggc2VsZWN0b3IubGVuZ3RoIC0gMSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49
IDMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgc3Ry
aW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVn
ZXggY2hlY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IFsgbnVsbCwg
c2VsZWN0b3IsIG51bGwgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBxdWlja0V4cHIuZXhlYyggc2VsZWN0
b3IgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVmVyaWZ5IGEgbWF0Y2gsIGFuZCB0aGF0IG5vIGNvbnRleHQgd2FzIHNwZWNpZmllZCBmb3Ig
I2lkCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2ggJiYgKG1hdGNoWzFdIHx8ICFj
b250ZXh0KSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAk
KGh0bWwpIC0+ICQoYXJyYXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBt
YXRjaFsxXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFswXSA6IGNvbnRleHQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2MgPSAoY29udGV4dCA/IGNv
bnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgc2luZ2xlIHN0cmluZyBpcyBwYXNz
ZWQgaW4gYW5kIGl0J3MgYSBzaW5nbGUgdGFnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBqdXN0IGRvIGEgY3JlYXRlRWxlbWVudCBhbmQgc2tpcCB0aGUgcmVzdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcnNpbmdsZVRhZy5l
eGVjKCBzZWxlY3RvciApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcmV0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBb
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHJldFsxXSApIF07CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZuLmF0dHIuY2FsbCgg
c2VsZWN0b3IsIGNvbnRleHQsIHRydWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBbIGRvYy5jcmVhdGVFbGVtZW50
KCByZXRbMV0gKSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0galF1
ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgbWF0Y2hbMV0gXSwgWyBkb2MgXSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IChyZXQuY2FjaGVh
YmxlID8galF1ZXJ5LmNsb25lKHJldC5mcmFnbWVudCkgOiByZXQuZnJhZ21lbnQpLmNoaWxkTm9k
ZXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggdGhpcywg
c2VsZWN0b3IgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAk
KCIjaWQiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIG1hdGNoWzJdICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVy
bnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRoYXQg
YXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1zCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQg
IT09IG1hdGNoWzJdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByb290alF1ZXJ5LmZpbmQoIHNlbGVjdG9yICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgaW5q
ZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWzBdID0g
ZWxlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3IgPSBz
ZWxlY3RvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpCiAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoY29udGV4dCB8fCByb290alF1ZXJ5KS5maW5kKCBz
ZWxlY3RvciApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIsIGNv
bnRleHQpCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxl
bnQgdG86ICQoY29udGV4dCkuZmluZChleHByKQogICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVj
dG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJChmdW5jdGlvbikKICAgICAgICAgICAgICAg
IC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeQogICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByb290alF1ZXJ5LnJlYWR5KCBzZWxlY3RvciApOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3Rv
cjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4
dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm1ha2VB
cnJheSggc2VsZWN0b3IsIHRoaXMgKTsKICAgICAgICB9LAoKICAgICAgICAvLyBTdGFydCB3aXRo
IGFuIGVtcHR5IHNlbGVjdG9yCiAgICAgICAgc2VsZWN0b3I6ICIiLAoKICAgICAgICAvLyBUaGUg
Y3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkCiAgICAgICAganF1ZXJ5OiAiMS42
LjQiLAoKICAgICAgICAvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlz
IDAKICAgICAgICBsZW5ndGg6IDAsCgogICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMg
Y29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0CiAgICAgICAgc2l6ZTogZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGg7CiAgICAgICAgfSwKCiAg
ICAgICAgdG9BcnJheTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc2xpY2Uu
Y2FsbCggdGhpcywgMCApOwogICAgICAgIH0sCgogICAgICAgIC8vIEdldCB0aGUgTnRoIGVsZW1l
bnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKICAgICAgICAvLyBHZXQgdGhlIHdob2xl
IG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQogICAgICAgIGdldDogZnVuY3Rp
b24oIG51bSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBudW0gPT0gbnVsbCA/CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gYSAnY2xlYW4nIGFycmF5CiAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudG9BcnJheSgpIDoKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJl
dHVybiBqdXN0IHRoZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgKCBudW0gPCAwID8g
dGhpc1sgdGhpcy5sZW5ndGggKyBudW0gXSA6IHRoaXNbIG51bSBdICk7CiAgICAgICAgfSwKCiAg
ICAgICAgLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBz
dGFjawogICAgICAgIC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQog
ICAgICAgIHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zLCBuYW1lLCBzZWxlY3RvciApIHsKICAg
ICAgICAgICAgICAgIC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0CiAg
ICAgICAgICAgICAgICB2YXIgcmV0ID0gdGhpcy5jb25zdHJ1Y3RvcigpOwoKICAgICAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGVsZW1zICkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2guYXBwbHkoIHJldCwgZWxlbXMgKTsKCiAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwgZWxlbXMgKTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0
aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKQogICAgICAgICAgICAgICAgcmV0LnByZXZPYmplY3Qg
PSB0aGlzOwoKICAgICAgICAgICAgICAgIHJldC5jb250ZXh0ID0gdGhpcy5jb250ZXh0OwoKICAg
ICAgICAgICAgICAgIGlmICggbmFtZSA9PT0gImZpbmQiICkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yICsgKHRoaXMuc2VsZWN0b3IgPyAiICIg
OiAiIikgKyBzZWxlY3RvcjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5hbWUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAiLiIg
KyBuYW1lICsgIigiICsgc2VsZWN0b3IgKyAiKSI7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXQKICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfSwKCiAgICAgICAgLy8gRXhlY3V0ZSBhIGNhbGxi
YWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4KICAgICAgICAvLyAoWW91
IGNhbiBzZWVkIHRoZSBhcmd1bWVudHMgd2l0aCBhbiBhcnJheSBvZiBhcmdzLCBidXQgdGhpcyBp
cwogICAgICAgIC8vIG9ubHkgdXNlZCBpbnRlcm5hbGx5LikKICAgICAgICBlYWNoOiBmdW5jdGlv
biggY2FsbGJhY2ssIGFyZ3MgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmVhY2go
IHRoaXMsIGNhbGxiYWNrLCBhcmdzICk7CiAgICAgICAgfSwKCiAgICAgICAgcmVhZHk6IGZ1bmN0
aW9uKCBmbiApIHsKICAgICAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgbGlzdGVuZXJzCiAgICAg
ICAgICAgICAgICBqUXVlcnkuYmluZFJlYWR5KCk7CgogICAgICAgICAgICAgICAgLy8gQWRkIHRo
ZSBjYWxsYmFjawogICAgICAgICAgICAgICAgcmVhZHlMaXN0LmRvbmUoIGZuICk7CgogICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgZXE6IGZ1bmN0aW9uKCBp
ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IC0xID8KICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5zbGljZSggaSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlj
ZSggaSwgK2kgKyAxICk7CiAgICAgICAgfSwKCiAgICAgICAgZmlyc3Q6IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXEoIDAgKTsKICAgICAgICB9LAoKICAgICAgICBs
YXN0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVxKCAtMSApOwog
ICAgICAgIH0sCgogICAgICAgIHNsaWNlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApLAogICAg
ICAgICAgICAgICAgICAgICAgICAic2xpY2UiLCBzbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbigi
LCIpICk7CiAgICAgICAgfSwKCiAgICAgICAgbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVu
Y3Rpb24oIGVsZW0sIGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFj
ay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7CiAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgfSwK
CiAgICAgICAgZW5kOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBy
ZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcihudWxsKTsKICAgICAgICB9LAoKICAgICAgICAv
LyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAgICAgICAgLy8gQmVoYXZlcyBsaWtlIGFuIEFycmF5
J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuCiAgICAgICAgcHVzaDogcHVzaCwK
ICAgICAgICBzb3J0OiBbXS5zb3J0LAogICAgICAgIHNwbGljZTogW10uc3BsaWNlCn07CgovLyBH
aXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0
YW50aWF0aW9uCmpRdWVyeS5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKCmpRdWVyeS5l
eHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG9wdGlv
bnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLAogICAgICAgICAgICAgICAg
dGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9LAogICAgICAgICAgICAgICAgaSA9IDEsCiAgICAg
ICAgICAgICAgICBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLAogICAgICAgICAgICAgICAgZGVl
cCA9IGZhbHNlOwoKICAgICAgICAvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uCiAgICAg
ICAgaWYgKCB0eXBlb2YgdGFyZ2V0ID09PSAiYm9vbGVhbiIgKSB7CiAgICAgICAgICAgICAgICBk
ZWVwID0gdGFyZ2V0OwogICAgICAgICAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9
OwogICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldAogICAg
ICAgICAgICAgICAgaSA9IDI7CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVu
IHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkK
ICAgICAgICBpZiAoIHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNGdW5j
dGlvbih0YXJnZXQpICkgewogICAgICAgICAgICAgICAgdGFyZ2V0ID0ge307CiAgICAgICAgfQoK
ICAgICAgICAvLyBleHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBw
YXNzZWQKICAgICAgICBpZiAoIGxlbmd0aCA9PT0gaSApIHsKICAgICAgICAgICAgICAgIHRhcmdl
dCA9IHRoaXM7CiAgICAgICAgICAgICAgICAtLWk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKCA7
IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgIC8vIE9ubHkgZGVhbCB3aXRoIG5v
bi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMKICAgICAgICAgICAgICAgIGlmICggKG9wdGlvbnMgPSBh
cmd1bWVudHNbIGkgXSkgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0
ZW5kIHRoZSBiYXNlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGlu
IG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0
WyBuYW1lIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IG9wdGlvbnNb
IG5hbWUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBuZXZl
ci1lbmRpbmcgbG9vcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0
ID09PSBjb3B5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0
cyBvciBhcnJheXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYg
Y29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGpR
dWVyeS5pc0FycmF5KGNvcHkpKSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjb3B5SXNBcnJheSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29weUlzQXJyYXkgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5Lmlz
QXJyYXkoc3JjKSA/IHNyYyA6IFtdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7
fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVj
dHMsIGNsb25lIHRoZW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
cmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZh
bHVlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvcHkgIT09
IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
cmdldFsgbmFtZSBdID0gY29weTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAg
ICAgIC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0CiAgICAgICAgcmV0dXJuIHRhcmdldDsK
fTsKCmpRdWVyeS5leHRlbmQoewogICAgICAgIG5vQ29uZmxpY3Q6IGZ1bmN0aW9uKCBkZWVwICkg
ewogICAgICAgICAgICAgICAgaWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICB3aW5kb3cuJCA9IF8kOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5OwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnk7CiAgICAgICAgfSwKCiAgICAgICAgLy8g
SXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy4K
ICAgICAgICBpc1JlYWR5OiBmYWxzZSwKCiAgICAgICAgLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhv
dyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZQogICAgICAgIC8vIHRoZSByZWFkeSBldmVu
dCBmaXJlcy4gU2VlICM2NzgxCiAgICAgICAgcmVhZHlXYWl0OiAxLAoKICAgICAgICAvLyBIb2xk
IChvciByZWxlYXNlKSB0aGUgcmVhZHkgZXZlbnQKICAgICAgICBob2xkUmVhZHk6IGZ1bmN0aW9u
KCBob2xkICkgewogICAgICAgICAgICAgICAgaWYgKCBob2xkICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkucmVhZHlXYWl0Kys7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHkoIHRydWUgKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICB9LAoKICAgICAgICAvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5CiAg
ICAgICAgcmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkgewogICAgICAgICAgICAgICAgLy8gRWl0aGVy
IGEgcmVsZWFzZWQgaG9sZCBvciBhbiBET01yZWFkeS9sb2FkIGV2ZW50IGFuZCBub3QgeWV0IHJl
YWR5CiAgICAgICAgICAgICAgICBpZiAoICh3YWl0ID09PSB0cnVlICYmICEtLWpRdWVyeS5yZWFk
eVdhaXQpIHx8ICh3YWl0ICE9PSB0cnVlICYmICFqUXVlcnkuaXNSZWFkeSkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBib2R5IGV4aXN0cywgYXQgbGVhc3QsIGluIGNh
c2UgSUUgZ2V0cyBhIGxpdHRsZSBvdmVyemVhbG91cyAodGlja2V0ICM1NDQzKS4KICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhZG9jdW1lbnQuYm9keSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVy
IHRoYXQgdGhlIERPTSBpcyByZWFkeQogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNS
ZWFkeSA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIG5vcm1hbCBET00g
UmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZQogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0
ID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFy
ZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKICAgICAgICAgICAgICAgICAgICAgICAgcmVh
ZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkgZXZlbnRzCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggalF1ZXJ5LmZuLnRyaWdnZXIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoICJyZWFkeSIgKS51bmJp
bmQoICJyZWFkeSIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQogICAgICAgIH0sCgogICAgICAgIGJpbmRSZWFkeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICBpZiAoIHJlYWR5TGlzdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5fRGVm
ZXJyZWQoKTsKCiAgICAgICAgICAgICAgICAvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50
KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRlciB0aGUKICAgICAgICAgICAgICAgIC8vIGJyb3dzZXIg
ZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuCiAgICAgICAgICAgICAgICBpZiAoIGRvY3VtZW50
LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0
eSB0byBkZWxheSByZWFkeQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91
dCggalF1ZXJ5LnJlYWR5LCAxICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
Ly8gTW96aWxsYSwgT3BlcmEgYW5kIHdlYmtpdCBuaWdodGxpZXMgY3VycmVudGx5IHN1cHBvcnQg
dGhpcyBldmVudAogICAgICAgICAgICAgICAgaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxi
YWNrCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJE
T01Db250ZW50TG9hZGVkIiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2UgKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFs
d2F5cyB3b3JrCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCAibG9hZCIsIGpRdWVyeS5yZWFkeSwgZmFsc2UgKTsKCiAgICAgICAgICAgICAgICAvLyBJZiBJ
RSBldmVudCBtb2RlbCBpcyB1c2VkCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBkb2N1bWVu
dC5hdHRhY2hFdmVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGZpcmlu
ZyBiZWZvcmUgb25sb2FkLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXliZSBsYXRlIGJ1
dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQu
YXR0YWNoRXZlbnQoICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBET01Db250ZW50TG9hZGVkICk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRo
YXQgd2lsbCBhbHdheXMgd29yawogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYXR0YWNo
RXZlbnQoICJvbmxvYWQiLCBqUXVlcnkucmVhZHkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIElFIGFuZCBub3QgYSBmcmFtZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250
aW51YWxseSBjaGVjayB0byBzZWUgaWYgdGhlIGRvY3VtZW50IGlzIHJlYWR5CiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB0b3BsZXZlbCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHdpbmRv
dy5mcmFtZUVsZW1lbnQgPT0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChl
KSB7fQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuZG9TY3JvbGwgJiYgdG9wbGV2ZWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG9TY3JvbGxDaGVjaygpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gU2VlIHRlc3QvdW5pdC9jb3JlLmpzIGZvciBk
ZXRhaWxzIGNvbmNlcm5pbmcgaXNGdW5jdGlvbi4KICAgICAgICAvLyBTaW5jZSB2ZXJzaW9uIDEu
MywgRE9NIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBsaWtlIGFsZXJ0CiAgICAgICAgLy8gYXJlbid0
IHN1cHBvcnRlZC4gVGhleSByZXR1cm4gZmFsc2Ugb24gSUUgKCMyOTY4KS4KICAgICAgICBpc0Z1
bmN0aW9uOiBmdW5jdGlvbiggb2JqICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS50
eXBlKG9iaikgPT09ICJmdW5jdGlvbiI7CiAgICAgICAgfSwKCiAgICAgICAgaXNBcnJheTogQXJy
YXkuaXNBcnJheSB8fCBmdW5jdGlvbiggb2JqICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeS50eXBlKG9iaikgPT09ICJhcnJheSI7CiAgICAgICAgfSwKCiAgICAgICAgLy8gQSBjcnVk
ZSB3YXkgb2YgZGV0ZXJtaW5pbmcgaWYgYW4gb2JqZWN0IGlzIGEgd2luZG93CiAgICAgICAgaXNX
aW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHR5
cGVvZiBvYmogPT09ICJvYmplY3QiICYmICJzZXRJbnRlcnZhbCIgaW4gb2JqOwogICAgICAgIH0s
CgogICAgICAgIGlzTmFOOiBmdW5jdGlvbiggb2JqICkgewogICAgICAgICAgICAgICAgcmV0dXJu
IG9iaiA9PSBudWxsIHx8ICFyZGlnaXQudGVzdCggb2JqICkgfHwgaXNOYU4oIG9iaiApOwogICAg
ICAgIH0sCgogICAgICAgIHR5cGU6IGZ1bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gb2JqID09IG51bGwgPwogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoIG9iaiAp
IDoKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbChvYmop
IF0gfHwgIm9iamVjdCI7CiAgICAgICAgfSwKCiAgICAgICAgaXNQbGFpbk9iamVjdDogZnVuY3Rp
b24oIG9iaiApIHsKICAgICAgICAgICAgICAgIC8vIE11c3QgYmUgYW4gT2JqZWN0LgogICAgICAg
ICAgICAgICAgLy8gQmVjYXVzZSBvZiBJRSwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBwcmVz
ZW5jZSBvZiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHkuCiAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBET00gbm9kZXMgYW5kIHdpbmRvdyBvYmplY3RzIGRvbid0IHBhc3MgdGhyb3Vn
aCwgYXMgd2VsbAogICAgICAgICAgICAgICAgaWYgKCAhb2JqIHx8IGpRdWVyeS50eXBlKG9iaikg
IT09ICJvYmplY3QiIHx8IG9iai5ub2RlVHlwZSB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IG93
biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdAogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG9iai5jb25zdHJ1Y3RvciAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICFoYXNPd24uY2FsbChvYmosICJjb25zdHJ1Y3RvciIpICYmCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIWhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICJp
c1Byb3RvdHlwZU9mIikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNo
ICggZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUU4LDkgV2lsbCB0aHJvdyBleGNl
cHRpb25zIG9uIGNlcnRhaW4gaG9zdCBvYmplY3RzICM5ODk3CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBP
d24gcHJvcGVydGllcyBhcmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCwKICAg
ICAgICAgICAgICAgIC8vIGlmIGxhc3Qgb25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBh
cmUgb3duLgoKICAgICAgICAgICAgICAgIHZhciBrZXk7CiAgICAgICAgICAgICAgICBmb3IgKCBr
ZXkgaW4gb2JqICkge30KCiAgICAgICAgICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQg
fHwgaGFzT3duLmNhbGwoIG9iaiwga2V5ICk7CiAgICAgICAgfSwKCiAgICAgICAgaXNFbXB0eU9i
amVjdDogZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAgICAgIGZvciAoIHZhciBuYW1lIGlu
IG9iaiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSwKCiAgICAgICAg
ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBtc2c7CiAgICAg
ICAgfSwKCiAgICAgICAgcGFyc2VKU09OOiBmdW5jdGlvbiggZGF0YSApIHsKICAgICAgICAgICAg
ICAgIGlmICggdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciIHx8ICFkYXRhICkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQg
KElFIGNhbid0IGhhbmRsZSBpdCkKICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkudHJpbSgg
ZGF0YSApOwoKICAgICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gcGFyc2UgdXNpbmcgdGhlIG5h
dGl2ZSBKU09OIHBhcnNlciBmaXJzdAogICAgICAgICAgICAgICAgaWYgKCB3aW5kb3cuSlNPTiAm
JiB3aW5kb3cuSlNPTi5wYXJzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdp
bmRvdy5KU09OLnBhcnNlKCBkYXRhICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBpbmNvbWluZyBkYXRhIGlzIGFjdHVhbCBKU09OCiAgICAgICAg
ICAgICAgICAvLyBMb2dpYyBib3Jyb3dlZCBmcm9tIGh0dHA6Ly9qc29uLm9yZy9qc29uMi5qcwog
ICAgICAgICAgICAgICAgaWYgKCBydmFsaWRjaGFycy50ZXN0KCBkYXRhLnJlcGxhY2UoIHJ2YWxp
ZGVzY2FwZSwgIkAiICkKICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZHRv
a2VucywgIl0iICkKICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZGJyYWNl
cywgIiIpKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEZ1bmN0aW9u
KCAicmV0dXJuICIgKyBkYXRhICkpKCk7CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBKU09OOiAiICsgZGF0YSApOwogICAgICAgIH0sCgog
ICAgICAgIC8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmcKICAgICAgICBwYXJzZVhNTDogZnVu
Y3Rpb24oIGRhdGEgKSB7CiAgICAgICAgICAgICAgICB2YXIgeG1sLCB0bXA7CiAgICAgICAgICAg
ICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHdpbmRvdy5ET01QYXJzZXIg
KSB7IC8vIFN0YW5kYXJkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3
IERPTVBhcnNlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IHRtcC5w
YXJzZUZyb21TdHJpbmcoIGRhdGEgLCAidGV4dC94bWwiICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7IC8vIElFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0g
bmV3IEFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MRE9NIiApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHhtbC5hc3luYyA9ICJmYWxzZSI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeG1sLmxvYWRYTUwoIGRhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
eG1sID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAh
eG1sIHx8ICF4bWwuZG9jdW1lbnRFbGVtZW50IHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgg
InBhcnNlcmVycm9yIiApLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmVycm9yKCAiSW52YWxpZCBYTUw6ICIgKyBkYXRhICk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICByZXR1cm4geG1sOwogICAgICAgIH0sCgogICAgICAgIG5vb3A6IGZ1bmN0aW9u
KCkge30sCgogICAgICAgIC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0
CiAgICAgICAgLy8gV29ya2Fyb3VuZHMgYmFzZWQgb24gZmluZGluZ3MgYnkgSmltIERyaXNjb2xs
CiAgICAgICAgLy8gaHR0cDovL3dlYmxvZ3MuamF2YS5uZXQvYmxvZy9kcmlzY29sbC9hcmNoaXZl
LzIwMDkvMDkvMDgvZXZhbC1qYXZhc2NyaXB0LWdsb2JhbC1jb250ZXh0CiAgICAgICAgZ2xvYmFs
RXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGRhdGEgJiYgcm5v
dHdoaXRlLnRlc3QoIGRhdGEgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNl
IGV4ZWNTY3JpcHQgb24gSW50ZXJuZXQgRXhwbG9yZXIKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgdXNlIGFuIGFub255bW91cyBmdW5jdGlvbiBzbyB0aGF0IGNvbnRleHQgaXMgd2luZG93
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGpRdWVyeSBpbiBGaXJlZm94
CiAgICAgICAgICAgICAgICAgICAgICAgICggd2luZG93LmV4ZWNTY3JpcHQgfHwgZnVuY3Rpb24o
IGRhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93WyAiZXZhbCIg
XS5jYWxsKCB3aW5kb3csIGRhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSApKCBkYXRh
ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gQ29udmVydCBkYXNo
ZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcwogICAgICAg
IC8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikK
ICAgICAgICBjYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFs
cGhhLCBmY2FtZWxDYXNlICk7CiAgICAgICAgfSwKCiAgICAgICAgbm9kZU5hbWU6IGZ1bmN0aW9u
KCBlbGVtLCBuYW1lICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYg
ZWxlbS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSBuYW1lLnRvVXBwZXJDYXNlKCk7CiAgICAg
ICAgfSwKCiAgICAgICAgLy8gYXJncyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQogICAgICAg
IGVhY2g6IGZ1bmN0aW9uKCBvYmplY3QsIGNhbGxiYWNrLCBhcmdzICkgewogICAgICAgICAgICAg
ICAgdmFyIG5hbWUsIGkgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBvYmpl
Y3QubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBpc09iaiA9IGxlbmd0aCA9PT0gdW5k
ZWZpbmVkIHx8IGpRdWVyeS5pc0Z1bmN0aW9uKCBvYmplY3QgKTsKCiAgICAgICAgICAgICAgICBp
ZiAoIGFyZ3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNPYmogKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvYmplY3QgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmFwcGx5KCBv
YmplY3RbIG5hbWUgXSwgYXJncyApID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmplY3RbIGkrKyBdLCBhcmdzICkgPT09
IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAvLyBBIHNwZWNpYWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1v
biB1c2Ugb2YgZWFjaAogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBpc09iaiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCBuYW1lIGluIG9iamVjdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqZWN0WyBuYW1lIF0sIG5hbWUsIG9iamVjdFsgbmFt
ZSBdICkgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwg
bGVuZ3RoOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y2FsbGJhY2suY2FsbCggb2JqZWN0WyBpIF0sIGksIG9iamVjdFsgaSsrIF0gKSA9PT0gZmFsc2Ug
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gVXNlIG5hdGl2ZSBTdHJpbmcudHJpbSBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZQog
ICAgICAgIHRyaW06IHRyaW0gPwogICAgICAgICAgICAgICAgZnVuY3Rpb24oIHRleHQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0ID09IG51bGwgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIiIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cmltLmNhbGwoIHRleHQgKTsKICAgICAgICAgICAgICAgIH0gOgoKICAgICAgICAgICAgICAgIC8v
IE90aGVyd2lzZSB1c2Ugb3VyIG93biB0cmltbWluZyBmdW5jdGlvbmFsaXR5CiAgICAgICAgICAg
ICAgICBmdW5jdGlvbiggdGV4dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRl
eHQgPT0gbnVsbCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKCB0cmltTGVm
dCwgIiIgKS5yZXBsYWNlKCB0cmltUmlnaHQsICIiICk7CiAgICAgICAgICAgICAgICB9LAoKICAg
ICAgICAvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CiAgICAgICAgbWFrZUFy
cmF5OiBmdW5jdGlvbiggYXJyYXksIHJlc3VsdHMgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0
ID0gcmVzdWx0cyB8fCBbXTsKCiAgICAgICAgICAgICAgICBpZiAoIGFycmF5ICE9IG51bGwgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB3aW5kb3csIHN0cmluZ3MgKGFuZCBmdW5j
dGlvbnMpIGFsc28gaGF2ZSAnbGVuZ3RoJwogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUg
ZXh0cmEgdHlwZW9mIGZ1bmN0aW9uIGNoZWNrIGlzIHRvIHByZXZlbnQgY3Jhc2hlcwogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpbiBTYWZhcmkgMiAoU2VlOiAjMzAzOSkKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVHdlYWtlZCBsb2dpYyBzbGlnaHRseSB0byBoYW5kbGUgQmxhY2tiZXJy
eSA0LjcgUmVnRXhwIGlzc3VlcyAjNjkzMAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlw
ZSA9IGpRdWVyeS50eXBlKCBhcnJheSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBh
cnJheS5sZW5ndGggPT0gbnVsbCB8fCB0eXBlID09PSAic3RyaW5nIiB8fCB0eXBlID09PSAiZnVu
Y3Rpb24iIHx8IHR5cGUgPT09ICJyZWdleHAiIHx8IGpRdWVyeS5pc1dpbmRvdyggYXJyYXkgKSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmNhbGwoIHJldCwgYXJyYXkg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwgYXJyYXkgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAg
ICAgICAgfSwKCiAgICAgICAgaW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFycmF5ICkgewogICAg
ICAgICAgICAgICAgaWYgKCAhYXJyYXkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAtMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGluZGV4T2YgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleE9mLmNhbGwoIGFycmF5LCBlbGVt
ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBhcnJheVsgaSBdID09PSBlbGVtICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0sCgogICAgICAg
IG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHsKICAgICAgICAgICAgICAgIHZhciBp
ID0gZmlyc3QubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBqID0gMDsKCiAgICAgICAg
ICAgICAgICBpZiAoIHR5cGVvZiBzZWNvbmQubGVuZ3RoID09PSAibnVtYmVyIiApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGwgPSBzZWNvbmQubGVuZ3RoOyBqIDwgbDsgaisr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29u
ZFsgaiBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBzZWNvbmRbal0gIT09IHVuZGVmaW5l
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBzZWNv
bmRbIGorKyBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgZmlyc3QubGVuZ3RoID0gaTsKCiAgICAgICAgICAgICAgICByZXR1cm4g
Zmlyc3Q7CiAgICAgICAgfSwKCiAgICAgICAgZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFj
aywgaW52ICkgewogICAgICAgICAgICAgICAgdmFyIHJldCA9IFtdLCByZXRWYWw7CiAgICAgICAg
ICAgICAgICBpbnYgPSAhIWludjsKCiAgICAgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBh
cnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zCiAgICAgICAgICAgICAgICAvLyB0aGF0IHBhc3Mg
dGhlIHZhbGlkYXRvciBmdW5jdGlvbgogICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0VmFsID0gISFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApOwogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGludiAhPT0gcmV0VmFsICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldC5wdXNoKCBlbGVtc1sgaSBdICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAg
ICAgIH0sCgogICAgICAgIC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQogICAgICAg
IG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgewogICAgICAgICAgICAgICAg
dmFyIHZhbHVlLCBrZXksIHJldCA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwK
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoLAogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBqcXVlcnkgb2JqZWN0cyBhcmUgdHJlYXRlZCBhcyBhcnJheXMKICAg
ICAgICAgICAgICAgICAgICAgICAgaXNBcnJheSA9IGVsZW1zIGluc3RhbmNlb2YgalF1ZXJ5IHx8
IGxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBsZW5ndGggPT09ICJudW1iZXIiICYmICgg
KCBsZW5ndGggPiAwICYmIGVsZW1zWyAwIF0gJiYgZWxlbXNbIGxlbmd0aCAtMSBdICkgfHwgbGVu
Z3RoID09PSAwIHx8IGpRdWVyeS5pc0FycmF5KCBlbGVtcyApICkgOwoKICAgICAgICAgICAgICAg
IC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0
byB0aGVpcgogICAgICAgICAgICAgICAgaWYgKCBpc0FycmF5ICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2Jq
ZWN0LAogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICgga2V5IGluIGVsZW1zICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gY2FsbGJhY2soIGVsZW1zWyBrZXkgXSwga2V5LCBhcmcgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlz
CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0LmNvbmNhdC5hcHBseSggW10sIHJldCApOwogICAg
ICAgIH0sCgogICAgICAgIC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0cwogICAg
ICAgIGd1aWQ6IDEsCgogICAgICAgIC8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9w
dGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueQogICAgICAgIC8vIGFyZ3VtZW50cy4KICAg
ICAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgaWYg
KCB0eXBlb2YgY29udGV4dCA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB0bXAgPSBmblsgY29udGV4dCBdOwogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
ID0gZm47CiAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gdG1wOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQg
aXMgY2FsbGFibGUsIGluIHRoZSBzcGVjCiAgICAgICAgICAgICAgICAvLyB0aGlzIHRocm93cyBh
IFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLgogICAgICAgICAg
ICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gU2ltdWxhdGVkIGJpbmQKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2Fs
bCggYXJndW1lbnRzLCAyICksCiAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5ID0gZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KCBj
b250ZXh0LCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZ3VpZCBvZiB1
bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4g
YmUgcmVtb3ZlZAogICAgICAgICAgICAgICAgcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlk
IHx8IHByb3h5Lmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKCiAgICAgICAgICAgICAgICByZXR1cm4g
cHJveHk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gTXV0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdl
dCBhbmQgc2V0IHZhbHVlcyB0byBhIGNvbGxlY3Rpb24KICAgICAgICAvLyBUaGUgdmFsdWUvcyBj
YW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb24KICAgICAgICBhY2Nl
c3M6IGZ1bmN0aW9uKCBlbGVtcywga2V5LCB2YWx1ZSwgZXhlYywgZm4sIHBhc3MgKSB7CiAgICAg
ICAgICAgICAgICB2YXIgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOwoKICAgICAgICAgICAgICAgIC8v
IFNldHRpbmcgbWFueSBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBrZXkg
PT09ICJvYmplY3QiICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgayBpbiBr
ZXkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmFjY2VzcyggZWxl
bXMsIGssIGtleVtrXSwgZXhlYywgZm4sIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1zOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgb25lIGF0dHJpYnV0ZQogICAgICAgICAgICAg
ICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAv
LyBPcHRpb25hbGx5LCBmdW5jdGlvbiB2YWx1ZXMgZ2V0IGV4ZWN1dGVkIGlmIGV4ZWMgaXMgdHJ1
ZQogICAgICAgICAgICAgICAgICAgICAgICBleGVjID0gIXBhc3MgJiYgZXhlYyAmJiBqUXVlcnku
aXNGdW5jdGlvbih2YWx1ZSk7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
biggZWxlbXNbaV0sIGtleSwgZXhlYyA/IHZhbHVlLmNhbGwoIGVsZW1zW2ldLCBpLCBmbiggZWxl
bXNbaV0sIGtleSApICkgOiB2YWx1ZSwgcGFzcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbXM7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gR2V0dGluZyBhbiBhdHRyaWJ1dGUKICAgICAgICAgICAgICAg
IHJldHVybiBsZW5ndGggPyBmbiggZWxlbXNbMF0sIGtleSApIDogdW5kZWZpbmVkOwogICAgICAg
IH0sCgogICAgICAgIG5vdzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKG5l
dyBEYXRlKCkpLmdldFRpbWUoKTsKICAgICAgICB9LAoKICAgICAgICAvLyBVc2Ugb2YgalF1ZXJ5
LmJyb3dzZXIgaXMgZnJvd25lZCB1cG9uLgogICAgICAgIC8vIE1vcmUgZGV0YWlsczogaHR0cDov
L2RvY3MuanF1ZXJ5LmNvbS9VdGlsaXRpZXMvalF1ZXJ5LmJyb3dzZXIKICAgICAgICB1YU1hdGNo
OiBmdW5jdGlvbiggdWEgKSB7CiAgICAgICAgICAgICAgICB1YSA9IHVhLnRvTG93ZXJDYXNlKCk7
CgogICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gcndlYmtpdC5leGVjKCB1YSApIHx8CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJvcGVyYS5leGVjKCB1YSApIHx8CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJtc2llLmV4ZWMoIHVhICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgdWEuaW5k
ZXhPZigiY29tcGF0aWJsZSIpIDwgMCAmJiBybW96aWxsYS5leGVjKCB1YSApIHx8CiAgICAgICAg
ICAgICAgICAgICAgICAgIFtdOwoKICAgICAgICAgICAgICAgIHJldHVybiB7IGJyb3dzZXI6IG1h
dGNoWzFdIHx8ICIiLCB2ZXJzaW9uOiBtYXRjaFsyXSB8fCAiMCIgfTsKICAgICAgICB9LAoKICAg
ICAgICBzdWI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgZnVuY3Rpb24galF1ZXJ5U3Vi
KCBzZWxlY3RvciwgY29udGV4dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5l
dyBqUXVlcnlTdWIuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIHRydWUsIGpRdWVyeVN1YiwgdGhpcyAp
OwogICAgICAgICAgICAgICAgalF1ZXJ5U3ViLnN1cGVyY2xhc3MgPSB0aGlzOwogICAgICAgICAg
ICAgICAgalF1ZXJ5U3ViLmZuID0galF1ZXJ5U3ViLnByb3RvdHlwZSA9IHRoaXMoKTsKICAgICAg
ICAgICAgICAgIGpRdWVyeVN1Yi5mbi5jb25zdHJ1Y3RvciA9IGpRdWVyeVN1YjsKICAgICAgICAg
ICAgICAgIGpRdWVyeVN1Yi5zdWIgPSB0aGlzLnN1YjsKICAgICAgICAgICAgICAgIGpRdWVyeVN1
Yi5mbi5pbml0ID0gZnVuY3Rpb24gaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggY29udGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5
ICYmICEoY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeVN1YikgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dCA9IGpRdWVyeVN1YiggY29udGV4dCApOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmZu
LmluaXQuY2FsbCggdGhpcywgc2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnlTdWIgKTsKICAg
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBqUXVlcnlTdWIuZm4uaW5pdC5wcm90b3R5
cGUgPSBqUXVlcnlTdWIuZm47CiAgICAgICAgICAgICAgICB2YXIgcm9vdGpRdWVyeVN1YiA9IGpR
dWVyeVN1Yihkb2N1bWVudCk7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5U3ViOwogICAg
ICAgIH0sCgogICAgICAgIGJyb3dzZXI6IHt9Cn0pOwoKLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5
cGUgbWFwCmpRdWVyeS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkg
RGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7CiAgICAg
ICAgY2xhc3MydHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNh
c2UoKTsKfSk7Cgpicm93c2VyTWF0Y2ggPSBqUXVlcnkudWFNYXRjaCggdXNlckFnZW50ICk7Cmlm
ICggYnJvd3Nlck1hdGNoLmJyb3dzZXIgKSB7CiAgICAgICAgalF1ZXJ5LmJyb3dzZXJbIGJyb3dz
ZXJNYXRjaC5icm93c2VyIF0gPSB0cnVlOwogICAgICAgIGpRdWVyeS5icm93c2VyLnZlcnNpb24g
PSBicm93c2VyTWF0Y2gudmVyc2lvbjsKfQoKLy8gRGVwcmVjYXRlZCwgdXNlIGpRdWVyeS5icm93
c2VyLndlYmtpdCBpbnN0ZWFkCmlmICggalF1ZXJ5LmJyb3dzZXIud2Via2l0ICkgewogICAgICAg
IGpRdWVyeS5icm93c2VyLnNhZmFyaSA9IHRydWU7Cn0KCi8vIElFIGRvZXNuJ3QgbWF0Y2ggbm9u
LWJyZWFraW5nIHNwYWNlcyB3aXRoIFxzCmlmICggcm5vdHdoaXRlLnRlc3QoICJceEEwIiApICkg
ewogICAgICAgIHRyaW1MZWZ0ID0gL15bXHNceEEwXSsvOwogICAgICAgIHRyaW1SaWdodCA9IC9b
XHNceEEwXSskLzsKfQoKLy8gQWxsIGpRdWVyeSBvYmplY3RzIHNob3VsZCBwb2ludCBiYWNrIHRv
IHRoZXNlCnJvb3RqUXVlcnkgPSBqUXVlcnkoZG9jdW1lbnQpOwoKLy8gQ2xlYW51cCBmdW5jdGlv
bnMgZm9yIHRoZSBkb2N1bWVudCByZWFkeSBtZXRob2QKaWYgKCBkb2N1bWVudC5hZGRFdmVudExp
c3RlbmVyICkgewogICAgICAgIERPTUNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVk
IiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2UgKTsKICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFk
eSgpOwogICAgICAgIH07Cgp9IGVsc2UgaWYgKCBkb2N1bWVudC5hdHRhY2hFdmVudCApIHsKICAg
ICAgICBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgYm9keSBleGlzdHMsIGF0IGxlYXN0LCBpbiBjYXNlIElFIGdldHMgYSBsaXR0bGUg
b3ZlcnplYWxvdXMgKHRpY2tldCAjNTQ0MykuCiAgICAgICAgICAgICAgICBpZiAoIGRvY3VtZW50
LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmRldGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRl
ZCApOwogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHkoKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9Owp9CgovLyBUaGUgRE9NIHJlYWR5IGNoZWNrIGZvciBJbnRlcm5ldCBF
eHBsb3JlcgpmdW5jdGlvbiBkb1Njcm9sbENoZWNrKCkgewogICAgICAgIGlmICggalF1ZXJ5Lmlz
UmVhZHkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0cnkg
ewogICAgICAgICAgICAgICAgLy8gSWYgSUUgaXMgdXNlZCwgdXNlIHRoZSB0cmljayBieSBEaWVn
byBQZXJpbmkKICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9J
RUNvbnRlbnRMb2FkZWQvCiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu
ZG9TY3JvbGwoImxlZnQiKTsKICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgICAgIHNl
dFRpbWVvdXQoIGRvU2Nyb2xsQ2hlY2ssIDEgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICB9CgogICAgICAgIC8vIGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucwogICAg
ICAgIGpRdWVyeS5yZWFkeSgpOwp9CgpyZXR1cm4galF1ZXJ5OwoKfSkoKTsKCgp2YXIgLy8gUHJv
bWlzZSBtZXRob2RzCiAgICAgICAgcHJvbWlzZU1ldGhvZHMgPSAiZG9uZSBmYWlsIGlzUmVzb2x2
ZWQgaXNSZWplY3RlZCBwcm9taXNlIHRoZW4gYWx3YXlzIHBpcGUiLnNwbGl0KCAiICIgKSwKICAg
ICAgICAvLyBTdGF0aWMgcmVmZXJlbmNlIHRvIHNsaWNlCiAgICAgICAgc2xpY2VEZWZlcnJlZCA9
IFtdLnNsaWNlOwoKalF1ZXJ5LmV4dGVuZCh7CiAgICAgICAgLy8gQ3JlYXRlIGEgc2ltcGxlIGRl
ZmVycmVkIChvbmUgY2FsbGJhY2tzIGxpc3QpCiAgICAgICAgX0RlZmVycmVkOiBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgIHZhciAvLyBjYWxsYmFja3MgbGlzdAogICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFja3MgPSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmVk
IFsgY29udGV4dCAsIGFyZ3MgXQogICAgICAgICAgICAgICAgICAgICAgICBmaXJlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgZmlyaW5nIHdoZW4gYWxyZWFkeSBkb2luZyBz
bwogICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGZsYWcgdG8ga25vdyBpZiB0aGUgZGVmZXJyZWQgaGFzIGJlZW4gY2FuY2VsbGVkCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIGRlZmVycmVkIGl0c2VsZgogICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZCAgPSB7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbmUoIGYxLCBmMiwgLi4uKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uKCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY2FuY2VsbGVkICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFy
Z3VtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZpcmVkOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmVkICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9maXJlZCA9IGZpcmVkOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
cmVkID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBp
ID0gMCwgbGVuZ3RoID0gYXJncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gYXJn
c1sgaSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGUgPSBqUXVlcnkudHlwZSggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImFycmF5IiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkLmRvbmUuYXBwbHkoIGRlZmVycmVkLCBlbGVtICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggdHlwZSA9PT0gImZ1bmN0aW9uIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKCBlbGVtICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggX2ZpcmVkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLnJlc29sdmVXaXRoKCBfZmlyZWRbIDAgXSwgX2ZpcmVkWyAxIF0gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSB3aXRoIGdpdmVu
IGNvbnRleHQgYW5kIGFyZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZl
V2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFjYW5jZWxsZWQgJiYgIWZpcmVkICYmICFmaXJpbmcgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ug
c3VyZSBhcmdzIGFyZSBhdmFpbGFibGUgKCM4NDIxKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncyB8fCBbXTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nID0gMTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggY2FsbGJhY2tz
WyAwIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFja3Muc2hpZnQoKS5hcHBseSggY29udGV4dCwgYXJncyAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJl
ZCA9IFsgY29udGV4dCwgYXJncyBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcmluZyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgd2l0aCB0aGlzIGFzIGNvbnRleHQgYW5kIGdp
dmVuIGFyZ3VtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6IGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQucmVzb2x2ZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFzIHRoaXMgZGVm
ZXJyZWQgYmVlbiByZXNvbHZlZD8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jl
c29sdmVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAhISggZmlyaW5nIHx8IGZpcmVkICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuY2VsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZCA9IDE7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBbXTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAg
ICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CiAgICAgICAgfSwKCiAgICAgICAgLy8gRnVsbCBmbGVk
Z2VkIGRlZmVycmVkICh0d28gY2FsbGJhY2tzIGxpc3QpCiAgICAgICAgRGVmZXJyZWQ6IGZ1bmN0
aW9uKCBmdW5jICkgewogICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkID0galF1ZXJ5Ll9EZWZl
cnJlZCgpLAogICAgICAgICAgICAgICAgICAgICAgICBmYWlsRGVmZXJyZWQgPSBqUXVlcnkuX0Rl
ZmVycmVkKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U7CiAgICAgICAgICAgICAg
ICAvLyBBZGQgZXJyb3JEZWZlcnJlZCBtZXRob2RzLCB0aGVuIGFuZCBwcm9taXNlCiAgICAgICAg
ICAgICAgICBqUXVlcnkuZXh0ZW5kKCBkZWZlcnJlZCwgewogICAgICAgICAgICAgICAgICAgICAg
ICB0aGVuOiBmdW5jdGlvbiggZG9uZUNhbGxiYWNrcywgZmFpbENhbGxiYWNrcyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5kb25lKCBkb25lQ2FsbGJhY2tzICku
ZmFpbCggZmFpbENhbGxiYWNrcyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAg
ICAgICBhbHdheXM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBkZWZlcnJlZC5kb25lLmFwcGx5KCBkZWZlcnJlZCwgYXJndW1lbnRzICkuZmFpbC5h
cHBseSggdGhpcywgYXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICAgICAgICAgICAgIGZhaWw6IGZhaWxEZWZlcnJlZC5kb25lLAogICAgICAgICAgICAg
ICAgICAgICAgICByZWplY3RXaXRoOiBmYWlsRGVmZXJyZWQucmVzb2x2ZVdpdGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHJlamVjdDogZmFpbERlZmVycmVkLnJlc29sdmUsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhaWxEZWZlcnJlZC5pc1Jlc29sdmVkLAogICAgICAg
ICAgICAgICAgICAgICAgICBwaXBlOiBmdW5jdGlvbiggZm5Eb25lLCBmbkZhaWwgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJlZChmdW5jdGlv
biggbmV3RGVmZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZWFjaCggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb25lOiBbIGZuRG9uZSwgInJlc29sdmUiIF0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWw6IFsgZm5GYWlsLCAicmVqZWN0IiBdCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiggaGFuZGxlciwg
ZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGZuID0gZGF0YVsgMCBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IGRhdGFbIDEgXSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggZm4gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZFsgaGFuZGxlciBdKGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuZWQgPSBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldHVybmVk
ICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybmVkLnByb21pc2UoKS50aGVuKCBuZXdEZWZlci5yZXNvbHZlLCBuZXdEZWZlci5y
ZWplY3QgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RlZmVyWyBhY3Rpb24g
KyAiV2l0aCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyBuZXdEZWZlciA6IHRoaXMsIFsgcmV0dXJu
ZWQgXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkWyBoYW5kbGVyIF0oIG5ld0RlZmVyWyBhY3Rpb24g
XSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9KS5wcm9taXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0s
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJy
ZWQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJv
bWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAg
ICBwcm9taXNlOiBmdW5jdGlvbiggb2JqICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggb2JqID09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHByb21pc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvbWlzZSA9IG9iaiA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHByb21pc2VNZXRob2RzLmxlbmd0
aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggaS0tICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqWyBwcm9taXNlTWV0aG9kc1tpXSBd
ID0gZGVmZXJyZWRbIHByb21pc2VNZXRob2RzW2ldIF07CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIG9ubHkgb25lIGNhbGxiYWNrIGxpc3Qgd2lsbCBiZSB1c2VkCiAgICAg
ICAgICAgICAgICBkZWZlcnJlZC5kb25lKCBmYWlsRGVmZXJyZWQuY2FuY2VsICkuZmFpbCggZGVm
ZXJyZWQuY2FuY2VsICk7CiAgICAgICAgICAgICAgICAvLyBVbmV4cG9zZSBjYW5jZWwKICAgICAg
ICAgICAgICAgIGRlbGV0ZSBkZWZlcnJlZC5jYW5jZWw7CiAgICAgICAgICAgICAgICAvLyBDYWxs
IGdpdmVuIGZ1bmMgaWYgYW55CiAgICAgICAgICAgICAgICBpZiAoIGZ1bmMgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CiAgICAgICAgfSwKCiAg
ICAgICAgLy8gRGVmZXJyZWQgaGVscGVyCiAgICAgICAgd2hlbjogZnVuY3Rpb24oIGZpcnN0UGFy
YW0gKSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cywKICAgICAgICAgICAg
ICAgICAgICAgICAgaSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3Mu
bGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGxlbmd0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQgPSBsZW5ndGggPD0gMSAmJiBmaXJzdFBhcmFtICYmIGpR
dWVyeS5pc0Z1bmN0aW9uKCBmaXJzdFBhcmFtLnByb21pc2UgKSA/CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RQYXJhbSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LkRlZmVycmVkKCk7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRnVu
YyggaSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWyBpIF0gPSBhcmd1bWVudHMu
bGVuZ3RoID4gMSA/IHNsaWNlRGVmZXJyZWQuY2FsbCggYXJndW1lbnRzLCAwICkgOiB2YWx1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEoIC0tY291bnQgKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmFuZ2UgYnVnIGluIEZG
NDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhbHVlcyBjaGFu
Z2VkIG9udG8gdGhlIGFyZ3VtZW50cyBvYmplY3Qgc29tZXRpbWVzIGVuZCB1cCBhcyB1bmRlZmlu
ZWQgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXRz
aWRlIHRoZSAkLndoZW4gbWV0aG9kLiBDbG9uaW5nIHRoZSBvYmplY3QgaW50byBhIGZyZXNoIGFy
cmF5IHNvbHZlcyB0aGUgaXNzdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBkZWZlcnJlZCwgc2xpY2VEZWZlcnJlZC5jYWxsKCBh
cmdzLCAwICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIGxl
bmd0aCA+IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciggOyBpIDwgbGVuZ3RoOyBp
KysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcmdzWyBpIF0gJiYg
alF1ZXJ5LmlzRnVuY3Rpb24oIGFyZ3NbIGkgXS5wcm9taXNlICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWyBpIF0ucHJvbWlzZSgpLnRoZW4oIHJlc29s
dmVGdW5jKGkpLCBkZWZlcnJlZC5yZWplY3QgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1j
b3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY291bnQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGRlZmVycmVkLCBh
cmdzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIGRlZmVycmVkICE9PSBmaXJzdFBhcmFtICkgewogICAgICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVmZXJyZWQsIGxlbmd0aCA/IFsgZmlyc3RQYXJhbSBdIDog
W10gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5w
cm9taXNlKCk7CiAgICAgICAgfQp9KTsKCgoKalF1ZXJ5LnN1cHBvcnQgPSAoZnVuY3Rpb24oKSB7
CgogICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLAogICAg
ICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAog
ICAgICAgICAgICAgICAgYWxsLAogICAgICAgICAgICAgICAgYSwKICAgICAgICAgICAgICAgIHNl
bGVjdCwKICAgICAgICAgICAgICAgIG9wdCwKICAgICAgICAgICAgICAgIGlucHV0LAogICAgICAg
ICAgICAgICAgbWFyZ2luRGl2LAogICAgICAgICAgICAgICAgc3VwcG9ydCwKICAgICAgICAgICAg
ICAgIGZyYWdtZW50LAogICAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICAgIHRlc3RF
bGVtZW50UGFyZW50LAogICAgICAgICAgICAgICAgdGVzdEVsZW1lbnQsCiAgICAgICAgICAgICAg
ICB0ZXN0RWxlbWVudFN0eWxlLAogICAgICAgICAgICAgICAgdGRzLAogICAgICAgICAgICAgICAg
ZXZlbnRzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgaSwKICAg
ICAgICAgICAgICAgIGlzU3VwcG9ydGVkOwoKICAgICAgICAvLyBQcmVsaW1pbmFyeSB0ZXN0cwog
ICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsICJ0Iik7CiAgICAgICAgZGl2Lmlu
bmVySFRNTCA9ICIgICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSd0
b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2Jv
eCcvPiI7CgoKICAgICAgICBhbGwgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICIqIiApOwog
ICAgICAgIGEgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJhIiApWyAwIF07CgogICAgICAg
IC8vIENhbid0IGdldCBiYXNpYyB0ZXN0IHN1cHBvcnQKICAgICAgICBpZiAoICFhbGwgfHwgIWFs
bC5sZW5ndGggfHwgIWEgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4ge307CiAgICAgICAgfQoK
ICAgICAgICAvLyBGaXJzdCBiYXRjaCBvZiBzdXBwb3J0cyB0ZXN0cwogICAgICAgIHNlbGVjdCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJzZWxlY3QiICk7CiAgICAgICAgb3B0ID0gc2VsZWN0
LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSApOwogICAgICAg
IGlucHV0ID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiaW5wdXQiIClbIDAgXTsKCiAgICAg
ICAgc3VwcG9ydCA9IHsKICAgICAgICAgICAgICAgIC8vIElFIHN0cmlwcyBsZWFkaW5nIHdoaXRl
c3BhY2Ugd2hlbiAuaW5uZXJIVE1MIGlzIHVzZWQKICAgICAgICAgICAgICAgIGxlYWRpbmdXaGl0
ZXNwYWNlOiAoIGRpdi5maXJzdENoaWxkLm5vZGVUeXBlID09PSAzICksCgogICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGJvZHkgZWxlbWVudHMgYXJlbid0IGF1dG9tYXRpY2FsbHkg
aW5zZXJ0ZWQKICAgICAgICAgICAgICAgIC8vIElFIHdpbGwgaW5zZXJ0IHRoZW0gaW50byBlbXB0
eSB0YWJsZXMKICAgICAgICAgICAgICAgIHRib2R5OiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCAidGJvZHkiICkubGVuZ3RoLAoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxp
bmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29ycmVjdGx5IGJ5IGlubmVySFRNTAogICAgICAg
ICAgICAgICAgLy8gVGhpcyByZXF1aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQogICAgICAg
ICAgICAgICAgaHRtbFNlcmlhbGl6ZTogISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJsaW5r
IiApLmxlbmd0aCwKCiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9u
IGZyb20gZ2V0QXR0cmlidXRlCiAgICAgICAgICAgICAgICAvLyAoSUUgdXNlcyAuY3NzVGV4dCBp
bnN0ZWFkKQogICAgICAgICAgICAgICAgc3R5bGU6IC90b3AvLnRlc3QoIGEuZ2V0QXR0cmlidXRl
KCJzdHlsZSIpICksCgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgVVJMcyBhcmVu
J3QgbWFuaXB1bGF0ZWQKICAgICAgICAgICAgICAgIC8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRl
ZmF1bHQpCiAgICAgICAgICAgICAgICBocmVmTm9ybWFsaXplZDogKCBhLmdldEF0dHJpYnV0ZSgg
ImhyZWYiICkgPT09ICIvYSIgKSwKCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBl
bGVtZW50IG9wYWNpdHkgZXhpc3RzCiAgICAgICAgICAgICAgICAvLyAoSUUgdXNlcyBmaWx0ZXIg
aW5zdGVhZCkKICAgICAgICAgICAgICAgIC8vIFVzZSBhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEg
V2ViS2l0IGlzc3VlLiBTZWUgIzUxNDUKICAgICAgICAgICAgICAgIG9wYWNpdHk6IC9eMC41NSQv
LnRlc3QoIGEuc3R5bGUub3BhY2l0eSApLAoKICAgICAgICAgICAgICAgIC8vIFZlcmlmeSBzdHls
ZSBmbG9hdCBleGlzdGVuY2UKICAgICAgICAgICAgICAgIC8vIChJRSB1c2VzIHN0eWxlRmxvYXQg
aW5zdGVhZCBvZiBjc3NGbG9hdCkKICAgICAgICAgICAgICAgIGNzc0Zsb2F0OiAhIWEuc3R5bGUu
Y3NzRmxvYXQsCgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgbm8gdmFsdWUg
aXMgc3BlY2lmaWVkIGZvciBhIGNoZWNrYm94CiAgICAgICAgICAgICAgICAvLyB0aGF0IGl0IGRl
ZmF1bHRzIHRvICJvbiIuCiAgICAgICAgICAgICAgICAvLyAoV2ViS2l0IGRlZmF1bHRzIHRvICIi
IGluc3RlYWQpCiAgICAgICAgICAgICAgICBjaGVja09uOiAoIGlucHV0LnZhbHVlID09PSAib24i
ICksCgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZh
dWx0IG9wdGlvbiBoYXMgYSB3b3JraW5nIHNlbGVjdGVkIHByb3BlcnR5LgogICAgICAgICAgICAg
ICAgLy8gKFdlYktpdCBkZWZhdWx0cyB0byBmYWxzZSBpbnN0ZWFkIG9mIHRydWUsIElFIHRvbywg
aWYgaXQncyBpbiBhbiBvcHRncm91cCkKICAgICAgICAgICAgICAgIG9wdFNlbGVjdGVkOiBvcHQu
c2VsZWN0ZWQsCgogICAgICAgICAgICAgICAgLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2FtZWxD
YXNlIGNsYXNzLiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBnZXQv
c2V0QXR0cmlidXRlIChpZTYvNykKICAgICAgICAgICAgICAgIGdldFNldEF0dHJpYnV0ZTogZGl2
LmNsYXNzTmFtZSAhPT0gInQiLAoKICAgICAgICAgICAgICAgIC8vIFdpbGwgYmUgZGVmaW5lZCBs
YXRlcgogICAgICAgICAgICAgICAgc3VibWl0QnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICAg
IGNoYW5nZUJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBmb2N1c2luQnViYmxlczogZmFs
c2UsCiAgICAgICAgICAgICAgICBkZWxldGVFeHBhbmRvOiB0cnVlLAogICAgICAgICAgICAgICAg
bm9DbG9uZUV2ZW50OiB0cnVlLAogICAgICAgICAgICAgICAgaW5saW5lQmxvY2tOZWVkc0xheW91
dDogZmFsc2UsCiAgICAgICAgICAgICAgICBzaHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKICAgICAg
ICAgICAgICAgIHJlbGlhYmxlTWFyZ2luUmlnaHQ6IHRydWUKICAgICAgICB9OwoKICAgICAgICAv
LyBNYWtlIHN1cmUgY2hlY2tlZCBzdGF0dXMgaXMgcHJvcGVybHkgY2xvbmVkCiAgICAgICAgaW5w
dXQuY2hlY2tlZCA9IHRydWU7CiAgICAgICAgc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9IGlucHV0
LmNsb25lTm9kZSggdHJ1ZSApLmNoZWNrZWQ7CgogICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRo
ZSBvcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZW4ndCBtYXJrZWQgYXMgZGlzYWJs
ZWQKICAgICAgICAvLyAoV2ViS2l0IG1hcmtzIHRoZW0gYXMgZGlzYWJsZWQpCiAgICAgICAgc2Vs
ZWN0LmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICBzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9wdC5k
aXNhYmxlZDsKCiAgICAgICAgLy8gVGVzdCB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkZWxl
dGUgYW4gZXhwYW5kbyBmcm9tIGFuIGVsZW1lbnQKICAgICAgICAvLyBGYWlscyBpbiBJbnRlcm5l
dCBFeHBsb3JlcgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBkZWxldGUgZGl2LnRlc3Q7
CiAgICAgICAgfSBjYXRjaCggZSApIHsKICAgICAgICAgICAgICAgIHN1cHBvcnQuZGVsZXRlRXhw
YW5kbyA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhZGl2LmFkZEV2ZW50TGlzdGVu
ZXIgJiYgZGl2LmF0dGFjaEV2ZW50ICYmIGRpdi5maXJlRXZlbnQgKSB7CiAgICAgICAgICAgICAg
ICBkaXYuYXR0YWNoRXZlbnQoICJvbmNsaWNrIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENsb25pbmcgYSBub2RlIHNob3VsZG4ndCBjb3B5IG92ZXIgYW55CiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGJvdW5kIGV2ZW50IGhhbmRsZXJzIChJRSBkb2VzIHRoaXMp
CiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQubm9DbG9uZUV2ZW50ID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGRpdi5jbG9uZU5vZGUoIHRydWUgKS5m
aXJlRXZlbnQoICJvbmNsaWNrIiApOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgYSBy
YWRpbyBtYWludGFpbnMgaXQncyB2YWx1ZQogICAgICAgIC8vIGFmdGVyIGJlaW5nIGFwcGVuZGVk
IHRvIHRoZSBET00KICAgICAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0
Iik7CiAgICAgICAgaW5wdXQudmFsdWUgPSAidCI7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRl
KCJ0eXBlIiwgInJhZGlvIik7CiAgICAgICAgc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFs
dWUgPT09ICJ0IjsKCiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwgImNoZWNr
ZWQiKTsKICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7CiAgICAgICAgZnJhZ21lbnQg
PSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgICAgZnJhZ21lbnQuYXBw
ZW5kQ2hpbGQoIGRpdi5maXJzdENoaWxkICk7CgogICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGNs
b25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50cwogICAgICAgIHN1cHBvcnQu
Y2hlY2tDbG9uZSA9IGZyYWdtZW50LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSAp
Lmxhc3RDaGlsZC5jaGVja2VkOwoKICAgICAgICBkaXYuaW5uZXJIVE1MID0gIiI7CgogICAgICAg
IC8vIEZpZ3VyZSBvdXQgaWYgdGhlIFczQyBib3ggbW9kZWwgd29ya3MgYXMgZXhwZWN0ZWQKICAg
ICAgICBkaXYuc3R5bGUud2lkdGggPSBkaXYuc3R5bGUucGFkZGluZ0xlZnQgPSAiMXB4IjsKCiAg
ICAgICAgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiYm9keSIgKVsgMCBd
OwogICAgICAgIC8vIFdlIHVzZSBvdXIgb3duLCBpbnZpc2libGUsIGJvZHkgdW5sZXNzIHRoZSBi
b2R5IGlzIGFscmVhZHkgcHJlc2VudAogICAgICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgdXNlIGEg
ZGl2ICgjOTIzOSkKICAgICAgICB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
IGJvZHkgPyAiZGl2IiA6ICJib2R5IiApOwogICAgICAgIHRlc3RFbGVtZW50U3R5bGUgPSB7CiAg
ICAgICAgICAgICAgICB2aXNpYmlsaXR5OiAiaGlkZGVuIiwKICAgICAgICAgICAgICAgIHdpZHRo
OiAwLAogICAgICAgICAgICAgICAgaGVpZ2h0OiAwLAogICAgICAgICAgICAgICAgYm9yZGVyOiAw
LAogICAgICAgICAgICAgICAgbWFyZ2luOiAwLAogICAgICAgICAgICAgICAgYmFja2dyb3VuZDog
Im5vbmUiCiAgICAgICAgfTsKICAgICAgICBpZiAoIGJvZHkgKSB7CiAgICAgICAgICAgICAgICBq
UXVlcnkuZXh0ZW5kKCB0ZXN0RWxlbWVudFN0eWxlLCB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHBvc2l0aW9uOiAiYWJzb2x1dGUiLAogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAiLTEw
MDBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogIi0xMDAwcHgiCiAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZm9yICggaSBpbiB0ZXN0RWxlbWVudFN0eWxlICkg
ewogICAgICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGVbIGkgXSA9IHRlc3RFbGVtZW50U3R5
bGVbIGkgXTsKICAgICAgICB9CiAgICAgICAgdGVzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGRpdiAp
OwogICAgICAgIHRlc3RFbGVtZW50UGFyZW50ID0gYm9keSB8fCBkb2N1bWVudEVsZW1lbnQ7CiAg
ICAgICAgdGVzdEVsZW1lbnRQYXJlbnQuaW5zZXJ0QmVmb3JlKCB0ZXN0RWxlbWVudCwgdGVzdEVs
ZW1lbnRQYXJlbnQuZmlyc3RDaGlsZCApOwoKICAgICAgICAvLyBDaGVjayBpZiBhIGRpc2Nvbm5l
Y3RlZCBjaGVja2JveCB3aWxsIHJldGFpbiBpdHMgY2hlY2tlZAogICAgICAgIC8vIHZhbHVlIG9m
IHRydWUgYWZ0ZXIgYXBwZW5kZWQgdG8gdGhlIERPTSAoSUU2LzcpCiAgICAgICAgc3VwcG9ydC5h
cHBlbmRDaGVja2VkID0gaW5wdXQuY2hlY2tlZDsKCiAgICAgICAgc3VwcG9ydC5ib3hNb2RlbCA9
IGRpdi5vZmZzZXRXaWR0aCA9PT0gMjsKCiAgICAgICAgaWYgKCAiem9vbSIgaW4gZGl2LnN0eWxl
ICkgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxl
bWVudHMgYWN0IGxpa2UgaW5saW5lLWJsb2NrCiAgICAgICAgICAgICAgICAvLyBlbGVtZW50cyB3
aGVuIHNldHRpbmcgdGhlaXIgZGlzcGxheSB0byAnaW5saW5lJyBhbmQgZ2l2aW5nCiAgICAgICAg
ICAgICAgICAvLyB0aGVtIGxheW91dAogICAgICAgICAgICAgICAgLy8gKElFIDwgOCBkb2VzIHRo
aXMpCiAgICAgICAgICAgICAgICBkaXYuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUiOwogICAgICAg
ICAgICAgICAgZGl2LnN0eWxlLnpvb20gPSAxOwogICAgICAgICAgICAgICAgc3VwcG9ydC5pbmxp
bmVCbG9ja05lZWRzTGF5b3V0ID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDIgKTsKCiAgICAgICAg
ICAgICAgICAvLyBDaGVjayBpZiBlbGVtZW50cyB3aXRoIGxheW91dCBzaHJpbmstd3JhcCB0aGVp
ciBjaGlsZHJlbgogICAgICAgICAgICAgICAgLy8gKElFIDYgZG9lcyB0aGlzKQogICAgICAgICAg
ICAgICAgZGl2LnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICAgICAgICAgIGRpdi5pbm5lckhU
TUwgPSAiPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IjsKICAgICAgICAgICAgICAgIHN1
cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9mZnNldFdpZHRoICE9PSAyICk7CiAgICAg
ICAgfQoKICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjx0YWJsZT48dHI+PHRkIHN0eWxlPSdwYWRk
aW5nOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+
IjsKICAgICAgICB0ZHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJ0ZCIgKTsKCiAgICAg
ICAgLy8gQ2hlY2sgaWYgdGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9IZWlnaHQg
d2hlbiB0aGV5IGFyZSBzZXQKICAgICAgICAvLyB0byBkaXNwbGF5Om5vbmUgYW5kIHRoZXJlIGFy
ZSBzdGlsbCBvdGhlciB2aXNpYmxlIHRhYmxlIGNlbGxzIGluIGEKICAgICAgICAvLyB0YWJsZSBy
b3c7IGlmIHNvLCBvZmZzZXRXaWR0aC9IZWlnaHQgYXJlIG5vdCByZWxpYWJsZSBmb3IgdXNlIHdo
ZW4KICAgICAgICAvLyBkZXRlcm1pbmluZyBpZiBhbiBlbGVtZW50IGhhcyBiZWVuIGhpZGRlbiBk
aXJlY3RseSB1c2luZwogICAgICAgIC8vIGRpc3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2FmZSB0
byB1c2Ugb2Zmc2V0cyBpZiBhIHBhcmVudCBlbGVtZW50IGlzCiAgICAgICAgLy8gaGlkZGVuOyBk
b24gc2FmZXR5IGdvZ2dsZXMgYW5kIHNlZSBidWcgIzQ1MTIgZm9yIG1vcmUgaW5mb3JtYXRpb24p
LgogICAgICAgIC8vIChvbmx5IElFIDggZmFpbHMgdGhpcyB0ZXN0KQogICAgICAgIGlzU3VwcG9y
dGVkID0gKCB0ZHNbIDAgXS5vZmZzZXRIZWlnaHQgPT09IDAgKTsKCiAgICAgICAgdGRzWyAwIF0u
c3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgIHRkc1sgMSBdLnN0eWxlLmRpc3BsYXkgPSAibm9u
ZSI7CgogICAgICAgIC8vIENoZWNrIGlmIGVtcHR5IHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zm
c2V0V2lkdGgvSGVpZ2h0CiAgICAgICAgLy8gKElFIDwgOCBmYWlsIHRoaXMgdGVzdCkKICAgICAg
ICBzdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyA9IGlzU3VwcG9ydGVkICYmICggdGRzWyAw
IF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7CiAgICAgICAgZGl2LmlubmVySFRNTCA9ICIiOwoKICAg
ICAgICAvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBhbmQgbm8gbWFyZ2luLXJp
Z2h0IGluY29ycmVjdGx5CiAgICAgICAgLy8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFz
ZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiBGb3IgbW9yZQogICAgICAgIC8vIGluZm8gc2VlIGJ1
ZyAjMzMzMwogICAgICAgIC8vIEZhaWxzIGluIFdlYktpdCBiZWZvcmUgRmViIDIwMTEgbmlnaHRs
aWVzCiAgICAgICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJu
cyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0CiAgICAgICAgaWYgKCBkb2N1bWVudC5kZWZh
dWx0VmlldyAmJiBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlICkgewogICAg
ICAgICAgICAgICAgbWFyZ2luRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsK
ICAgICAgICAgICAgICAgIG1hcmdpbkRpdi5zdHlsZS53aWR0aCA9ICIwIjsKICAgICAgICAgICAg
ICAgIG1hcmdpbkRpdi5zdHlsZS5tYXJnaW5SaWdodCA9ICIwIjsKICAgICAgICAgICAgICAgIGRp
di5hcHBlbmRDaGlsZCggbWFyZ2luRGl2ICk7CiAgICAgICAgICAgICAgICBzdXBwb3J0LnJlbGlh
YmxlTWFyZ2luUmlnaHQgPQogICAgICAgICAgICAgICAgICAgICAgICAoIHBhcnNlSW50KCAoIGRv
Y3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoIG1hcmdpbkRpdiwgbnVsbCApIHx8
IHsgbWFyZ2luUmlnaHQ6IDAgfSApLm1hcmdpblJpZ2h0LCAxMCApIHx8IDAgKSA9PT0gMDsKICAg
ICAgICB9CgogICAgICAgIC8vIFJlbW92ZSB0aGUgYm9keSBlbGVtZW50IHdlIGFkZGVkCiAgICAg
ICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgdGVzdEVsZW1lbnRQYXJlbnQu
cmVtb3ZlQ2hpbGQoIHRlc3RFbGVtZW50ICk7CgogICAgICAgIC8vIFRlY2huaXF1ZSBmcm9tIEp1
cml5IFpheXRzZXYKICAgICAgICAvLyBodHRwOi8vdGhpbmt3ZWIyLmNvbS9wcm9qZWN0cy9wcm90
b3R5cGUvZGV0ZWN0aW5nLWV2ZW50LXN1cHBvcnQtd2l0aG91dC1icm93c2VyLXNuaWZmaW5nLwog
ICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY2FzZSB3aGVyZSBub24tc3RhbmRhcmQg
ZXZlbnQgc3lzdGVtcwogICAgICAgIC8vIGFyZSB1c2VkLCBuYW1lbHkgaW4gSUUuIFNob3J0LWNp
cmN1aXRpbmcgaGVyZSBoZWxwcyB1cyB0bwogICAgICAgIC8vIGF2b2lkIGFuIGV2YWwgY2FsbCAo
aW4gc2V0QXR0cmlidXRlKSB3aGljaCBjYW4gY2F1c2UgQ1NQCiAgICAgICAgLy8gdG8gZ28gaGF5
d2lyZS4gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9DU1AK
ICAgICAgICBpZiAoIGRpdi5hdHRhY2hFdmVudCApIHsKICAgICAgICAgICAgICAgIGZvciggaSBp
biB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdDogMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2luOiAxCiAgICAg
ICAgICAgICAgICB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAib24i
ICsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIGV2ZW50TmFtZSBp
biBkaXYgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNTdXBwb3J0ZWQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSggZXZlbnROYW1l
LCAicmV0dXJuOyIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1cHBvcnRl
ZCA9ICggdHlwZW9mIGRpdlsgZXZlbnROYW1lIF0gPT09ICJmdW5jdGlvbiIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0WyBpICsgIkJ1
YmJsZXMiIF0gPSBpc1N1cHBvcnRlZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAg
ICAgIC8vIE51bGwgY29ubmVjdGVkIGVsZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCiAgICAg
ICAgdGVzdEVsZW1lbnQgPSBmcmFnbWVudCA9IHNlbGVjdCA9IG9wdCA9IGJvZHkgPSBtYXJnaW5E
aXYgPSBkaXYgPSBpbnB1dCA9IG51bGw7CgogICAgICAgIHJldHVybiBzdXBwb3J0Owp9KSgpOwoK
Ly8gS2VlcCB0cmFjayBvZiBib3hNb2RlbApqUXVlcnkuYm94TW9kZWwgPSBqUXVlcnkuc3VwcG9y
dC5ib3hNb2RlbDsKCgoKCnZhciByYnJhY2UgPSAvXig/Olx7LipcfXxcWy4qXF0pJC8sCiAgICAg
ICAgcm11bHRpRGFzaCA9IC8oW0EtWl0pL2c7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICBjYWNo
ZToge30sCgogICAgICAgIC8vIFBsZWFzZSB1c2Ugd2l0aCBjYXV0aW9uCiAgICAgICAgdXVpZDog
MCwKCiAgICAgICAgLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdl
CiAgICAgICAgLy8gTm9uLWRpZ2l0cyByZW1vdmVkIHRvIG1hdGNoIHJpbmxpbmVqUXVlcnkKICAg
ICAgICBleHBhbmRvOiAialF1ZXJ5IiArICggalF1ZXJ5LmZuLmpxdWVyeSArIE1hdGgucmFuZG9t
KCkgKS5yZXBsYWNlKCAvXEQvZywgIiIgKSwKCiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBlbGVt
ZW50cyB0aHJvdyB1bmNhdGNoYWJsZSBleGNlcHRpb25zIGlmIHlvdQogICAgICAgIC8vIGF0dGVt
cHQgdG8gYWRkIGV4cGFuZG8gcHJvcGVydGllcyB0byB0aGVtLgogICAgICAgIG5vRGF0YTogewog
ICAgICAgICAgICAgICAgImVtYmVkIjogdHJ1ZSwKICAgICAgICAgICAgICAgIC8vIEJhbiBhbGwg
b2JqZWN0cyBleGNlcHQgZm9yIEZsYXNoICh3aGljaCBoYW5kbGUgZXhwYW5kb3MpCiAgICAgICAg
ICAgICAgICAib2JqZWN0IjogImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0
MDAwMCIsCiAgICAgICAgICAgICAgICAiYXBwbGV0IjogdHJ1ZQogICAgICAgIH0sCgogICAgICAg
IGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0u
bm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVbIGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0gOiBlbGVtWyBq
UXVlcnkuZXhwYW5kbyBdOwoKICAgICAgICAgICAgICAgIHJldHVybiAhIWVsZW0gJiYgIWlzRW1w
dHlEYXRhT2JqZWN0KCBlbGVtICk7CiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogZnVuY3Rpb24o
IGVsZW0sIG5hbWUsIGRhdGEsIHB2dCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKICAgICAg
ICAgICAgICAgIGlmICggIWpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2
YXIgdGhpc0NhY2hlLCByZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsS2V5ID0g
alF1ZXJ5LmV4cGFuZG8sCiAgICAgICAgICAgICAgICAgICAgICAgIGdldEJ5TmFtZSA9IHR5cGVv
ZiBuYW1lID09PSAic3RyaW5nIiwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
dG8gaGFuZGxlIERPTSBub2RlcyBhbmQgSlMgb2JqZWN0cyBkaWZmZXJlbnRseSBiZWNhdXNlIElF
Ni03CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2Vz
IHByb3Blcmx5IGFjcm9zcyB0aGUgRE9NLUpTIGJvdW5kYXJ5CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlzTm9kZSA9IGVsZW0ubm9kZVR5cGUsCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBP
bmx5IERPTSBub2RlcyBuZWVkIHRoZSBnbG9iYWwgalF1ZXJ5IGNhY2hlOyBKUyBvYmplY3QgZGF0
YSBpcwogICAgICAgICAgICAgICAgICAgICAgICAvLyBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUg
b2JqZWN0IHNvIEdDIGNhbiBvY2N1ciBhdXRvbWF0aWNhbGx5CiAgICAgICAgICAgICAgICAgICAg
ICAgIGNhY2hlID0gaXNOb2RlID8galF1ZXJ5LmNhY2hlIDogZWxlbSwKCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE9ubHkgZGVmaW5pbmcgYW4gSUQgZm9yIEpTIG9iamVjdHMgaWYgaXRzIGNh
Y2hlIGFscmVhZHkgZXhpc3RzIGFsbG93cwogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
Y29kZSB0byBzaG9ydGN1dCBvbiB0aGUgc2FtZSBwYXRoIGFzIGEgRE9NIG5vZGUgd2l0aCBubyBj
YWNoZQogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGlzTm9kZSA/IGVsZW1bIGpRdWVyeS5l
eHBhbmRvIF0gOiBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdICYmIGpRdWVyeS5leHBhbmRvOwoKICAg
ICAgICAgICAgICAgIC8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVkIHRv
IHdoZW4gdHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCiAgICAgICAgICAgICAgICAvLyBvYmplY3Qg
dGhhdCBoYXMgbm8gZGF0YSBhdCBhbGwKICAgICAgICAgICAgICAgIGlmICggKCFpZCB8fCAocHZ0
ICYmIGlkICYmIChjYWNoZVsgaWQgXSAmJiAhY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0pKSkg
JiYgZ2V0QnlOYW1lICYmIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggIWlk
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIGEgbmV3
IHVuaXF1ZSBJRCBmb3IgZWFjaCBlbGVtZW50IHNpbmNlIHRoZWlyIGRhdGEKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZW5kcyB1cCBpbiB0aGUgZ2xvYmFsIGNhY2hlCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggaXNOb2RlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gPSBpZCA9ICsralF1ZXJ5LnV1aWQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQg
PSBqUXVlcnkuZXhwYW5kbzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIGlmICggIWNhY2hlWyBpZCBdICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBjYWNoZVsgaWQgXSA9IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VE9ETzogVGhpcyBpcyBhIGhhY2sgZm9yIDEuNSBPTkxZLiBBdm9pZHMgZXhwb3NpbmcgalF1ZXJ5
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVjdHMg
d2hlbiB0aGUgb2JqZWN0IGlzIHNlcmlhbGl6ZWQgdXNpbmcKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSlNPTi5zdHJpbmdpZnkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNOb2Rl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9
IGpRdWVyeS5ub29wOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gQW4gb2JqZWN0IGNhbiBiZSBwYXNzZWQgdG8galF1ZXJ5LmRh
dGEgaW5zdGVhZCBvZiBhIGtleS92YWx1ZSBwYWlyOyB0aGlzIGdldHMKICAgICAgICAgICAgICAg
IC8vIHNoYWxsb3cgY29waWVkIG92ZXIgb250byB0aGUgZXhpc3RpbmcgY2FjaGUKICAgICAgICAg
ICAgICAgIGlmICggdHlwZW9mIG5hbWUgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBuYW1lID09PSAi
ZnVuY3Rpb24iICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHB2dCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXSA9IGpR
dWVyeS5leHRlbmQoY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0sIG5hbWUpOwogICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlWyBpZCBdID0galF1ZXJ5LmV4dGVuZChjYWNoZVsgaWQgXSwgbmFtZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzQ2Fj
aGUgPSBjYWNoZVsgaWQgXTsKCiAgICAgICAgICAgICAgICAvLyBJbnRlcm5hbCBqUXVlcnkgZGF0
YSBpcyBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBvYmplY3QgaW5zaWRlIHRoZSBvYmplY3QncyBkYXRh
CiAgICAgICAgICAgICAgICAvLyBjYWNoZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29sbGlzaW9u
cyBiZXR3ZWVuIGludGVybmFsIGRhdGEgYW5kIHVzZXItZGVmaW5lZAogICAgICAgICAgICAgICAg
Ly8gZGF0YQogICAgICAgICAgICAgICAgaWYgKCBwdnQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggIXRoaXNDYWNoZVsgaW50ZXJuYWxLZXkgXSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzQ2FjaGVbIGludGVybmFsS2V5IF0gPSB7fTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NhY2hlID0gdGhpc0Nh
Y2hlWyBpbnRlcm5hbEtleSBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlm
ICggZGF0YSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzQ2Fj
aGVbIGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSBdID0gZGF0YTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayBmb3IgMS41IE9OTFkuIEl0
IHdpbGwgYmUgcmVtb3ZlZCBpbiAxLjYuIFVzZXJzIHNob3VsZAogICAgICAgICAgICAgICAgLy8g
bm90IGF0dGVtcHQgdG8gaW5zcGVjdCB0aGUgaW50ZXJuYWwgZXZlbnRzIG9iamVjdCB1c2luZyBq
UXVlcnkuZGF0YSwgYXMgdGhpcwogICAgICAgICAgICAgICAgLy8gaW50ZXJuYWwgZGF0YSBvYmpl
Y3QgaXMgdW5kb2N1bWVudGVkIGFuZCBzdWJqZWN0IHRvIGNoYW5nZS4KICAgICAgICAgICAgICAg
IGlmICggbmFtZSA9PT0gImV2ZW50cyIgJiYgIXRoaXNDYWNoZVtuYW1lXSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNDYWNoZVsgaW50ZXJuYWxLZXkgXSAmJiB0aGlzQ2Fj
aGVbIGludGVybmFsS2V5IF0uZXZlbnRzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIC8vIENoZWNrIGZvciBib3RoIGNvbnZlcnRlZC10by1jYW1lbCBhbmQgbm9uLWNvbnZlcnRl
ZCBkYXRhIHByb3BlcnR5IG5hbWVzCiAgICAgICAgICAgICAgICAvLyBJZiBhIGRhdGEgcHJvcGVy
dHkgd2FzIHNwZWNpZmllZAogICAgICAgICAgICAgICAgaWYgKCBnZXRCeU5hbWUgKSB7CgogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBUcnkgdG8gZmluZCBhcy1pcyBwcm9wZXJ0eSBk
YXRhCiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZVsgbmFtZSBdOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBmb3IgbnVsbHx1bmRlZmluZWQgcHJvcGVydHkg
ZGF0YQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldCA9PSBudWxsICkgewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBw
cm9wZXJ0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZVsg
alF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXND
YWNoZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAg
ICAgIH0sCgogICAgICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBwdnQgLyog
SW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CiAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuYWNj
ZXB0RGF0YSggZWxlbSApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHRoaXNDYWNoZSwKCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSB0byBpbnRlcm5hbCBkYXRhIGNhY2hlIGtleQogICAg
ICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAoKICAgICAg
ICAgICAgICAgICAgICAgICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICAgICAg
ICAgICAgICAgICAgICAgICBjYWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3Jt
YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBpc05vZGUgPyBlbGVtWyBqUXVlcnku
ZXhwYW5kbyBdIDogalF1ZXJ5LmV4cGFuZG87CgogICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUg
aXMgYWxyZWFkeSBubyBjYWNoZSBlbnRyeSBmb3IgdGhpcyBvYmplY3QsIHRoZXJlIGlzIG5vCiAg
ICAgICAgICAgICAgICAvLyBwdXJwb3NlIGluIGNvbnRpbnVpbmcKICAgICAgICAgICAgICAgIGlm
ICggIWNhY2hlWyBpZCBdICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBuYW1lICkgewoKICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpc0NhY2hlID0gcHZ0ID8gY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0g
OiBjYWNoZVsgaWQgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpc0NhY2hlICkg
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGludGVyb3BlcmFi
bGUgcmVtb3ZhbCBvZiBoeXBoZW5hdGVkIG9yIGNhbWVsY2FzZWQga2V5cwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIXRoaXNDYWNoZVsgbmFtZSBdICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5h
bWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzQ2FjaGVbIG5hbWUgXTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSBsZWZ0IGluIHRoZSBjYWNo
ZSwgd2Ugd2FudCB0byBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFuZCBsZXQgdGhlIGNhY2hlIG9iamVjdCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzRW1wdHlEYXRhT2JqZWN0KHRoaXNDYWNoZSkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBt
b3JlIGluZm9ybWF0aW9uCiAgICAgICAgICAgICAgICBpZiAoIHB2dCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRG9uJ3QgZGVzdHJveSB0aGUgcGFyZW50IGNhY2hlIHVubGVzcyB0
aGUgaW50ZXJuYWwgZGF0YSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFkIGJl
ZW4gdGhlIG9ubHkgdGhpbmcgbGVmdCBpbiBpdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICFpc0VtcHR5RGF0YU9iamVjdChjYWNoZVsgaWQgXSkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGludGVybmFsQ2FjaGUgPSBjYWNoZVsgaWQgXVsg
aW50ZXJuYWxLZXkgXTsKCiAgICAgICAgICAgICAgICAvLyBCcm93c2VycyB0aGF0IGZhaWwgZXhw
YW5kbyBkZWxldGlvbiBhbHNvIHJlZnVzZSB0byBkZWxldGUgZXhwYW5kb3Mgb24KICAgICAgICAg
ICAgICAgIC8vIHRoZSB3aW5kb3csIGJ1dCBpdCB3aWxsIGFsbG93IGl0IG9uIGFsbCBvdGhlciBK
UyBvYmplY3RzOyBvdGhlciBicm93c2VycwogICAgICAgICAgICAgICAgLy8gZG9uJ3QgY2FyZQog
ICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgYGNhY2hlYCBpcyBub3QgYSB3aW5kb3cgb2Jq
ZWN0ICMxMDA4MAogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBh
bmRvIHx8ICFjYWNoZS5zZXRJbnRlcnZhbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIGNhY2hlWyBpZCBdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVbIGlkIF0gPSBudWxsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIFdlIGRlc3Ryb3llZCB0aGUgZW50aXJlIHVzZXIgY2FjaGUgYXQgb25jZSBiZWNh
dXNlIGl0J3MgZmFzdGVyIHRoYW4KICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGluZyB0aHJvdWdo
IGVhY2gga2V5LCBidXQgd2UgbmVlZCB0byBjb250aW51ZSB0byBwZXJzaXN0IGludGVybmFsCiAg
ICAgICAgICAgICAgICAvLyBkYXRhIGlmIGl0IGV4aXN0ZWQKICAgICAgICAgICAgICAgIGlmICgg
aW50ZXJuYWxDYWNoZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSB7
fTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgZm9yIDEu
NSBPTkxZLiBBdm9pZHMgZXhwb3NpbmcgalF1ZXJ5CiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVjdHMgd2hlbiB0aGUgb2JqZWN0IGlzIHNlcmlhbGl6
ZWQgdXNpbmcKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSlNPTi5zdHJpbmdpZnkKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhaXNOb2RlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXVsgaW50ZXJu
YWxLZXkgXSA9IGludGVybmFsQ2FjaGU7CgogICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3
ZSBuZWVkIHRvIGVsaW1pbmF0ZSB0aGUgZXhwYW5kbyBvbiB0aGUgbm9kZSB0byBhdm9pZAogICAg
ICAgICAgICAgICAgLy8gZmFsc2UgbG9va3VwcyBpbiB0aGUgY2FjaGUgZm9yIGVudHJpZXMgdGhh
dCBubyBsb25nZXIgZXhpc3QKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGlzTm9kZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgZG9lcyBub3QgYWxsb3cgdXMgdG8gZGVsZXRl
IGV4cGFuZG8gcHJvcGVydGllcyBmcm9tIG5vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAv
LyBub3IgZG9lcyBpdCBoYXZlIGEgcmVtb3ZlQXR0cmlidXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50
IG5vZGVzOwogICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBtdXN0IGhhbmRsZSBhbGwgb2Yg
dGhlc2UgY2FzZXMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5k
ZWxldGVFeHBhbmRvICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBl
bGVtWyBqUXVlcnkuZXhwYW5kbyBdOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBlbGVtLnJlbW92ZUF0dHJpYnV0ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggalF1ZXJ5LmV4cGFuZG8gKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBq
UXVlcnkuZXhwYW5kbyBdID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4K
ICAgICAgICBfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LmRhdGEoIGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsKICAgICAg
ICB9LAoKICAgICAgICAvLyBBIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBET00gbm9kZSBj
YW4gaGFuZGxlIHRoZSBkYXRhIGV4cGFuZG8KICAgICAgICBhY2NlcHREYXRhOiBmdW5jdGlvbigg
ZWxlbSApIHsKICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlTmFtZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG1hdGNoID0galF1ZXJ5Lm5vRGF0YVsgZWxlbS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpIF07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhKG1hdGNoID09PSB0cnVlIHx8
IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzc2lkIikgIT09IG1hdGNoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgIH0KfSk7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICBkYXRhOiBmdW5jdGlv
bigga2V5LCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbnVsbDsKCiAgICAg
ICAgICAgICAgICBpZiAoIHR5cGVvZiBrZXkgPT09ICJ1bmRlZmluZWQiICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHRoaXMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEgPSBqUXVlcnkuZGF0YSggdGhpc1swXSApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHRoaXNbMF0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IHRoaXNbMF0uYXR0cmlidXRlcywgbmFtZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwg
bCA9IGF0dHIubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gYXR0cltpXS5uYW1lOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuYW1lLmluZGV4T2YoICJk
YXRhLSIgKSA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zdWJzdHJpbmco
NSkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUF0dHIoIHRoaXNbMF0sIG5hbWUsIGRhdGFbIG5hbWUgXSApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZGF0YTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2Yga2V5ID09PSAib2Jq
ZWN0IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywg
a2V5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHZhciBwYXJ0cyA9IGtleS5zcGxpdCgiLiIpOwogICAgICAgICAgICAgICAg
cGFydHNbMV0gPSBwYXJ0c1sxXSA/ICIuIiArIHBhcnRzWzFdIDogIiI7CgogICAgICAgICAgICAg
ICAgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBk
YXRhID0gdGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIgKyBwYXJ0c1sxXSArICIhIiwgW3Bh
cnRzWzBdXSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggYW55IGlu
dGVybmFsbHkgc3RvcmVkIGRhdGEgZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBk
YXRhID09PSB1bmRlZmluZWQgJiYgdGhpcy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS5kYXRhKCB0aGlzWzBdLCBrZXkgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YUF0dHIoIHRoaXNbMF0sIGtleSwgZGF0
YSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkICYmIHBhcnRzWzFdID8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmRhdGEoIHBhcnRzWzBdICkgOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGE7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSBqUXVlcnkoIHRoaXMgKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbIHBhcnRzWzBdLCB2YWx1ZSBdOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy50cmlnZ2VySGFuZGxlciggInNl
dERhdGEiICsgcGFydHNbMV0gKyAiISIsIGFyZ3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5LCB2YWx1ZSApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICR0aGlzLnRyaWdnZXJIYW5kbGVyKCAiY2hhbmdlRGF0YSIgKyBwYXJ0
c1sxXSArICIhIiwgYXJncyApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICByZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIHRoaXMsIGtleSApOwogICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgfQp9KTsKCmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRh
dGEgKSB7CiAgICAgICAgLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRv
IGZldGNoIGFueQogICAgICAgIC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0
ZQogICAgICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEg
KSB7CgogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJt
dWx0aURhc2gsICItJDEiICkudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgICAgICAgICBkYXRhID0g
ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBk
YXRhID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSA9PT0gInRydWUiID8gdHJ1ZSA6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNl
IDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID09PSAibnVsbCIgPyBudWxs
IDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhalF1ZXJ5LmlzTmFOKCBkYXRhICkg
PyBwYXJzZUZsb2F0KCBkYXRhICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOwogICAgICAgICAgICAg
ICAgICAgICAgICB9IGNhdGNoKCBlICkge30KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlcgogICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggZWxlbSwga2V5LCBkYXRhICk7CgogICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5l
ZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBkYXRhOwp9Cgov
LyBUT0RPOiBUaGlzIGlzIGEgaGFjayBmb3IgMS41IE9OTFkgdG8gYWxsb3cgb2JqZWN0cyB3aXRo
IGEgc2luZ2xlIHRvSlNPTgovLyBwcm9wZXJ0eSB0byBiZSBjb25zaWRlcmVkIGVtcHR5IG9iamVj
dHM7IHRoaXMgcHJvcGVydHkgYWx3YXlzIGV4aXN0cyBpbgovLyBvcmRlciB0byBtYWtlIHN1cmUg
SlNPTi5zdHJpbmdpZnkgZG9lcyBub3QgZXhwb3NlIGludGVybmFsIG1ldGFkYXRhCmZ1bmN0aW9u
IGlzRW1wdHlEYXRhT2JqZWN0KCBvYmogKSB7CiAgICAgICAgZm9yICggdmFyIG5hbWUgaW4gb2Jq
ICkgewogICAgICAgICAgICAgICAgaWYgKCBuYW1lICE9PSAidG9KU09OIiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0K
CiAgICAgICAgcmV0dXJuIHRydWU7Cn0KCgoKCmZ1bmN0aW9uIGhhbmRsZVF1ZXVlTWFya0RlZmVy
KCBlbGVtLCB0eXBlLCBzcmMgKSB7CiAgICAgICAgdmFyIGRlZmVyRGF0YUtleSA9IHR5cGUgKyAi
ZGVmZXIiLAogICAgICAgICAgICAgICAgcXVldWVEYXRhS2V5ID0gdHlwZSArICJxdWV1ZSIsCiAg
ICAgICAgICAgICAgICBtYXJrRGF0YUtleSA9IHR5cGUgKyAibWFyayIsCiAgICAgICAgICAgICAg
ICBkZWZlciA9IGpRdWVyeS5kYXRhKCBlbGVtLCBkZWZlckRhdGFLZXksIHVuZGVmaW5lZCwgdHJ1
ZSApOwogICAgICAgIGlmICggZGVmZXIgJiYKICAgICAgICAgICAgICAgICggc3JjID09PSAicXVl
dWUiIHx8ICFqUXVlcnkuZGF0YSggZWxlbSwgcXVldWVEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUg
KSApICYmCiAgICAgICAgICAgICAgICAoIHNyYyA9PT0gIm1hcmsiIHx8ICFqUXVlcnkuZGF0YSgg
ZWxlbSwgbWFya0RhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApICkgKSB7CiAgICAgICAgICAgICAg
ICAvLyBHaXZlIHJvb20gZm9yIGhhcmQtY29kZWQgY2FsbGJhY2tzIHRvIGZpcmUgZmlyc3QKICAg
ICAgICAgICAgICAgIC8vIGFuZCBldmVudHVhbGx5IG1hcmsvcXVldWUgc29tZXRoaW5nIGVsc2Ug
b24gdGhlIGVsZW1lbnQKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuZGF0YSggZWxlbSwgcXVldWVEYXRh
S2V5LCB1bmRlZmluZWQsIHRydWUgKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICFqUXVlcnkuZGF0YSggZWxlbSwgbWFya0RhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCBk
ZWZlckRhdGFLZXksIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZl
ci5yZXNvbHZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0s
IDAgKTsKICAgICAgICB9Cn0KCmpRdWVyeS5leHRlbmQoewoKICAgICAgICBfbWFyazogZnVuY3Rp
b24oIGVsZW0sIHR5cGUgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSAodHlwZSB8fCAiZngiKSArICJtYXJrIjsKICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIGVsZW0sIHR5cGUsIChqUXVlcnkuZGF0YShlbGVt
LHR5cGUsdW5kZWZpbmVkLHRydWUpIHx8IDApICsgMSwgdHJ1ZSApOwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0sCgogICAgICAgIF91bm1hcms6IGZ1bmN0aW9uKCBmb3JjZSwgZWxlbSwgdHlw
ZSApIHsKICAgICAgICAgICAgICAgIGlmICggZm9yY2UgIT09IHRydWUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUgPSBlbGVtOwogICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0g
Zm9yY2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkg
PSB0eXBlICsgIm1hcmsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0g
Zm9yY2UgPyAwIDogKCAoalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgdW5kZWZpbmVkLCB0cnVlKSB8
fCAxICkgLSAxICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY291bnQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgY291bnQs
IHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwga2V5LCB0cnVlICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlUXVldWVNYXJrRGVmZXIoIGVsZW0s
IHR5cGUsICJtYXJrIiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfSwKCiAgICAgICAgcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRh
ICkgewogICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gKHR5cGUgfHwgImZ4IikgKyAicXVldWUiOwogICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgcSA9IGpRdWVyeS5kYXRhKCBlbGVtLCB0eXBlLCB1bmRlZmluZWQsIHRydWUgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBx
dWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cAogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGRhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcSB8fCBq
UXVlcnkuaXNBcnJheShkYXRhKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHEgPSBqUXVlcnkuZGF0YSggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheShkYXRh
KSwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLnB1c2goIGRhdGEgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHEgfHwgW107CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfSwKCiAgICAgICAgZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CiAgICAg
ICAgICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwoKICAgICAgICAgICAgICAgIHZhciBxdWV1
ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLAogICAgICAgICAgICAgICAgICAgICAgICBm
biA9IHF1ZXVlLnNoaWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyOwoKICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0
aGUgcHJvZ3Jlc3Mgc2VudGluZWwKICAgICAgICAgICAgICAgIGlmICggZm4gPT09ICJpbnByb2dy
ZXNzIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZm4gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1
ZXVlIGZyb20gYmVpbmcKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSBk
ZXF1ZXVlZAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUudW5zaGlmdCgiaW5wcm9ncmVzcyIp
OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmbi5j
YWxsKGVsZW0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5kZXF1ZXVlKGVsZW0sIHR5cGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICFxdWV1ZS5sZW5ndGggKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgInF1
ZXVlIiwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVRdWV1ZU1hcmtEZWZl
ciggZWxlbSwgdHlwZSwgInF1ZXVlIiApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfSk7
CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICBxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEg
KSB7CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSAiZngiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGF0
YSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5
LnF1ZXVlKCB0aGlzWzBdLCB0eXBlICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZ4IiAmJiBxdWV1ZVswXSAhPT0gImlucHJvZ3Jl
c3MiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0
aGlzLCB0eXBlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0p
OwogICAgICAgIH0sCiAgICAgICAgZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwogICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgfSwKICAgICAgICAvLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxm
ZXJzLCB3aXRoIHBlcm1pc3Npb24uCiAgICAgICAgLy8gaHR0cDovL2JsaW5kc2lnbmFscy5jb20v
aW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5LwogICAgICAgIGRlbGF5OiBmdW5jdGlvbigg
dGltZSwgdHlwZSApIHsKICAgICAgICAgICAgICAgIHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnku
Znguc3BlZWRzW3RpbWVdIHx8IHRpbWUgOiB0aW1lOwogICAgICAgICAgICAgICAgdHlwZSA9IHR5
cGUgfHwgImZ4IjsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpczsKICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICB9LCB0aW1lICk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAog
ICAgICAgIGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewogICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKICAgICAgICB9LAogICAgICAgIC8v
IEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKICAg
ICAgICAvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKICAgICAgICBw
cm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqZWN0ICkgewogICAgICAgICAgICAgICAgaWYgKCB0
eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVj
dCA9IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwogICAgICAg
ICAgICAgICAgdmFyIGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1lbnRzID0gdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVsZW1l
bnRzLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSAxLAogICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlckRhdGFLZXkgPSB0eXBlICsgImRlZmVyIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgcXVldWVEYXRhS2V5ID0gdHlwZSArICJxdWV1ZSIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcmtEYXRhS2V5ID0gdHlwZSArICJtYXJrIiwKICAgICAgICAgICAgICAgICAg
ICAgICAgdG1wOwogICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZSgpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhKCAtLWNvdW50ICkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgd2hpbGUoIGktLSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCggdG1wID0galF1
ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0sIGRlZmVyRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkg
fHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggalF1ZXJ5LmRhdGEo
IGVsZW1lbnRzWyBpIF0sIHF1ZXVlRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgfHwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIGVs
ZW1lbnRzWyBpIF0sIG1hcmtEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSApICYmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggZWxlbWVudHNbIGkg
XSwgZGVmZXJEYXRhS2V5LCBqUXVlcnkuX0RlZmVycmVkKCksIHRydWUgKSApKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0bXAuZG9uZSggcmVzb2x2ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgICAg
ICByZXR1cm4gZGVmZXIucHJvbWlzZSgpOwogICAgICAgIH0KfSk7CgoKCgp2YXIgcmNsYXNzID0g
L1tcblx0XHJdL2csCiAgICAgICAgcnNwYWNlID0gL1xzKy8sCiAgICAgICAgcnJldHVybiA9IC9c
ci9nLAogICAgICAgIHJ0eXBlID0gL14oPzpidXR0b258aW5wdXQpJC9pLAogICAgICAgIHJmb2N1
c2FibGUgPSAvXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSwKICAg
ICAgICByY2xpY2thYmxlID0gL15hKD86cmVhKT8kL2ksCiAgICAgICAgcmJvb2xlYW4gPSAvXig/
OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVk
fGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVj
dGVkKSQvaSwKICAgICAgICBub2RlSG9vaywgYm9vbEhvb2s7CgpqUXVlcnkuZm4uZXh0ZW5kKHsK
ICAgICAgICBhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgbmFtZSwgdmFsdWUsIHRydWUsIGpRdWVyeS5hdHRy
ICk7CiAgICAgICAgfSwKCiAgICAgICAgcmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOwogICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBwcm9wOiBmdW5jdGlvbiggbmFtZSwg
dmFsdWUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgbmFt
ZSwgdmFsdWUsIHRydWUsIGpRdWVyeS5wcm9wICk7CiAgICAgICAgfSwKICAgICAgICAKICAgICAg
ICByZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHsKICAgICAgICAgICAgICAgIG5hbWUgPSBq
UXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnkvY2F0Y2gg
aGFuZGxlcyBjYXNlcyB3aGVyZSBJRSBiYWxrcyAoc3VjaCBhcyByZW1vdmluZyBhIHByb3BlcnR5
IG9uIHdpbmRvdykKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzWyBuYW1lIF0gPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbIG5hbWUgXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfSBjYXRjaCggZSApIHt9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAg
ICAgICBhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgewogICAgICAgICAgICAgICAgdmFyIGNs
YXNzTmFtZXMsIGksIGwsIGVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHNldENsYXNzLCBj
LCBjbDsKCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLmFkZENsYXNz
KCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lKSApOwogICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHZhbHVl
ICYmIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxpdCggcnNwYWNlICk7CgogICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF07CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWVsZW0uY2xhc3NOYW1lICYmIGNs
YXNzTmFtZXMubGVuZ3RoID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IHZhbHVlOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNldENsYXNzID0gIiAiICsgZWxlbS5jbGFzc05hbWUg
KyAiICI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBjID0gMCwgY2wgPSBjbGFzc05hbWVzLmxlbmd0aDsgYyA8IGNsOyBjKysgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
fnNldENsYXNzLmluZGV4T2YoICIgIiArIGNsYXNzTmFtZXNbIGMgXSArICIgIiApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0Q2xhc3MgKz0gY2xhc3NOYW1lc1sgYyBdICsgIiAiOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGpRdWVyeS50cmltKCBzZXRD
bGFzcyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgog
ICAgICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7CiAgICAgICAgICAgICAgICB2
YXIgY2xhc3NOYW1lcywgaSwgbCwgZWxlbSwgY2xhc3NOYW1lLCBjLCBjbDsKCiAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKHRo
aXMsIGosIHRoaXMuY2xhc3NOYW1lKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICh2YWx1ZSAmJiB0eXBlb2YgdmFs
dWUgPT09ICJzdHJpbmciKSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc05hbWVzID0gKHZhbHVlIHx8ICIiKS5zcGxpdCggcnNwYWNlICk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwg
bDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBp
IF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9
PT0gMSAmJiBlbGVtLmNsYXNzTmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICgiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIiku
cmVwbGFjZSggcmNsYXNzLCAiICIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggYyA9IDAsIGNsID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBj
bDsgYysrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKCIgIiArIGNsYXNzTmFtZXNb
IGMgXSArICIgIiwgIiAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtLmNsYXNzTmFtZSA9IGpRdWVyeS50cmltKCBjbGFzc05hbWUgKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9ICIiOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIHRvZ2dsZUNs
YXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkgewogICAgICAgICAgICAgICAgdmFyIHR5
cGUgPSB0eXBlb2YgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzQm9vbCA9IHR5cGVv
ZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iOwoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIHZhbHVlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oIGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaSwgdGhpcy5jbGFzc05h
bWUsIHN0YXRlVmFsKSwgc3RhdGVWYWwgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0b2dnbGUgaW5kaXZpZHVhbCBjbGFz
cyBuYW1lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVWYWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzID0gdmFsdWUuc3Bs
aXQoIHJzcGFjZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChj
bGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2Vw
ZXJhdGVkIGxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
ID0gaXNCb29sID8gc3RhdGUgOiAhc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmWyBzdGF0ZSA/ICJhZGRDbGFzcyIg
OiAicmVtb3ZlQ2xhc3MiIF0oIGNsYXNzTmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICJ1
bmRlZmluZWQiIHx8IHR5cGUgPT09ICJib29sZWFuIiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHRoaXMuY2xhc3NOYW1lICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc3RvcmUgY2xhc3NOYW1lIGlmIHNldAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05h
bWVfXyIsIHRoaXMuY2xhc3NOYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0b2dnbGUgd2hvbGUgY2xhc3NO
YW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlz
LmNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPyAiIiA6IGpRdWVyeS5fZGF0YSggdGhpcywg
Il9fY2xhc3NOYW1lX18iICkgfHwgIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIGhhc0NsYXNzOiBmdW5jdGlvbiggc2Vs
ZWN0b3IgKSB7CiAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gIiAiICsgc2VsZWN0b3Ig
KyAiICI7CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsg
aSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzW2ldLm5vZGVU
eXBlID09PSAxICYmICgiICIgKyB0aGlzW2ldLmNsYXNzTmFtZSArICIgIikucmVwbGFjZShyY2xh
c3MsICIgIikuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9LAoK
ICAgICAgICB2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgIHZhciBob29r
cywgcmV0LAogICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1swXTsKICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCkgXSB8fCBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29r
cy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSkgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBlbGVt
LnZhbHVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJl
dCA9PT0gInN0cmluZyIgPyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldC5yZXBsYWNlKHJyZXR1cm4sICIiKSA6IAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVl
IGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPT0gbnVsbCA/ICIiIDogcmV0OwogICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24o
IHZhbHVlICk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkodGhpcyksIHZhbDsK
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNGdW5jdGlvbiApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBzZWxm
LnZhbCgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzICIiOyBj
b252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFs
ID09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gIiI7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIi
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCArPSAiIjsKICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGpRdWVyeS5tYXAodmFsLCBmdW5jdGlv
biAoIHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsgIiI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCkgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFs
IHNldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBp
biBob29rcykgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVk
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KfSk7
CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICB2YWxIb29rczogewogICAgICAgICAgICAgICAgb3B0
aW9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXR0cmlidXRlcy52YWx1ZSBpcyB1bmRl
ZmluZWQgaW4gQmxhY2tiZXJyeSA0LjcgYnV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdXNlcyAudmFsdWUuIFNlZSAjNjkzMgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB2YWwgPSBlbGVtLmF0dHJpYnV0ZXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICF2YWwgfHwgdmFsLnNwZWNpZmllZCA/IGVsZW0udmFsdWUgOiBl
bGVtLnRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICAgICBzZWxlY3Q6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5j
dGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGVsZW0uc2Vs
ZWN0ZWRJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
cyA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9
IGVsZW0ub3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9u
ZSA9IGVsZW0udHlwZSA9PT0gInNlbGVjdC1vbmUiOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBOb3RoaW5nIHdhcyBzZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggaW5kZXggPCAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBz
ZWxlY3RlZCBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFy
IGkgPSBvbmUgPyBpbmRleCA6IDAsIG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVu
Z3RoOyBpIDwgbWF4OyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1sgaSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVk
IG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggb3B0aW9uLnNlbGVjdGVkICYmIChqUXVlcnkuc3VwcG9ydC5vcHREaXNh
YmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIp
ID09PSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICghb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwgIWpRdWVyeS5ub2Rl
TmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSkgKSB7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwZWNpZmljIHZh
bHVlIGZvciB0aGUgb3B0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJy
YXkgZm9yIG9uZSBzZWxlY3RzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggb25lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2go
IHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGaXhlcyBCdWcgIzI1NTEgLS0gc2VsZWN0LnZhbCgpIGJyb2tlbiBpbiBJRSBhZnRl
ciBmb3JtLnJlc2V0KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uZSAm
JiAhdmFsdWVzLmxlbmd0aCAmJiBvcHRpb25zLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkoIG9wdGlvbnNbIGluZGV4IF0gKS52
YWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0s
CgogICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0galF1ZXJ5Lm1ha2VB
cnJheSggdmFsdWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KGVs
ZW0pLmZpbmQoIm9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVy
eSh0aGlzKS52YWwoKSwgdmFsdWVzICkgPj0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzLmxl
bmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2Vs
ZWN0ZWRJbmRleCA9IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgYXR0ckZuOiB7
CiAgICAgICAgICAgICAgICB2YWw6IHRydWUsCiAgICAgICAgICAgICAgICBjc3M6IHRydWUsCiAg
ICAgICAgICAgICAgICBodG1sOiB0cnVlLAogICAgICAgICAgICAgICAgdGV4dDogdHJ1ZSwKICAg
ICAgICAgICAgICAgIGRhdGE6IHRydWUsCiAgICAgICAgICAgICAgICB3aWR0aDogdHJ1ZSwKICAg
ICAgICAgICAgICAgIGhlaWdodDogdHJ1ZSwKICAgICAgICAgICAgICAgIG9mZnNldDogdHJ1ZQog
ICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgYXR0ckZpeDogewogICAgICAgICAgICAgICAgLy8g
QWx3YXlzIG5vcm1hbGl6ZSB0byBlbnN1cmUgaG9vayB1c2FnZQogICAgICAgICAgICAgICAgdGFi
aW5kZXg6ICJ0YWJJbmRleCIKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGF0dHI6IGZ1bmN0
aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgcGFzcyApIHsKICAgICAgICAgICAgICAgIHZhciBuVHlw
ZSA9IGVsZW0ubm9kZVR5cGU7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIGRv
bid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9k
ZXMKICAgICAgICAgICAgICAgIGlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09
IDggfHwgblR5cGUgPT09IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBwYXNzICYmIG5h
bWUgaW4galF1ZXJ5LmF0dHJGbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeSggZWxlbSApWyBuYW1lIF0oIHZhbHVlICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBw
b3J0ZWQKICAgICAgICAgICAgICAgIGlmICggISgiZ2V0QXR0cmlidXRlIiBpbiBlbGVtKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2
YWx1ZSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciByZXQsIGhvb2tz
LAogICAgICAgICAgICAgICAgICAgICAgICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5
LmlzWE1MRG9jKCBlbGVtICk7CgogICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBuYW1l
IGlmIG5lZWRlZAogICAgICAgICAgICAgICAgaWYgKCBub3R4bWwgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSBqUXVlcnkuYXR0ckZpeFsgbmFtZSBdIHx8IG5hbWU7CgogICAgICAg
ICAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWhvb2tzICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFVzZSBib29sSG9vayBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IGJvb2xIb29rOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2Ugbm9kZUhvb2sgaWYgYXZhaWxh
YmxlKCBJRTYvNyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
bm9kZUhvb2sgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29r
cyA9IG5vZGVIb29rOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgg
dmFsdWUgIT09IHVuZGVmaW5lZCApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFs
dWUgPT09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJl
bW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdW5kZWZpbmVkOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaG9v
a3MgJiYgInNldCIgaW4gaG9va3MgJiYgbm90eG1sICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0s
IHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJldDsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICIi
ICsgdmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBo
b29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLmdldCggZWxl
bSwgbmFtZSApKSAhPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
dDsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5k
ZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAg
IHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewogICAgICAgICAgICAgICAgdmFy
IHByb3BOYW1lOwogICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmF0dHJGaXhbIG5hbWUgXSB8fCBu
YW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHIoIGVsZW0sIG5hbWUsICIi
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7
CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB0
byBmYWxzZSBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggcmJvb2xlYW4udGVzdCggbmFtZSApICYmIChwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBu
YW1lIF0gfHwgbmFtZSkgaW4gZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtWyBwcm9wTmFtZSBdID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBhdHRySG9va3M6IHsKICAgICAgICAg
ICAgICAgIHR5cGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qg
YWxsb3cgdGhlIHR5cGUgcHJvcGVydHkgdG8gYmUgY2hhbmdlZCAoc2luY2UgaXQgY2F1c2VzIHBy
b2JsZW1zIGluIElFKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcnR5cGUu
dGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggInR5cGUgcHJvcGVydHkg
Y2FuJ3QgYmUgY2hhbmdlZCIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCAhalF1ZXJ5LnN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAm
JiBqUXVlcnkubm9kZU5hbWUoZWxlbSwgImlucHV0IikgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIHRoZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9u
IGFmdGVyIHRoZSB2YWx1ZSByZXNldHMgdGhlIHZhbHVlIGluIElFNi05CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB2YWx1ZSB0byBpdCdzIGRlZmF1bHQg
aW4gY2FzZSB0eXBlIGlzIHNldCBhZnRlciB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBmb3IgZWxlbWVudCBjcmVhdGlvbgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggInR5
cGUiLCB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB2YWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0udmFsdWUgPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB2YWx1ZSBw
cm9wZXJ0eSBmb3IgYmFjayBjb21wYXQKICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgbm9kZUhv
b2sgZm9yIGJ1dHRvbiBlbGVtZW50cyBpbiBJRTYvNyAoIzE5NTQpCiAgICAgICAgICAgICAgICB2
YWx1ZTogewogICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1l
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZUhvb2sgJiYgalF1
ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVIb29rLmdldCggZWxlbSwgbmFtZSApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbmFtZSBpbiBlbGVtID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0udmFsdWUgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBub2RlSG9vayAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW0s
ICJidXR0b24iICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2Vz
IG5vdCByZXR1cm4gc28gdGhhdCBzZXRBdHRyaWJ1dGUgaXMgYWxzbyB1c2VkCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgcHJvcEZpeDog
ewogICAgICAgICAgICAgICAgdGFiaW5kZXg6ICJ0YWJJbmRleCIsCiAgICAgICAgICAgICAgICBy
ZWFkb25seTogInJlYWRPbmx5IiwKICAgICAgICAgICAgICAgICJmb3IiOiAiaHRtbEZvciIsCiAg
ICAgICAgICAgICAgICAiY2xhc3MiOiAiY2xhc3NOYW1lIiwKICAgICAgICAgICAgICAgIG1heGxl
bmd0aDogIm1heExlbmd0aCIsCiAgICAgICAgICAgICAgICBjZWxsc3BhY2luZzogImNlbGxTcGFj
aW5nIiwKICAgICAgICAgICAgICAgIGNlbGxwYWRkaW5nOiAiY2VsbFBhZGRpbmciLAogICAgICAg
ICAgICAgICAgcm93c3BhbjogInJvd1NwYW4iLAogICAgICAgICAgICAgICAgY29sc3BhbjogImNv
bFNwYW4iLAogICAgICAgICAgICAgICAgdXNlbWFwOiAidXNlTWFwIiwKICAgICAgICAgICAgICAg
IGZyYW1lYm9yZGVyOiAiZnJhbWVCb3JkZXIiLAogICAgICAgICAgICAgICAgY29udGVudGVkaXRh
YmxlOiAiY29udGVudEVkaXRhYmxlIgogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgcHJvcDog
ZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewogICAgICAgICAgICAgICAgdmFyIG5UeXBl
ID0gZWxlbS5ub2RlVHlwZTsKCiAgICAgICAgICAgICAgICAvLyBkb24ndCBnZXQvc2V0IHByb3Bl
cnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCiAgICAgICAgICAgICAg
ICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAy
ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciByZXQsIGhvb2tzLAogICAgICAgICAgICAgICAg
ICAgICAgICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7
CgogICAgICAgICAgICAgICAgaWYgKCBub3R4bWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3MKICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5z
ZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtWyBuYW1l
IF0gPSB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhv
b2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVs
ZW1bIG5hbWUgXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgcHJvcEhvb2tzOiB7CiAgICAgICAgICAgICAgICB0
YWJJbmRleDogewogICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsZW0udGFiSW5kZXggZG9lc24n
dCBhbHdheXMgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhw
bGljaXRseSBzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vZmx1
aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmlu
Zy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0LwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBhdHRyaWJ1dGVOb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJp
bmRleCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRl
Tm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCA/CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZUludCggYXR0cmlidXRlTm9kZS52YWx1ZSwgMTAgKSA6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZm9jdXNhYmxlLnRlc3QoIGVs
ZW0ubm9kZU5hbWUgKSB8fCByY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVt
LmhyZWYgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
IDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZp
bmVkOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
fQp9KTsKCi8vIEFkZCB0aGUgdGFiaW5kZXggcHJvcEhvb2sgdG8gYXR0ckhvb2tzIGZvciBiYWNr
LWNvbXBhdApqUXVlcnkuYXR0ckhvb2tzLnRhYkluZGV4ID0galF1ZXJ5LnByb3BIb29rcy50YWJJ
bmRleDsKCi8vIEhvb2sgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwpib29sSG9vayA9IHsKICAgICAg
ICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewogICAgICAgICAgICAgICAgLy8gQWxpZ24g
Ym9vbGVhbiBhdHRyaWJ1dGVzIHdpdGggY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzCiAgICAgICAg
ICAgICAgICAvLyBGYWxsIGJhY2sgdG8gYXR0cmlidXRlIHByZXNlbmNlIHdoZXJlIHNvbWUgYm9v
bGVhbnMgYXJlIG5vdCBzdXBwb3J0ZWQKICAgICAgICAgICAgICAgIHZhciBhdHRyTm9kZTsKICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSApID09PSB0cnVlIHx8
ICggYXR0ck5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIGF0dHJOb2Rl
Lm5vZGVWYWx1ZSAhPT0gZmFsc2UgPwogICAgICAgICAgICAgICAgICAgICAgICBuYW1lLnRvTG93
ZXJDYXNlKCkgOgogICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7CiAgICAgICAgfSwK
ICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKICAgICAgICAgICAg
ICAgIHZhciBwcm9wTmFtZTsKICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdo
ZW4gc2V0IHRvIGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRy
KCBlbGVtLCBuYW1lICk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAvLyB2YWx1ZSBpcyB0cnVlIHNpbmNlIHdlIGtub3cgYXQgdGhpcyBwb2ludCBpdCdz
IHR5cGUgYm9vbGVhbiBhbmQgbm90IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNl
dCBib29sZWFuIGF0dHJpYnV0ZXMgdG8gdGhlIHNhbWUgbmFtZSBhbmQgc2V0IHRoZSBET00gcHJv
cGVydHkKICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsg
bmFtZSBdIHx8IG5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJvcE5hbWUgaW4g
ZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHNldCB0aGUg
SURMIHNwZWNpZmljYWxseSBpZiBpdCBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgZWxlbWVudAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIHByb3BOYW1lIF0gPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0
dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpICk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICByZXR1cm4gbmFtZTsKICAgICAgICB9Cn07CgovLyBJRTYvNyBkbyBub3Qg
c3VwcG9ydCBnZXR0aW5nL3NldHRpbmcgc29tZSBhdHRyaWJ1dGVzIHdpdGggZ2V0L3NldEF0dHJp
YnV0ZQppZiAoICFqUXVlcnkuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUgKSB7CiAgICAgICAgCiAg
ICAgICAgLy8gVXNlIHRoaXMgZm9yIGFueSBhdHRyaWJ1dGUgaW4gSUU2LzcKICAgICAgICAvLyBU
aGlzIGZpeGVzIGFsbW9zdCBldmVyeSBJRTYvNyBpc3N1ZQogICAgICAgIG5vZGVIb29rID0galF1
ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9IHsKICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVs
ZW0sIG5hbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIGlmIG5vZGVWYWx1ZSBpcyBlbXB0
eSBzdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCAmJiByZXQubm9kZVZh
bHVlICE9PSAiIiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0Lm5vZGVWYWx1
ZSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwogICAgICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1l
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGV4aXN0aW5nIG9yIGNyZWF0
ZSBhIG5ldyBhdHRyaWJ1dGUgbm9kZQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0g
ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIXJldCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBkb2N1bWVu
dC5jcmVhdGVBdHRyaWJ1dGUoIG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtLnNldEF0dHJpYnV0ZU5vZGUoIHJldCApOwogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0Lm5vZGVWYWx1ZSA9IHZhbHVlICsg
IiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIC8vIFNldCB3aWR0aCBh
bmQgaGVpZ2h0IHRvIGF1dG8gaW5zdGVhZCBvZiAwIG9uIGVtcHR5IHN0cmluZyggQnVnICM4MTUw
ICkKICAgICAgICAvLyBUaGlzIGlzIGZvciByZW1vdmFscwogICAgICAgIGpRdWVyeS5lYWNoKFsg
IndpZHRoIiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CiAgICAgICAgICAgICAg
ICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhv
b2tzWyBuYW1lIF0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9
PT0gIiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNl
dEF0dHJpYnV0ZSggbmFtZSwgImF1dG8iICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9
KTsKfQoKCi8vIFNvbWUgYXR0cmlidXRlcyByZXF1aXJlIGEgc3BlY2lhbCBjYWxsIG9uIElFCmlm
ICggIWpRdWVyeS5zdXBwb3J0LmhyZWZOb3JtYWxpemVkICkgewogICAgICAgIGpRdWVyeS5lYWNo
KFsgImhyZWYiLCAic3JjIiwgIndpZHRoIiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUg
KSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0
ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0sIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIDIgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSBudWxsID8gdW5kZWZpbmVkIDogcmV0OwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9KTsKfQoK
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3R5bGUgKSB7CiAgICAgICAgalF1ZXJ5LmF0dHJIb29rcy5z
dHlsZSA9IHsKICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFJldHVybiB1bmRlZmluZWQgaW4gdGhlIGNhc2Ugb2YgZW1wdHkg
c3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byBsb3dlcmNhc2Ug
c2luY2UgSUUgdXBwZXJjYXNlcyBjc3MgcHJvcGVydHkgbmFtZXMKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0uc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpIHx8IHVuZGVmaW5l
ZDsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVt
LCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtLnN0eWxlLmNz
c1RleHQgPSAiIiArIHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Owp9CgovLyBT
YWZhcmkgbWlzLXJlcG9ydHMgdGhlIGRlZmF1bHQgc2VsZWN0ZWQgcHJvcGVydHkgb2YgYW4gb3B0
aW9uCi8vIEFjY2Vzc2luZyB0aGUgcGFyZW50J3Mgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eSBmaXhl
cyBpdAppZiAoICFqUXVlcnkuc3VwcG9ydC5vcHRTZWxlY3RlZCApIHsKICAgICAgICBqUXVlcnku
cHJvcEhvb2tzLnNlbGVjdGVkID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxl
Y3RlZCwgewogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcGFyZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudC5zZWxlY3RlZEluZGV4OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBpdCBhbHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3
MDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcmVudC5wYXJlbnROb2Rl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBhcmVu
dE5vZGUuc2VsZWN0ZWRJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSk7Cn0KCi8vIFJhZGlvcyBhbmQgY2hlY2ti
b3hlcyBnZXR0ZXIvc2V0dGVyCmlmICggIWpRdWVyeS5zdXBwb3J0LmNoZWNrT24gKSB7CiAgICAg
ICAgalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGluIFdlYmtpdCAiIiBpcyByZXR1cm5lZCBp
bnN0ZWFkIG9mICJvbiIgaWYgYSB2YWx1ZSBpc24ndCBzcGVjaWZpZWQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoInZhbHVlIikgPT09IG51
bGwgPyAib24iIDogZWxlbS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfTsKICAgICAgICB9KTsKfQpqUXVlcnkuZWFjaChbICJyYWRpbyIsICJjaGVja2Jv
eCIgXSwgZnVuY3Rpb24oKSB7CiAgICAgICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSBqUXVl
cnkuZXh0ZW5kKCBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSwgewogICAgICAgICAgICAgICAgc2V0
OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KGVsZW0pLnZh
bCgpLCB2YWx1ZSApID49IDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfSk7Cn0pOwoKCgoKdmFyIHJuYW1lc3BhY2VzID0gL1wuKC4qKSQvLAog
ICAgICAgIHJmb3JtRWxlbXMgPSAvXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksCiAgICAg
ICAgcnBlcmlvZCA9IC9cLi9nLAogICAgICAgIHJzcGFjZXMgPSAvIC9nLAogICAgICAgIHJlc2Nh
cGUgPSAvW15cd1xzLnxgXS9nLAogICAgICAgIGZjbGVhbnVwID0gZnVuY3Rpb24oIG5tICkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIG5tLnJlcGxhY2UocmVzY2FwZSwgIlxcJCYiKTsKICAgICAg
ICB9OwoKLyoKICogQSBudW1iZXIgb2YgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGZvciBtYW5hZ2lu
ZyBldmVudHMuCiAqIE1hbnkgb2YgdGhlIGlkZWFzIGJlaGluZCB0aGlzIGNvZGUgb3JpZ2luYXRl
ZCBmcm9tCiAqIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeS4KICovCmpRdWVyeS5ldmVu
dCA9IHsKCiAgICAgICAgLy8gQmluZCBhbiBldmVudCB0byBhbiBlbGVtZW50CiAgICAgICAgLy8g
T3JpZ2luYWwgYnkgRGVhbiBFZHdhcmRzCiAgICAgICAgYWRkOiBmdW5jdGlvbiggZWxlbSwgdHlw
ZXMsIGhhbmRsZXIsIGRhdGEgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUg
PT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggaGFuZGxlciA9
PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSByZXR1cm5GYWxz
ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFoYW5kbGVyICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGaXhlcyBidWcgIzcyMjkuIEZpeCByZWNvbW1lbmRlZCBieSBqZGFsdG9u
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICB2YXIgaGFuZGxlT2JqSW4sIGhhbmRsZU9iajsKCiAgICAgICAgICAgICAgICBp
ZiAoIGhhbmRsZXIuaGFuZGxlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2Jq
SW4gPSBoYW5kbGVyOwogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlT2Jq
SW4uaGFuZGxlcjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCB0aGUgZnVuY3Rpb24gYmVpbmcgZXhlY3V0ZWQgaGFzIGEgdW5pcXVlIElECiAgICAg
ICAgICAgICAgICBpZiAoICFoYW5kbGVyLmd1aWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZQogICAgICAgICAg
ICAgICAgdmFyIGVsZW1EYXRhID0galF1ZXJ5Ll9kYXRhKCBlbGVtICk7CgogICAgICAgICAgICAg
ICAgLy8gSWYgbm8gZWxlbURhdGEgaXMgZm91bmQgdGhlbiB3ZSBtdXN0IGJlIHRyeWluZyB0byBi
aW5kIHRvIG9uZSBvZiB0aGUKICAgICAgICAgICAgICAgIC8vIGJhbm5lZCBub0RhdGEgZWxlbWVu
dHMKICAgICAgICAgICAgICAgIGlmICggIWVsZW1EYXRhICkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGV2ZW50
cyA9IGVsZW1EYXRhLmV2ZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGUg
PSBlbGVtRGF0YS5oYW5kbGU7CgogICAgICAgICAgICAgICAgaWYgKCAhZXZlbnRzICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtRGF0YS5ldmVudHMgPSBldmVudHMgPSB7fTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICFldmVudEhhbmRsZSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbURhdGEuaGFuZGxlID0gZXZlbnRIYW5kbGUgPSBmdW5jdGlv
biggZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIHRoZSBz
ZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFn
ZSBoYXMgdW5sb2FkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlw
ZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5lZCIgJiYgKCFlIHx8IGpRdWVyeS5ldmVudC50cmlnZ2Vy
ZWQgIT09IGUudHlwZSkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSggZXZlbnRIYW5kbGUuZWxlbSwgYXJndW1lbnRzICkg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwogICAg
ICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IC8vIEFkZCBlbGVtIGFzIGEgcHJvcGVydHkgb2YgdGhlIGhhbmRsZSBmdW5jdGlvbgogICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyB0byBwcmV2ZW50IGEgbWVtb3J5IGxlYWsgd2l0aCBub24tbmF0
aXZlIGV2ZW50cyBpbiBJRS4KICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlLmVsZW0gPSBlbGVt
OwoKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5
IGEgc3BhY2UKICAgICAgICAgICAgICAgIC8vIGpRdWVyeSguLi4pLmJpbmQoIm1vdXNlb3ZlciBt
b3VzZW91dCIsIGZuKTsKICAgICAgICAgICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoIiAiKTsK
CiAgICAgICAgICAgICAgICB2YXIgdHlwZSwgaSA9IDAsIG5hbWVzcGFjZXM7CgogICAgICAgICAg
ICAgICAgd2hpbGUgKCAodHlwZSA9IHR5cGVzWyBpKysgXSkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZU9iaiA9IGhhbmRsZU9iakluID8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZXh0ZW5kKHt9LCBoYW5kbGVPYmpJbikgOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgaGFuZGxlcjogaGFuZGxlciwgZGF0YTogZGF0YSB9OwoKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTmFtZXNwYWNlZCBldmVudCBoYW5kbGVycwogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHR5cGUuaW5kZXhPZigiLiIpID4gLTEgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIi4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPSBuYW1lc3Bh
Y2VzLnNsaWNlKDApLnNvcnQoKS5qb2luKCIuIik7CgogICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBbXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmoubmFtZXNwYWNlID0gIiI7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZU9iai50eXBlID0gdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaGFuZGxlT2Jq
Lmd1aWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLmd1aWQg
PSBoYW5kbGVyLmd1aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBsaXN0IG9mIGZ1bmN0aW9ucyBib3VuZCB0byB0
aGlzIGV2ZW50CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVycyA9IGV2ZW50c1sg
dHlwZSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnku
ZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICFoYW5kbGVycyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycyA9
IGV2ZW50c1sgdHlwZSBdID0gW107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENoZWNrIGZvciBhIHNwZWNpYWwgZXZlbnQgaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIvYXR0YWNoRXZlbnQgaWYgdGhl
IHNwZWNpYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBldmVudHMgaGFuZGxl
ciByZXR1cm5zIGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3Bl
Y2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMs
IGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQmluZCB0aGUgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1l
bnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5hZGRF
dmVudExpc3RlbmVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlLCBmYWxzZSAp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVs
ZW0uYXR0YWNoRXZlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0uYXR0YWNoRXZlbnQoICJvbiIgKyB0eXBlLCBldmVudEhhbmRsZSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzcGVjaWFsLmFkZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyLmd1
aWQgPSBoYW5kbGVyLmd1aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhl
IGZ1bmN0aW9uIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0CiAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBiZWVuIHVzZWQsIGZvciBldmVu
dCBvcHRpbWl6YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50Lmdsb2Jh
bFsgdHlwZSBdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBO
dWxsaWZ5IGVsZW0gdG8gcHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKICAgICAgICAgICAgICAg
IGVsZW0gPSBudWxsOwogICAgICAgIH0sCgogICAgICAgIGdsb2JhbDoge30sCgogICAgICAgIC8v
IERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAogICAgICAg
IHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBwb3MgKSB7CiAgICAgICAg
ICAgICAgICAvLyBkb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwogICAg
ICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09
IDggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZXIgPT09IGZhbHNlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVyID0gcmV0dXJuRmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgdmFyIHJldCwgdHlwZSwgZm4sIGosIGkgPSAwLCBhbGwsIG5hbWVzcGFjZXMs
IG5hbWVzcGFjZSwgc3BlY2lhbCwgZXZlbnRUeXBlLCBoYW5kbGVPYmosIG9yaWdUeXBlLAogICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtRGF0YSA9IGpRdWVyeS5oYXNEYXRhKCBlbGVtICkgJiYg
alF1ZXJ5Ll9kYXRhKCBlbGVtICksCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyA9IGVs
ZW1EYXRhICYmIGVsZW1EYXRhLmV2ZW50czsKCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtRGF0
YSB8fCAhZXZlbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gdHlwZXMgaXMgYWN0dWFsbHkgYW4gZXZlbnQg
b2JqZWN0IGhlcmUKICAgICAgICAgICAgICAgIGlmICggdHlwZXMgJiYgdHlwZXMudHlwZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IHR5cGVzLmhhbmRsZXI7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVzID0gdHlwZXMudHlwZTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAvLyBVbmJpbmQgYWxsIGV2ZW50cyBmb3IgdGhlIGVsZW1lbnQKICAgICAg
ICAgICAgICAgIGlmICggIXR5cGVzIHx8IHR5cGVvZiB0eXBlcyA9PT0gInN0cmluZyIgJiYgdHlw
ZXMuY2hhckF0KDApID09PSAiLiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzID0g
dHlwZXMgfHwgIiI7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3Zl
KCBlbGVtLCB0eXBlICsgdHlwZXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKICAgICAg
ICAgICAgICAgIC8vIGpRdWVyeSguLi4pLnVuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4p
OwogICAgICAgICAgICAgICAgdHlwZXMgPSB0eXBlcy5zcGxpdCgiICIpOwoKICAgICAgICAgICAg
ICAgIHdoaWxlICggKHR5cGUgPSB0eXBlc1sgaSsrIF0pICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBvcmlnVHlwZSA9IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9
IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIGFsbCA9IHR5cGUuaW5kZXhPZigiLiIpIDwg
MDsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IFtdOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhYWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE5hbWVzcGFjZWQgZXZlbnQgaGFuZGxlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCgiLiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWVzcGFjZSA9IG5ldyBSZWdFeHAoIihefFxcLikiICsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIG5hbWVzcGFjZXMuc2xp
Y2UoMCkuc29ydCgpLCBmY2xlYW51cCApLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSArICIoXFwufCQp
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGV2
ZW50VHlwZSA9IGV2ZW50c1sgdHlwZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
ZXZlbnRUeXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFo
YW5kbGVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBq
IDwgZXZlbnRUeXBlLmxlbmd0aDsgaisrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGFuZGxlT2JqID0gZXZlbnRUeXBlWyBqIF07CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhbGwgfHwgbmFtZXNwYWNlLnRlc3QoIGhhbmRs
ZU9iai5uYW1lc3BhY2UgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgb3JpZ1R5cGUsIGhhbmRsZU9i
ai5oYW5kbGVyLCBqICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50VHlwZS5zcGxpY2UoIGotLSwgMSApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQu
c3BlY2lhbFsgdHlwZSBdIHx8IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9
IHBvcyB8fCAwOyBqIDwgZXZlbnRUeXBlLmxlbmd0aDsgaisrICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGV2ZW50VHlwZVsgaiBdOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhl
IGdpdmVuIGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGFsbCB8fCBuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5h
bWVzcGFjZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHBvcyA9PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZS5zcGxpY2UoIGotLSwgMSApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwucmVtb3Zl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBwb3MgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgZ2VuZXJpYyBl
dmVudCBoYW5kbGVyIGlmIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBldmVudFR5cGUubGVuZ3RoID09PSAwIHx8IHBvcyAhPSBudWxsICYmIGV2ZW50
VHlwZS5sZW5ndGggPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhc3BlY2lhbC50ZWFyZG93biB8fCBzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVz
cGFjZXMgKSA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgZXZlbnRzWyB0eXBlIF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBs
b25nZXIgdXNlZAogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZl
bnRzICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGUgPSBlbGVtRGF0YS5o
YW5kbGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5lbGVtID0gbnVsbDsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmV2ZW50
czsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGVsZW1EYXRhICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVs
ZW0sIHVuZGVmaW5lZCwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvLyBFdmVudHMgdGhhdCBhcmUg
c2FmZSB0byBzaG9ydC1jaXJjdWl0IGlmIG5vIGhhbmRsZXJzIGFyZSBhdHRhY2hlZC4KICAgICAg
ICAvLyBOYXRpdmUgRE9NIGV2ZW50cyBzaG91bGQgbm90IGJlIGFkZGVkLCB0aGV5IG1heSBoYXZl
IGlubGluZSBoYW5kbGVycy4KICAgICAgICBjdXN0b21FdmVudDogewogICAgICAgICAgICAgICAg
ImdldERhdGEiOiB0cnVlLAogICAgICAgICAgICAgICAgInNldERhdGEiOiB0cnVlLAogICAgICAg
ICAgICAgICAgImNoYW5nZURhdGEiOiB0cnVlCiAgICAgICAgfSwKCiAgICAgICAgdHJpZ2dlcjog
ZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7CiAgICAgICAgICAg
ICAgICAvLyBFdmVudCBvYmplY3Qgb3IgZXZlbnQgdHlwZQogICAgICAgICAgICAgICAgdmFyIHR5
cGUgPSBldmVudC50eXBlIHx8IGV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3Bh
Y2VzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2l2ZTsKCiAgICAgICAgICAg
ICAgICBpZiAoIHR5cGUuaW5kZXhPZigiISIpID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEV4Y2x1c2l2ZSBldmVudHMgdHJpZ2dlciBvbmx5IGZvciB0aGUgZXhhY3QgZXZlbnQg
KG5vIG5hbWVzcGFjZXMpCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLnNsaWNl
KDAsIC0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVzaXZlID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHR5cGUuaW5kZXhPZigiLiIpID49IDAg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRl
IGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIi4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZXNwYWNlcy5zb3J0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYg
KCAoIWVsZW0gfHwgalF1ZXJ5LmV2ZW50LmN1c3RvbUV2ZW50WyB0eXBlIF0pICYmICFqUXVlcnku
ZXZlbnQuZ2xvYmFsWyB0eXBlIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGpR
dWVyeSBoYW5kbGVycyBmb3IgdGhpcyBldmVudCB0eXBlLCBhbmQgaXQgY2FuJ3QgaGF2ZSBpbmxp
bmUgaGFuZGxlcnMKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBFdmVudCwgT2Jq
ZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nCiAgICAgICAgICAgICAgICBldmVudCA9
IHR5cGVvZiBldmVudCA9PT0gIm9iamVjdCIgPwogICAgICAgICAgICAgICAgICAgICAgICAvLyBq
UXVlcnkuRXZlbnQgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50WyBqUXVlcnku
ZXhwYW5kbyBdID8gZXZlbnQgOgogICAgICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3QgbGl0
ZXJhbAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCBldmVu
dCApIDoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCB0aGUgZXZlbnQgdHlwZSAoc3Ry
aW5nKQogICAgICAgICAgICAgICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlICk7Cgog
ICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IHR5cGU7CiAgICAgICAgICAgICAgICBldmVudC5l
eGNsdXNpdmUgPSBleGNsdXNpdmU7CiAgICAgICAgICAgICAgICBldmVudC5uYW1lc3BhY2UgPSBu
YW1lc3BhY2VzLmpvaW4oIi4iKTsKICAgICAgICAgICAgICAgIGV2ZW50Lm5hbWVzcGFjZV9yZSA9
IG5ldyBSZWdFeHAoIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLik/Iikg
KyAiKFxcLnwkKSIpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyB0cmlnZ2Vy
SGFuZGxlcigpIGFuZCBnbG9iYWwgZXZlbnRzIGRvbid0IGJ1YmJsZSBvciBydW4gdGhlIGRlZmF1
bHQgYWN0aW9uCiAgICAgICAgICAgICAgICBpZiAoIG9ubHlIYW5kbGVycyB8fCAhZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gSGFuZGxlIGEgZ2xvYmFsIHRyaWdnZXIKICAgICAgICAgICAg
ICAgIGlmICggIWVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFN0b3Ag
dGF1bnRpbmcgdGhlIGRhdGEgY2FjaGU7IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdheXMg
YXR0YWNoIHRvIGRvY3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBq
UXVlcnkuY2FjaGUsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGludGVybmFsS2V5IHZhcmlhYmxlIGlzIGp1c3QgdXNlZCB0byBtYWtlIGl0IGVhc2llciB0
byBmaW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHBvdGVudGlhbGx5
IGNoYW5nZSB0aGlzIHN0dWZmIGxhdGVyOyBjdXJyZW50bHkgaXQganVzdAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHBvaW50cyB0byBqUXVlcnkuZXhwYW5kbwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxDYWNoZSA9IHRo
aXNbIGludGVybmFsS2V5IF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBp
bnRlcm5hbENhY2hlICYmIGludGVybmFsQ2FjaGUuZXZlbnRzICYmIGludGVybmFsQ2FjaGUuZXZl
bnRzWyB0eXBlIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXZlbnQudHJpZ2dlciggZXZlbnQsIGRhdGEsIGludGVybmFsQ2FjaGUuaGFuZGxlLmVs
ZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1l
bnQgbm9kZXMKICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVt
Lm5vZGVUeXBlID09PSA4ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNh
c2UgaXQgaXMgYmVpbmcgcmV1c2VkCiAgICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSB1bmRl
ZmluZWQ7CiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgPSBlbGVtOwoKICAgICAgICAgICAg
ICAgIC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3Jl
YXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3QKICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICE9
IG51bGwgPyBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgOiBbXTsKICAgICAgICAgICAgICAgIGRh
dGEudW5zaGlmdCggZXZlbnQgKTsKCiAgICAgICAgICAgICAgICB2YXIgY3VyID0gZWxlbSwKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSUUgZG9lc24ndCBsaWtlIG1ldGhvZCBuYW1lcyB3aXRo
IGEgY29sb24gKCMzNTMzLCAjODI3MikKICAgICAgICAgICAgICAgICAgICAgICAgb250eXBlID0g
dHlwZS5pbmRleE9mKCI6IikgPCAwID8gIm9uIiArIHR5cGUgOiAiIjsKCiAgICAgICAgICAgICAg
ICAvLyBGaXJlIGV2ZW50IG9uIHRoZSBjdXJyZW50IGVsZW1lbnQsIHRoZW4gYnViYmxlIHVwIHRo
ZSBET00gdHJlZQogICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgaGFuZGxlID0galF1ZXJ5Ll9kYXRhKCBjdXIsICJoYW5kbGUiICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gY3VyOwogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGhhbmRsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGUuYXBwbHkoIGN1ciwgZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGFuIGlubGluZSBib3VuZCBzY3JpcHQKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBvbnR5cGUgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGN1ciAp
ICYmIGN1clsgb250eXBlIF0gJiYgY3VyWyBvbnR5cGUgXS5hcHBseSggY3VyLCBkYXRhICkgPT09
IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3cKICAgICAgICAgICAgICAg
ICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgY3VyLm93bmVyRG9jdW1lbnQgfHwgY3Vy
ID09PSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCAmJiB3aW5kb3c7CiAgICAgICAgICAgICAg
ICB9IHdoaWxlICggY3VyICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICk7CgogICAg
ICAgICAgICAgICAgLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRv
IGl0IG5vdwogICAgICAgICAgICAgICAgaWYgKCAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVj
aWFsLl9kZWZhdWx0LmNhbGwoIGVsZW0ub3duZXJEb2N1bWVudCwgZXZlbnQgKSA9PT0gZmFsc2Up
ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISh0eXBlID09PSAiY2xpY2siICYm
IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImEiICkpICYmIGpRdWVyeS5hY2NlcHREYXRhKCBlbGVt
ICkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgYSBuYXRpdmUg
RE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBuYW1lIGFzIHRoZSBl
dmVudC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgYW4gLmlz
RnVuY3Rpb24pKCkgY2hlY2sgaGVyZSBiZWNhdXNlIElFNi83IGZhaWxzIHRoYXQgdGVzdC4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTw5IGRpZXMgb24gZm9jdXMgdG8gaGlk
ZGVuIGVsZW1lbnQgKCMxNDg2KSwgbWF5IHdhbnQgdG8gcmV2aXNpdCBhIHRyeS9jYXRjaC4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBvbnR5cGUgJiYgZWxlbVsgdHlwZSBdICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZS10cmln
Z2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCA9IGVsZW1bIG9udHlw
ZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBvbGQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbVsgb250eXBlIF0gPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgdHlwZSBdKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBjYXRjaCAoIGllRXJyb3IgKSB7fQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG9sZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW1bIG9udHlwZSBdID0gb2xkOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRy
aWdnZXJlZCA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucmVz
dWx0OwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgewogICAg
ICAgICAgICAgICAgZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBldmVudCB8fCB3aW5kb3cuZXZl
bnQgKTsKICAgICAgICAgICAgICAgIC8vIFNuYXBzaG90IHRoZSBoYW5kbGVycyBsaXN0IHNpbmNl
IGEgY2FsbGVkIGhhbmRsZXIgbWF5IGFkZC9yZW1vdmUgZXZlbnRzLgogICAgICAgICAgICAgICAg
dmFyIGhhbmRsZXJzID0gKChqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30pWyBl
dmVudC50eXBlIF0gfHwgW10pLnNsaWNlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBydW5f
YWxsID0gIWV2ZW50LmV4Y2x1c2l2ZSAmJiAhZXZlbnQubmFtZXNwYWNlLAogICAgICAgICAgICAg
ICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFyZ3VtZW50cywg
MCApOwoKICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgZml4LWVkIEV2ZW50IHJhdGhlciB0aGFu
IHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnQKICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBl
dmVudDsKICAgICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSB0aGlzOwoKICAgICAg
ICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aDsgaiA8IGw7IGor
KyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBq
IF07CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCAxKSBi
ZSBub24tZXhjbHVzaXZlIGFuZCBoYXZlIG5vIG5hbWVzcGFjZSwgb3IKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gMikgaGF2ZSBuYW1lc3BhY2UocykgYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhv
c2UgaW4gdGhlIGJvdW5kIGV2ZW50LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJ1bl9h
bGwgfHwgZXZlbnQubmFtZXNwYWNlX3JlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXNzIGluIGEgcmVmZXJlbmNlIHRv
IHRoZSBoYW5kbGVyIGZ1bmN0aW9uIGl0c2VsZgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFNvIHRoYXQgd2UgY2FuIGxhdGVyIHJlbW92ZSBpdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV2ZW50LmhhbmRsZXIgPSBoYW5kbGVPYmouaGFuZGxlcjsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gaGFuZGxlT2JqLmhhbmRs
ZXIuYXBwbHkoIHRoaXMsIGFyZ3MgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50LnJlc3VsdCA9IHJldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcmV0ID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5yZXN1bHQ7CiAgICAgICAgfSwKCiAg
ICAgICAgcHJvcHM6ICJhbHRLZXkgYXR0ckNoYW5nZSBhdHRyTmFtZSBidWJibGVzIGJ1dHRvbiBj
YW5jZWxhYmxlIGNoYXJDb2RlIGNsaWVudFggY2xpZW50WSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQg
ZGF0YSBkZXRhaWwgZXZlbnRQaGFzZSBmcm9tRWxlbWVudCBoYW5kbGVyIGtleUNvZGUgbGF5ZXJY
IGxheWVyWSBtZXRhS2V5IG5ld1ZhbHVlIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBwcmV2
VmFsdWUgcmVsYXRlZE5vZGUgcmVsYXRlZFRhcmdldCBzY3JlZW5YIHNjcmVlblkgc2hpZnRLZXkg
c3JjRWxlbWVudCB0YXJnZXQgdG9FbGVtZW50IHZpZXcgd2hlZWxEZWx0YSB3aGljaCIuc3BsaXQo
IiAiKSwKCiAgICAgICAgZml4OiBmdW5jdGlvbiggZXZlbnQgKSB7CiAgICAgICAgICAgICAgICBp
ZiAoIGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdICkgewogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXZlbnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gc3RvcmUg
YSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBldmVudCBvYmplY3QKICAgICAgICAgICAgICAgIC8vIGFu
ZCAiY2xvbmUiIHRvIHNldCByZWFkLW9ubHkgcHJvcGVydGllcwogICAgICAgICAgICAgICAgdmFy
IG9yaWdpbmFsRXZlbnQgPSBldmVudDsKICAgICAgICAgICAgICAgIGV2ZW50ID0galF1ZXJ5LkV2
ZW50KCBvcmlnaW5hbEV2ZW50ICk7CgogICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSB0aGlz
LnByb3BzLmxlbmd0aCwgcHJvcDsgaTsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByb3Ag
PSB0aGlzLnByb3BzWyAtLWkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRbIHByb3Ag
XSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBGaXggdGFyZ2V0IHByb3BlcnR5LCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgICAg
IGlmICggIWV2ZW50LnRhcmdldCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZXMg
IzE5MjUgd2hlcmUgc3JjRWxlbWVudCBtaWdodCBub3QgYmUgZGVmaW5lZCBlaXRoZXIKICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudCB8fCBkb2N1
bWVudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0YXJn
ZXQgaXMgYSB0ZXh0bm9kZSAoc2FmYXJpKQogICAgICAgICAgICAgICAgaWYgKCBldmVudC50YXJn
ZXQubm9kZVR5cGUgPT09IDMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdl
dCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIEFkZCByZWxhdGVkVGFyZ2V0LCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgICAg
IGlmICggIWV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZXZlbnQuZnJvbUVsZW1lbnQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBldmVudC5mcm9tRWxlbWVu
dCA9PT0gZXZlbnQudGFyZ2V0ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQ7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kg
aWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgaWYgKCBl
dmVudC5wYWdlWCA9PSBudWxsICYmIGV2ZW50LmNsaWVudFggIT0gbnVsbCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGV2ZW50RG9jdW1lbnQgPSBldmVudC50YXJnZXQub3duZXJEb2N1
bWVudCB8fCBkb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2MgPSBl
dmVudERvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib2R5ID0gZXZlbnREb2N1bWVudC5ib2R5OwoKICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnQucGFnZVggPSBldmVudC5jbGllbnRYICsgKGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBi
b2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwKSAtIChkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwg
Ym9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2
ZW50LnBhZ2VZID0gZXZlbnQuY2xpZW50WSArIChkb2MgJiYgZG9jLnNjcm9sbFRvcCAgfHwgYm9k
eSAmJiBib2R5LnNjcm9sbFRvcCAgfHwgMCkgLSAoZG9jICYmIGRvYy5jbGllbnRUb3AgIHx8IGJv
ZHkgJiYgYm9keS5jbGllbnRUb3AgIHx8IDApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50cwogICAgICAgICAgICAgICAgaWYgKCBl
dmVudC53aGljaCA9PSBudWxsICYmIChldmVudC5jaGFyQ29kZSAhPSBudWxsIHx8IGV2ZW50Lmtl
eUNvZGUgIT0gbnVsbCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0g
ZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBZGQgbWV0YUtleSB0byBub24t
TWFjIGJyb3dzZXJzICh1c2UgY3RybCBmb3IgUEMncyBhbmQgTWV0YSBmb3IgTWFjcykKICAgICAg
ICAgICAgICAgIGlmICggIWV2ZW50Lm1ldGFLZXkgJiYgZXZlbnQuY3RybEtleSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQubWV0YUtleSA9IGV2ZW50LmN0cmxLZXk7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0g
bGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodAogICAgICAgICAgICAgICAgLy8gTm90ZTog
YnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyBkb24ndCB1c2UgaXQKICAgICAgICAgICAgICAg
IGlmICggIWV2ZW50LndoaWNoICYmIGV2ZW50LmJ1dHRvbiAhPT0gdW5kZWZpbmVkICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC53aGljaCA9IChldmVudC5idXR0b24gJiAxID8gMSA6
ICggZXZlbnQuYnV0dG9uICYgMiA/IDMgOiAoIGV2ZW50LmJ1dHRvbiAmIDQgPyAyIDogMCApICkp
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBldmVudDsKICAgICAg
ICB9LAoKICAgICAgICAvLyBEZXByZWNhdGVkLCB1c2UgalF1ZXJ5Lmd1aWQgaW5zdGVhZAogICAg
ICAgIGd1aWQ6IDFFOCwKCiAgICAgICAgLy8gRGVwcmVjYXRlZCwgdXNlIGpRdWVyeS5wcm94eSBp
bnN0ZWFkCiAgICAgICAgcHJveHk6IGpRdWVyeS5wcm94eSwKCiAgICAgICAgc3BlY2lhbDogewog
ICAgICAgICAgICAgICAgcmVhZHk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoZSByZWFkeSBldmVudCBpcyBzZXR1cAogICAgICAgICAgICAgICAgICAgICAgICBzZXR1
cDogalF1ZXJ5LmJpbmRSZWFkeSwKICAgICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd246IGpR
dWVyeS5ub29wCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGxpdmU6IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkOiBmdW5jdGlvbiggaGFuZGxlT2JqICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlQ29udmVydCggaGFuZGxlT2JqLm9y
aWdUeXBlLCBoYW5kbGVPYmouc2VsZWN0b3IgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoe30sIGhhbmRsZU9iaiwge2hhbmRsZXI6IGxpdmVI
YW5kbGVyLCBndWlkOiBoYW5kbGVPYmouaGFuZGxlci5ndWlkfSkgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oIGhh
bmRsZU9iaiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
cmVtb3ZlKCB0aGlzLCBsaXZlQ29udmVydCggaGFuZGxlT2JqLm9yaWdUeXBlLCBoYW5kbGVPYmou
c2VsZWN0b3IgKSwgaGFuZGxlT2JqICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgYmVmb3JldW5sb2FkOiB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiggZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5k
bGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRv
IGRvIHRoaXMgc3BlY2lhbCBjYXNlIG9uIHdpbmRvd3MKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGpRdWVyeS5pc1dpbmRvdyggdGhpcyApICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmJlZm9yZXVubG9hZCA9IGV2ZW50SGFuZGxl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbiggbmFtZXNw
YWNlcywgZXZlbnRIYW5kbGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0aGlzLm9uYmVmb3JldW5sb2FkID09PSBldmVudEhhbmRsZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25iZWZvcmV1bmxvYWQgPSBudWxsOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQogICAgICAgIH0KfTsKCmpRdWVyeS5yZW1vdmVFdmVudCA9IGRvY3Vt
ZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIgPwogICAgICAgIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBo
YW5kbGUgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBl
LCBoYW5kbGUsIGZhbHNlICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSA6CiAgICAgICAg
ZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKICAgICAgICAgICAgICAgIGlmICggZWxl
bS5kZXRhY2hFdmVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5kZXRhY2hFdmVu
dCggIm9uIiArIHR5cGUsIGhhbmRsZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07Cgpq
UXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHsKICAgICAgICAvLyBBbGxvdyBp
bnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKICAgICAgICBpZiAoICF0aGlz
LnByZXZlbnREZWZhdWx0ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuRXZl
bnQoIHNyYywgcHJvcHMgKTsKICAgICAgICB9CgogICAgICAgIC8vIEV2ZW50IG9iamVjdAogICAg
ICAgIGlmICggc3JjICYmIHNyYy50eXBlICkgewogICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5h
bEV2ZW50ID0gc3JjOwogICAgICAgICAgICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7CgogICAg
ICAgICAgICAgICAgLy8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBi
ZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQKICAgICAgICAgICAgICAgIC8vIGJ5IGEgaGFuZGxlciBs
b3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLgogICAgICAgICAg
ICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSAoc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHwg
c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSB8fAogICAgICAgICAgICAgICAgICAgICAgICBzcmMu
Z2V0UHJldmVudERlZmF1bHQgJiYgc3JjLmdldFByZXZlbnREZWZhdWx0KCkpID8gcmV0dXJuVHJ1
ZSA6IHJldHVybkZhbHNlOwoKICAgICAgICAvLyBFdmVudCB0eXBlCiAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9IHNyYzsKICAgICAgICB9CgogICAgICAgIC8vIFB1
dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0CiAg
ICAgICAgaWYgKCBwcm9wcyApIHsKICAgICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIHRoaXMs
IHByb3BzICk7CiAgICAgICAgfQoKICAgICAgICAvLyB0aW1lU3RhbXAgaXMgYnVnZ3kgZm9yIHNv
bWUgZXZlbnRzIG9uIEZpcmVmb3goIzM4NDMpCiAgICAgICAgLy8gU28gd2Ugd29uJ3QgcmVseSBv
biB0aGUgbmF0aXZlIHZhbHVlCiAgICAgICAgdGhpcy50aW1lU3RhbXAgPSBqUXVlcnkubm93KCk7
CgogICAgICAgIC8vIE1hcmsgaXQgYXMgZml4ZWQKICAgICAgICB0aGlzWyBqUXVlcnkuZXhwYW5k
byBdID0gdHJ1ZTsKfTsKCmZ1bmN0aW9uIHJldHVybkZhbHNlKCkgewogICAgICAgIHJldHVybiBm
YWxzZTsKfQpmdW5jdGlvbiByZXR1cm5UcnVlKCkgewogICAgICAgIHJldHVybiB0cnVlOwp9Cgov
LyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRo
ZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAw
My9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1s
CmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5U
cnVlOwoKICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwogICAgICAg
ICAgICAgICAgaWYgKCAhZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIGlmIHByZXZlbnREZWZhdWx0IGV4aXN0
cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50CiAgICAgICAgICAgICAgICBpZiAoIGUucHJl
dmVudERlZmF1bHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQo
KTsKCiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9w
ZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZmFsc2UgKElFKQogICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1
cm5UcnVlOwoKICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwogICAg
ICAgICAgICAgICAgaWYgKCAhZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gaWYgc3RvcFByb3BhZ2F0aW9uIGV4
aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50CiAgICAgICAgICAgICAgICBpZiAoIGUu
c3RvcFByb3BhZ2F0aW9uICkgewogICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdh
dGlvbigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNl
dCB0aGUgY2FuY2VsQnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0cnVl
IChJRSkKICAgICAgICAgICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKICAgICAgICB9LAog
ICAgICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICB0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKICAg
ICAgICAgICAgICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfSwKICAgICAgICBp
c0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLAogICAgICAgIGlzUHJvcGFnYXRpb25TdG9w
cGVkOiByZXR1cm5GYWxzZSwKICAgICAgICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDog
cmV0dXJuRmFsc2UKfTsKCi8vIENoZWNrcyBpZiBhbiBldmVudCBoYXBwZW5lZCBvbiBhbiBlbGVt
ZW50IHdpdGhpbiBhbm90aGVyIGVsZW1lbnQKLy8gVXNlZCBpbiBqUXVlcnkuZXZlbnQuc3BlY2lh
bC5tb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGhhbmRsZXJzCnZhciB3aXRoaW5FbGVtZW50ID0g
ZnVuY3Rpb24oIGV2ZW50ICkgewoKICAgICAgICAvLyBDaGVjayBpZiBtb3VzZShvdmVyfG91dCkg
YXJlIHN0aWxsIHdpdGhpbiB0aGUgc2FtZSBwYXJlbnQgZWxlbWVudAogICAgICAgIHZhciByZWxh
dGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCwKICAgICAgICAgICAgICAgIGluc2lkZSA9IGZhbHNl
LAogICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gZXZlbnQudHlwZTsKCiAgICAgICAgZXZlbnQu
dHlwZSA9IGV2ZW50LmRhdGE7CgogICAgICAgIGlmICggcmVsYXRlZCAhPT0gdGhpcyApIHsKCiAg
ICAgICAgICAgICAgICBpZiAoIHJlbGF0ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2lkZSA9IGpRdWVyeS5jb250YWlucyggdGhpcywgcmVsYXRlZCApOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggIWluc2lkZSApIHsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5ldmVudC5oYW5kbGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50VHlwZTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICB9Cn0sCgovLyBJbiBjYXNlIG9mIGV2ZW50IGRlbGVnYXRpb24sIHdlIG9ubHkg
bmVlZCB0byByZW5hbWUgdGhlIGV2ZW50LnR5cGUsCi8vIGxpdmVIYW5kbGVyIHdpbGwgdGFrZSBj
YXJlIG9mIHRoZSByZXN0LgpkZWxlZ2F0ZSA9IGZ1bmN0aW9uKCBldmVudCApIHsKICAgICAgICBl
dmVudC50eXBlID0gZXZlbnQuZGF0YTsKICAgICAgICBqUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5
KCB0aGlzLCBhcmd1bWVudHMgKTsKfTsKCi8vIENyZWF0ZSBtb3VzZWVudGVyIGFuZCBtb3VzZWxl
YXZlIGV2ZW50cwpqUXVlcnkuZWFjaCh7CiAgICAgICAgbW91c2VlbnRlcjogIm1vdXNlb3ZlciIs
CiAgICAgICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0Igp9LCBmdW5jdGlvbiggb3JpZywgZml4ICkg
ewogICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7CiAgICAgICAgICAgICAg
ICBzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5ldmVudC5hZGQoIHRoaXMsIGZpeCwgZGF0YSAmJiBkYXRhLnNlbGVjdG9yID8gZGVsZWdhdGUg
OiB3aXRoaW5FbGVtZW50LCBvcmlnICk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
ICAgdGVhcmRvd246IGZ1bmN0aW9uKCBkYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCBmaXgsIGRhdGEgJiYgZGF0YS5zZWxlY3RvciA/IGRl
bGVnYXRlIDogd2l0aGluRWxlbWVudCApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07Cn0p
OwoKLy8gc3VibWl0IGRlbGVnYXRpb24KaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3VibWl0QnViYmxl
cyApIHsKCiAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuc3VibWl0ID0gewogICAgICAgICAg
ICAgICAgc2V0dXA6IGZ1bmN0aW9uKCBkYXRhLCBuYW1lc3BhY2VzICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQodGhpcywgImNsaWNr
LnNwZWNpYWxTdWJtaXQiLCBmdW5jdGlvbiggZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEF2b2lkIHRyaWdnZXJpbmcgZXJyb3Igb24gbm9uLWV4aXN0ZW50
IHR5cGUgYXR0cmlidXRlIGluIElFIFZNTCAoIzcwNzEpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVt
LCAiaW5wdXQiICkgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApID8gZWxlbS50
eXBlIDogIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAo
dHlwZSA9PT0gInN1Ym1pdCIgfHwgdHlwZSA9PT0gImltYWdlIikgJiYgalF1ZXJ5KCBlbGVtICku
Y2xvc2VzdCgiZm9ybSIpLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJpZ2dlciggInN1Ym1pdCIsIHRoaXMsIGFyZ3VtZW50cyApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZXZlbnQuYWRkKHRoaXMsICJrZXlwcmVzcy5zcGVjaWFsU3VibWl0IiwgZnVuY3Rpb24oIGUg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUu
dGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgfHwgalF1ZXJ5Lm5vZGVOYW1l
KCBlbGVtLCAiYnV0dG9uIiApID8gZWxlbS50eXBlIDogIiI7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAodHlwZSA9PT0gInRleHQiIHx8IHR5cGUgPT09ICJw
YXNzd29yZCIpICYmIGpRdWVyeSggZWxlbSApLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGggJiYgZS5r
ZXlDb2RlID09PSAxMyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJpZ2dlciggInN1Ym1pdCIsIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9u
KCBuYW1lc3BhY2VzICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVt
b3ZlKCB0aGlzLCAiLnNwZWNpYWxTdWJtaXQiICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
fTsKCn0KCi8vIGNoYW5nZSBkZWxlZ2F0aW9uLCBoYXBwZW5zIGhlcmUgc28gd2UgaGF2ZSBiaW5k
LgppZiAoICFqUXVlcnkuc3VwcG9ydC5jaGFuZ2VCdWJibGVzICkgewoKICAgICAgICB2YXIgY2hh
bmdlRmlsdGVycywKCiAgICAgICAgZ2V0VmFsID0gZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAg
ICAgICAgICB2YXIgdHlwZSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApID8gZWxl
bS50eXBlIDogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGVsZW0udmFsdWU7Cgog
ICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAicmFkaW8iIHx8IHR5cGUgPT09ICJjaGVja2Jv
eCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGVsZW0uY2hlY2tlZDsKCiAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAic2VsZWN0LW11bHRpcGxlIiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsID0gZWxlbS5zZWxlY3RlZEluZGV4ID4gLTEgPwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIGVsZW0ub3B0aW9ucywgZnVu
Y3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbS5zZWxlY3RlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5q
b2luKCItIikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiOwoKICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInNlbGVjdCIgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZWxlbS5zZWxlY3RlZEluZGV4OwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfSwKCiAgICAg
ICAgdGVzdENoYW5nZSA9IGZ1bmN0aW9uIHRlc3RDaGFuZ2UoIGUgKSB7CiAgICAgICAgICAgICAg
ICB2YXIgZWxlbSA9IGUudGFyZ2V0LCBkYXRhLCB2YWw7CgogICAgICAgICAgICAgICAgaWYgKCAh
cmZvcm1FbGVtcy50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgZWxlbS5yZWFkT25seSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2RhdGEiICk7CiAgICAg
ICAgICAgICAgICB2YWwgPSBnZXRWYWwoZWxlbSk7CgogICAgICAgICAgICAgICAgLy8gdGhlIGN1
cnJlbnQgZGF0YSB3aWxsIGJlIGFsc28gcmV0cmlldmVkIGJ5IGJlZm9yZWFjdGl2YXRlCiAgICAg
ICAgICAgICAgICBpZiAoIGUudHlwZSAhPT0gImZvY3Vzb3V0IiB8fCBlbGVtLnR5cGUgIT09ICJy
YWRpbyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgIl9j
aGFuZ2VfZGF0YSIsIHZhbCApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlm
ICggZGF0YSA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gZGF0YSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgg
ZGF0YSAhPSBudWxsIHx8IHZhbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS50eXBlID0g
ImNoYW5nZSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGUubGl2ZUZpcmVkID0gdW5kZWZpbmVk
OwogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgYXJndW1l
bnRzWzFdLCBlbGVtICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgalF1
ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdlID0gewogICAgICAgICAgICAgICAgZmlsdGVyczogewog
ICAgICAgICAgICAgICAgICAgICAgICBmb2N1c291dDogdGVzdENoYW5nZSwKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGJlZm9yZWRlYWN0aXZhdGU6IHRlc3RDaGFuZ2UsCgogICAgICAgICAgICAg
ICAgICAgICAgICBjbGljazogZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGVsZW0gPSBlLnRhcmdldCwgdHlwZSA9IGpRdWVyeS5ub2RlTmFtZSggZWxl
bSwgImlucHV0IiApID8gZWxlbS50eXBlIDogIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggdHlwZSA9PT0gInJhZGlvIiB8fCB0eXBlID09PSAiY2hlY2tib3giIHx8IGpR
dWVyeS5ub2RlTmFtZSggZWxlbSwgInNlbGVjdCIgKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3RDaGFuZ2UuY2FsbCggdGhpcywgZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZSBoYXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBzdWJt
aXQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2V5ZG93biB3aWxsIGJlIGNhbGxlZCBiZWZv
cmUga2V5cHJlc3MsIHdoaWNoIGlzIHVzZWQgaW4gc3VibWl0LWV2ZW50IGRlbGVnYXRpb24KICAg
ICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBlLnRhcmdldCwgdHlwZSA9IGpRdWVyeS5u
b2RlTmFtZSggZWxlbSwgImlucHV0IiApID8gZWxlbS50eXBlIDogIiI7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggKGUua2V5Q29kZSA9PT0gMTMgJiYgIWpRdWVyeS5ub2Rl
TmFtZSggZWxlbSwgInRleHRhcmVhIiApICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChlLmtleUNvZGUgPT09IDMyICYmICh0eXBlID09PSAiY2hlY2tib3giIHx8
IHR5cGUgPT09ICJyYWRpbyIpKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9PT0gInNlbGVjdC1tdWx0aXBsZSIgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0Q2hhbmdlLmNhbGwoIHRoaXMsIGUgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBCZWZvcmVhY3RpdmF0ZSBoYXBwZW5zIGFsc28gYmVmb3Jl
IHRoZSBwcmV2aW91cyBlbGVtZW50IGlzIGJsdXJyZWQKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gd2l0aCB0aGlzIGV2ZW50IHlvdSBjYW4ndCB0cmlnZ2VyIGEgY2hhbmdlIGV2ZW50LCBidXQg
eW91IGNhbiBzdG9yZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbgogICAg
ICAgICAgICAgICAgICAgICAgICBiZWZvcmVhY3RpdmF0ZTogZnVuY3Rpb24oIGUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBlLnRhcmdldDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2RhdGEi
LCBnZXRWYWwoZWxlbSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfSwKCiAgICAgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy50eXBlID09PSAiZmlsZSIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgdHlwZSBp
biBjaGFuZ2VGaWx0ZXJzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5ldmVudC5hZGQoIHRoaXMsIHR5cGUgKyAiLnNwZWNpYWxDaGFuZ2UiLCBjaGFuZ2VGaWx0ZXJz
W3R5cGVdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKTsKICAgICAgICAgICAg
ICAgIH0sCgogICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzICkg
ewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLnNw
ZWNpYWxDaGFuZ2UiICk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmZvcm1FbGVt
cy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCiAg
ICAgICAgY2hhbmdlRmlsdGVycyA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLmNoYW5nZS5maWx0ZXJz
OwoKICAgICAgICAvLyBIYW5kbGUgd2hlbiB0aGUgaW5wdXQgaXMgLmZvY3VzKCknZAogICAgICAg
IGNoYW5nZUZpbHRlcnMuZm9jdXMgPSBjaGFuZ2VGaWx0ZXJzLmJlZm9yZWFjdGl2YXRlOwp9Cgpm
dW5jdGlvbiB0cmlnZ2VyKCB0eXBlLCBlbGVtLCBhcmdzICkgewogICAgICAgIC8vIFBpZ2d5YmFj
ayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZS4KICAgICAgICAv
LyBGYWtlIG9yaWdpbmFsRXZlbnQgdG8gYXZvaWQgZG9ub3IncyBzdG9wUHJvcGFnYXRpb24sIGJ1
dCBpZiB0aGUKICAgICAgICAvLyBzaW11bGF0ZWQgZXZlbnQgcHJldmVudHMgZGVmYXVsdCB0aGVu
IHdlIGRvIHRoZSBzYW1lIG9uIHRoZSBkb25vci4KICAgICAgICAvLyBEb24ndCBwYXNzIGFyZ3Mg
b3IgcmVtZW1iZXIgbGl2ZUZpcmVkOyB0aGV5IGFwcGx5IHRvIHRoZSBkb25vciBldmVudC4KICAg
ICAgICB2YXIgZXZlbnQgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgYXJnc1sgMCBdICk7CiAgICAgICAg
ZXZlbnQudHlwZSA9IHR5cGU7CiAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudCA9IHt9OwogICAg
ICAgIGV2ZW50LmxpdmVGaXJlZCA9IHVuZGVmaW5lZDsKICAgICAgICBqUXVlcnkuZXZlbnQuaGFu
ZGxlLmNhbGwoIGVsZW0sIGV2ZW50ICk7CiAgICAgICAgaWYgKCBldmVudC5pc0RlZmF1bHRQcmV2
ZW50ZWQoKSApIHsKICAgICAgICAgICAgICAgIGFyZ3NbIDAgXS5wcmV2ZW50RGVmYXVsdCgpOwog
ICAgICAgIH0KfQoKLy8gQ3JlYXRlICJidWJibGluZyIgZm9jdXMgYW5kIGJsdXIgZXZlbnRzCmlm
ICggIWpRdWVyeS5zdXBwb3J0LmZvY3VzaW5CdWJibGVzICkgewogICAgICAgIGpRdWVyeS5lYWNo
KHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywg
Zml4ICkgewoKICAgICAgICAgICAgICAgIC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFu
ZGxlciB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXQKICAgICAgICAgICAgICAg
IHZhciBhdHRhY2hlcyA9IDA7CgogICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxb
IGZpeCBdID0gewogICAgICAgICAgICAgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhdHRhY2hlcysrID09PSAwICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAg
ICAgdGVhcmRvd246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggLS1hdHRhY2hlcyA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRy
dWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFu
ZGxlciggZG9ub3IgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbm9yIGV2ZW50IGlz
IGFsd2F5cyBhIG5hdGl2ZSBvbmU7IGZpeCBpdCBhbmQgc3dpdGNoIGl0cyB0eXBlLgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBMZXQgZm9jdXNpbi9vdXQgaGFuZGxlciBjYW5jZWwgdGhlIGRv
bm9yIGZvY3VzL2JsdXIgZXZlbnQuCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0galF1
ZXJ5LmV2ZW50LmZpeCggZG9ub3IgKTsKICAgICAgICAgICAgICAgICAgICAgICAgZS50eXBlID0g
Zml4OwogICAgICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQgPSB7fTsKICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGUudGFyZ2V0
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25vci5wcmV2ZW50RGVmYXVsdCgp
OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSk7
Cn0KCmpRdWVyeS5lYWNoKFsiYmluZCIsICJvbmUiXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CiAg
ICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdHlwZSwgZGF0YSwgZm4gKSB7CiAg
ICAgICAgICAgICAgICB2YXIgaGFuZGxlcjsKCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgb2Jq
ZWN0IGxpdGVyYWxzCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlID09PSAib2JqZWN0
IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiB0eXBlICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbIG5hbWUgXShrZXksIGRhdGEsIHR5
cGVba2V5XSwgZm4pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlm
ICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMiB8fCBkYXRhID09PSBmYWxzZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgZm4gPSBkYXRhOwogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0g
dW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggbmFtZSA9
PT0gIm9uZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbigg
ZXZlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICku
dW5iaW5kKCBldmVudCwgaGFuZGxlciApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuZ3VpZCA9IGZuLmd1aWQgfHwg
alF1ZXJ5Lmd1aWQrKzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXIgPSBmbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBp
ZiAoIHR5cGUgPT09ICJ1bmxvYWQiICYmIG5hbWUgIT09ICJvbmUiICkgewogICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLm9uZSggdHlwZSwgZGF0YSwgZm4gKTsKCiAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXZlbnQuYWRkKCB0aGlzW2ldLCB0eXBlLCBoYW5kbGVyLCBkYXRhICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKICAgICAgICB9Owp9KTsKCmpRdWVyeS5mbi5leHRlbmQoewogICAgICAgIHVuYmlu
ZDogZnVuY3Rpb24oIHR5cGUsIGZuICkgewogICAgICAgICAgICAgICAgLy8gSGFuZGxlIG9iamVj
dCBsaXRlcmFscwogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSA9PT0gIm9iamVjdCIg
JiYgIXR5cGUucHJldmVudERlZmF1bHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IHZhciBrZXkgaW4gdHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnVuYmluZChrZXksIHR5cGVba2V5XSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzW2ldLCB0eXBlLCBmbiApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxl
Y3RvciwgdHlwZXMsIGRhdGEsIGZuICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGl2
ZSggdHlwZXMsIGRhdGEsIGZuLCBzZWxlY3RvciApOwogICAgICAgIH0sCgogICAgICAgIHVuZGVs
ZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkgewogICAgICAgICAgICAgICAg
aWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy51bmJpbmQoICJsaXZlIiApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRpZSggdHlwZXMsIG51bGwsIGZuLCBz
ZWxlY3RvciApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHRyaWdnZXI6
IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdn
ZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgog
ICAgICAgIHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKICAgICAgICAg
ICAgICAgIGlmICggdGhpc1swXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzWzBdLCB0cnVlICk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbiggZm4gKSB7CiAg
ICAgICAgICAgICAgICAvLyBTYXZlIHJlZmVyZW5jZSB0byBhcmd1bWVudHMgZm9yIGFjY2VzcyBp
biBjbG9zdXJlCiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cywKICAgICAgICAg
ICAgICAgICAgICAgICAgZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKywKICAgICAgICAg
ICAgICAgICAgICAgICAgaSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXIgPSBm
dW5jdGlvbiggZXZlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmln
dXJlIG91dCB3aGljaCBmdW5jdGlvbiB0byBleGVjdXRlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGxhc3RUb2dnbGUgPSAoIGpRdWVyeS5kYXRhKCB0aGlzLCAibGFzdFRvZ2ds
ZSIgKyBmbi5ndWlkICkgfHwgMCApICUgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZGF0YSggdGhpcywgImxhc3RUb2dnbGUiICsgZm4uZ3VpZCwgbGFzdFRvZ2dsZSAr
IDEgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
Y2xpY2tzIHN0b3AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZXhlY3V0
ZSB0aGUgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJn
c1sgbGFzdFRvZ2dsZSBdLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSB8fCBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBsaW5rIGFsbCB0aGUgZnVu
Y3Rpb25zLCBzbyBhbnkgb2YgdGhlbSBjYW4gdW5iaW5kIHRoaXMgY2xpY2sgaGFuZGxlcgogICAg
ICAgICAgICAgICAgdG9nZ2xlci5ndWlkID0gZ3VpZDsKICAgICAgICAgICAgICAgIHdoaWxlICgg
aSA8IGFyZ3MubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICBhcmdzWyBpKysgXS5n
dWlkID0gZ3VpZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5jbGljayggdG9nZ2xlciApOwogICAgICAgIH0sCgogICAgICAgIGhvdmVyOiBmdW5jdGlvbigg
Zm5PdmVyLCBmbk91dCApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlZW50ZXIo
IGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApOwogICAgICAgIH0KfSk7Cgp2
YXIgbGl2ZU1hcCA9IHsKICAgICAgICBmb2N1czogImZvY3VzaW4iLAogICAgICAgIGJsdXI6ICJm
b2N1c291dCIsCiAgICAgICAgbW91c2VlbnRlcjogIm1vdXNlb3ZlciIsCiAgICAgICAgbW91c2Vs
ZWF2ZTogIm1vdXNlb3V0Igp9OwoKalF1ZXJ5LmVhY2goWyJsaXZlIiwgImRpZSJdLCBmdW5jdGlv
biggaSwgbmFtZSApIHsKICAgICAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB0eXBl
cywgZGF0YSwgZm4sIG9yaWdTZWxlY3RvciAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKICAg
ICAgICAgICAgICAgIHZhciB0eXBlLCBpID0gMCwgbWF0Y2gsIG5hbWVzcGFjZXMsIHByZVR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gb3JpZ1NlbGVjdG9yIHx8IHRoaXMu
c2VsZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBvcmlnU2VsZWN0b3Ig
PyB0aGlzIDogalF1ZXJ5KCB0aGlzLmNvbnRleHQgKTsKCiAgICAgICAgICAgICAgICBpZiAoIHR5
cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgJiYgIXR5cGVzLnByZXZlbnREZWZhdWx0ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIga2V5IGluIHR5cGVzICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbIG5hbWUgXSgga2V5LCBkYXRhLCB0eXBlc1tr
ZXldLCBzZWxlY3RvciApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBpZiAoIG5hbWUgPT09ICJkaWUiICYmICF0eXBlcyAmJgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3JpZ1NlbGVjdG9yICYmIG9yaWdTZWxlY3Rvci5jaGFyQXQoMCkg
PT09ICIuIiApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQudW5iaW5kKCBvcmln
U2VsZWN0b3IgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGF0YSA9PT0gZmFsc2UgfHwgalF1ZXJ5
LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBkYXRh
IHx8IHJldHVybkZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVk
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHR5cGVzID0gKHR5cGVzIHx8ICIi
KS5zcGxpdCgiICIpOwoKICAgICAgICAgICAgICAgIHdoaWxlICggKHR5cGUgPSB0eXBlc1sgaSsr
IF0pICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcm5hbWVzcGFj
ZXMuZXhlYyggdHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gIiI7
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoICkgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gbWF0Y2hbMF07CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUucmVwbGFjZSggcm5hbWVzcGFjZXMsICIiICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlw
ZSA9PT0gImhvdmVyIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5w
dXNoKCAibW91c2VlbnRlciIgKyBuYW1lc3BhY2VzLCAibW91c2VsZWF2ZSIgKyBuYW1lc3BhY2Vz
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHByZVR5cGUgPSB0eXBlOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsaXZlTWFwWyB0eXBlIF0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMucHVzaCggbGl2ZU1hcFsgdHlwZSBdICsgbmFt
ZXNwYWNlcyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlICsg
bmFtZXNwYWNlczsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IChsaXZlTWFwWyB0eXBlIF0gfHwgdHlwZSkgKyBu
YW1lc3BhY2VzOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG5hbWUgPT09ICJsaXZlIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBiaW5kIGxpdmUgaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIHZhciBqID0gMCwgbCA9IGNvbnRleHQubGVuZ3RoOyBqIDwgbDsgaisrICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggY29u
dGV4dFtqXSwgImxpdmUuIiArIGxpdmVDb252ZXJ0KCB0eXBlLCBzZWxlY3RvciApLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGRhdGE6IGRhdGEsIHNl
bGVjdG9yOiBzZWxlY3RvciwgaGFuZGxlcjogZm4sIG9yaWdUeXBlOiB0eXBlLCBvcmlnSGFuZGxl
cjogZm4sIHByZVR5cGU6IHByZVR5cGUgfSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdW5iaW5kIGxpdmUgaGFuZGxlcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQudW5iaW5kKCAibGl2ZS4iICsgbGl2ZUNvbnZlcnQoIHR5cGUs
IHNlbGVjdG9yICksIGZuICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9Owp9KTsKCmZ1bmN0
aW9uIGxpdmVIYW5kbGVyKCBldmVudCApIHsKICAgICAgICB2YXIgc3RvcCwgbWF4TGV2ZWwsIHJl
bGF0ZWQsIG1hdGNoLCBoYW5kbGVPYmosIGVsZW0sIGosIGksIGwsIGRhdGEsIGNsb3NlLCBuYW1l
c3BhY2UsIHJldCwKICAgICAgICAgICAgICAgIGVsZW1zID0gW10sCiAgICAgICAgICAgICAgICBz
ZWxlY3RvcnMgPSBbXSwKICAgICAgICAgICAgICAgIGV2ZW50cyA9IGpRdWVyeS5fZGF0YSggdGhp
cywgImV2ZW50cyIgKTsKCiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGF2b2lkIG5vbi1sZWZ0LWNs
aWNrIGJ1YmJsaW5nIGluIEZpcmVmb3ggKCMzODYxKSBhbmQgZGlzYWJsZWQgZWxlbWVudHMgaW4g
SUUgKCM2OTExKQogICAgICAgIGlmICggZXZlbnQubGl2ZUZpcmVkID09PSB0aGlzIHx8ICFldmVu
dHMgfHwgIWV2ZW50cy5saXZlIHx8IGV2ZW50LnRhcmdldC5kaXNhYmxlZCB8fCBldmVudC5idXR0
b24gJiYgZXZlbnQudHlwZSA9PT0gImNsaWNrIiApIHsKICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICB9CgogICAgICAgIGlmICggZXZlbnQubmFtZXNwYWNlICkgewogICAgICAgICAgICAg
ICAgbmFtZXNwYWNlID0gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBldmVudC5uYW1lc3BhY2Uuc3Bs
aXQoIi4iKS5qb2luKCJcXC4oPzouKlxcLik/IikgKyAiKFxcLnwkKSIpOwogICAgICAgIH0KCiAg
ICAgICAgZXZlbnQubGl2ZUZpcmVkID0gdGhpczsKCiAgICAgICAgdmFyIGxpdmUgPSBldmVudHMu
bGl2ZS5zbGljZSgwKTsKCiAgICAgICAgZm9yICggaiA9IDA7IGogPCBsaXZlLmxlbmd0aDsgaisr
ICkgewogICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gbGl2ZVtqXTsKCiAgICAgICAgICAgICAg
ICBpZiAoIGhhbmRsZU9iai5vcmlnVHlwZS5yZXBsYWNlKCBybmFtZXNwYWNlcywgIiIgKSA9PT0g
ZXZlbnQudHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLnB1c2goIGhh
bmRsZU9iai5zZWxlY3RvciApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGxpdmUuc3BsaWNlKCBqLS0sIDEgKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9CgogICAgICAgIG1hdGNoID0galF1ZXJ5KCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCBz
ZWxlY3RvcnMsIGV2ZW50LmN1cnJlbnRUYXJnZXQgKTsKCiAgICAgICAgZm9yICggaSA9IDAsIGwg
PSBtYXRjaC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICBjbG9zZSA9IG1h
dGNoW2ldOwoKICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgbGl2ZS5sZW5ndGg7IGor
KyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gbGl2ZVtqXTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggY2xvc2Uuc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxl
Y3RvciAmJiAoIW5hbWVzcGFjZSB8fCBuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFj
ZSApKSAmJiAhY2xvc2UuZWxlbS5kaXNhYmxlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtID0gY2xvc2UuZWxlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWxhdGVkID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhv
c2UgdHdvIGV2ZW50cyByZXF1aXJlIGFkZGl0aW9uYWwgY2hlY2tpbmcKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZU9iai5wcmVUeXBlID09PSAibW91c2VlbnRlciIg
fHwgaGFuZGxlT2JqLnByZVR5cGUgPT09ICJtb3VzZWxlYXZlIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoucHJlVHlwZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgPSBqUXVlcnko
IGV2ZW50LnJlbGF0ZWRUYXJnZXQgKS5jbG9zZXN0KCBoYW5kbGVPYmouc2VsZWN0b3IgKVswXTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbm90
IHRvIGFjY2lkZW50YWxseSBtYXRjaCBhIGNoaWxkIGVsZW1lbnQgd2l0aCB0aGUgc2FtZSBzZWxl
Y3RvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZWxhdGVk
ICYmIGpRdWVyeS5jb250YWlucyggZWxlbSwgcmVsYXRlZCApICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkID0gZWxlbTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJlbGF0ZWQg
fHwgcmVsYXRlZCAhPT0gZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1zLnB1c2goeyBlbGVtOiBlbGVtLCBoYW5kbGVPYmo6IGhhbmRsZU9iaiwgbGV2
ZWw6IGNsb3NlLmxldmVsIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAg
ICAgZm9yICggaSA9IDAsIGwgPSBlbGVtcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAg
ICAgICAgICBtYXRjaCA9IGVsZW1zW2ldOwoKICAgICAgICAgICAgICAgIGlmICggbWF4TGV2ZWwg
JiYgbWF0Y2gubGV2ZWwgPiBtYXhMZXZlbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdl
dCA9IG1hdGNoLmVsZW07CiAgICAgICAgICAgICAgICBldmVudC5kYXRhID0gbWF0Y2guaGFuZGxl
T2JqLmRhdGE7CiAgICAgICAgICAgICAgICBldmVudC5oYW5kbGVPYmogPSBtYXRjaC5oYW5kbGVP
Ymo7CgogICAgICAgICAgICAgICAgcmV0ID0gbWF0Y2guaGFuZGxlT2JqLm9yaWdIYW5kbGVyLmFw
cGx5KCBtYXRjaC5lbGVtLCBhcmd1bWVudHMgKTsKCiAgICAgICAgICAgICAgICBpZiAoIHJldCA9
PT0gZmFsc2UgfHwgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgbWF4TGV2ZWwgPSBtYXRjaC5sZXZlbDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcmV0ID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdG9wID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RvcDsK
fQoKZnVuY3Rpb24gbGl2ZUNvbnZlcnQoIHR5cGUsIHNlbGVjdG9yICkgewogICAgICAgIHJldHVy
biAodHlwZSAmJiB0eXBlICE9PSAiKiIgPyB0eXBlICsgIi4iIDogIiIpICsgc2VsZWN0b3IucmVw
bGFjZShycGVyaW9kLCAiYCIpLnJlcGxhY2UocnNwYWNlcywgIiYiKTsKfQoKalF1ZXJ5LmVhY2go
ICgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQg
Y2xpY2sgZGJsY2xpY2sgIiArCiAgICAgICAgIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBt
b3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlICIgKwogICAgICAgICJjaGFu
Z2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIikuc3BsaXQoIiAi
KSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CgogICAgICAgIC8vIEhhbmRsZSBldmVudCBiaW5kaW5n
CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7CiAgICAg
ICAgICAgICAgICBpZiAoIGZuID09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZu
ID0gZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG51bGw7CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID8KICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kKCBuYW1lLCBkYXRhLCBmbiApIDoKICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCBuYW1lICk7CiAgICAgICAgfTsKCiAgICAg
ICAgaWYgKCBqUXVlcnkuYXR0ckZuICkgewogICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHJGblsg
bmFtZSBdID0gdHJ1ZTsKICAgICAgICB9Cn0pOwoKCgovKiEKICogU2l6emxlIENTUyBTZWxlY3Rv
ciBFbmdpbmUKICogIENvcHlyaWdodCAyMDExLCBUaGUgRG9qbyBGb3VuZGF0aW9uCiAqICBSZWxl
YXNlZCB1bmRlciB0aGUgTUlULCBCU0QsIGFuZCBHUEwgTGljZW5zZXMuCiAqICBNb3JlIGluZm9y
bWF0aW9uOiBodHRwOi8vc2l6emxlanMuY29tLwogKi8KKGZ1bmN0aW9uKCl7Cgp2YXIgY2h1bmtl
ciA9IC8oKD86XCgoPzpcKFteKCldK1wpfFteKCldKykrXCl8XFsoPzpcW1teXFtcXV0qXF18Wyci
XVteJyJdKlsnIl18W15cW1xdJyJdKykrXF18XFwufFteID4rfiwoXFtcXF0rKSt8Wz4rfl0pKFxz
KixccyopPygoPzoufFxyfFxuKSopL2csCiAgICAgICAgZG9uZSA9IDAsCiAgICAgICAgdG9TdHJp
bmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLAogICAgICAgIGhhc0R1cGxpY2F0ZSA9IGZh
bHNlLAogICAgICAgIGJhc2VIYXNEdXBsaWNhdGUgPSB0cnVlLAogICAgICAgIHJCYWNrc2xhc2gg
PSAvXFwvZywKICAgICAgICByTm9uV29yZCA9IC9cVy87CgovLyBIZXJlIHdlIGNoZWNrIGlmIHRo
ZSBKYXZhU2NyaXB0IGVuZ2luZSBpcyB1c2luZyBzb21lIHNvcnQgb2YKLy8gb3B0aW1pemF0aW9u
IHdoZXJlIGl0IGRvZXMgbm90IGFsd2F5cyBjYWxsIG91ciBjb21wYXJpc2lvbgovLyBmdW5jdGlv
bi4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgZGlzY2FyZCB0aGUgaGFzRHVwbGljYXRlIHZhbHVlLgov
LyAgIFRodXMgZmFyIHRoYXQgaW5jbHVkZXMgR29vZ2xlIENocm9tZS4KWzAsIDBdLnNvcnQoZnVu
Y3Rpb24oKSB7CiAgICAgICAgYmFzZUhhc0R1cGxpY2F0ZSA9IGZhbHNlOwogICAgICAgIHJldHVy
biAwOwp9KTsKCnZhciBTaXp6bGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3Vs
dHMsIHNlZWQgKSB7CiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107CiAgICAgICAgY29u
dGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CgogICAgICAgIHZhciBvcmlnQ29udGV4dCA9IGNv
bnRleHQ7CgogICAgICAgIGlmICggY29udGV4dC5ub2RlVHlwZSAhPT0gMSAmJiBjb250ZXh0Lm5v
ZGVUeXBlICE9PSA5ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAg
ICAgICAKICAgICAgICBpZiAoICFzZWxlY3RvciB8fCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJp
bmciICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgICAgfQoKICAgICAg
ICB2YXIgbSwgc2V0LCBjaGVja1NldCwgZXh0cmEsIHJldCwgY3VyLCBwb3AsIGksCiAgICAgICAg
ICAgICAgICBwcnVuZSA9IHRydWUsCiAgICAgICAgICAgICAgICBjb250ZXh0WE1MID0gU2l6emxl
LmlzWE1MKCBjb250ZXh0ICksCiAgICAgICAgICAgICAgICBwYXJ0cyA9IFtdLAogICAgICAgICAg
ICAgICAgc29GYXIgPSBzZWxlY3RvcjsKICAgICAgICAKICAgICAgICAvLyBSZXNldCB0aGUgcG9z
aXRpb24gb2YgdGhlIGNodW5rZXIgcmVnZXhwIChzdGFydCBmcm9tIGhlYWQpCiAgICAgICAgZG8g
ewogICAgICAgICAgICAgICAgY2h1bmtlci5leGVjKCAiIiApOwogICAgICAgICAgICAgICAgbSA9
IGNodW5rZXIuZXhlYyggc29GYXIgKTsKCiAgICAgICAgICAgICAgICBpZiAoIG0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHNvRmFyID0gbVszXTsKICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKCBtWzFdICk7CiAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBtWzJdICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhID0gbVszXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg
IH0gd2hpbGUgKCBtICk7CgogICAgICAgIGlmICggcGFydHMubGVuZ3RoID4gMSAmJiBvcmlnUE9T
LmV4ZWMoIHNlbGVjdG9yICkgKSB7CgogICAgICAgICAgICAgICAgaWYgKCBwYXJ0cy5sZW5ndGgg
PT09IDIgJiYgRXhwci5yZWxhdGl2ZVsgcGFydHNbMF0gXSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0ID0gcG9zUHJvY2VzcyggcGFydHNbMF0gKyBwYXJ0c1sxXSwgY29udGV4dCApOwoK
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IEV4
cHIucmVsYXRpdmVbIHBhcnRzWzBdIF0gPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFsgY29udGV4dCBdIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUoIHBh
cnRzLnNoaWZ0KCksIGNvbnRleHQgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgg
cGFydHMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9y
ID0gcGFydHMuc2hpZnQoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBF
eHByLnJlbGF0aXZlWyBzZWxlY3RvciBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0b3IgKz0gcGFydHMuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gcG9zUHJvY2Vzcyggc2VsZWN0b3IsIHNldCAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBUYWtlIGEgc2hvcnRjdXQgYW5kIHNldCB0aGUgY29u
dGV4dCBpZiB0aGUgcm9vdCBzZWxlY3RvciBpcyBhbiBJRAogICAgICAgICAgICAgICAgLy8gKGJ1
dCBub3QgaWYgaXQnbGwgYmUgZmFzdGVyIGlmIHRoZSBpbm5lciBzZWxlY3RvciBpcyBhbiBJRCkK
ICAgICAgICAgICAgICAgIGlmICggIXNlZWQgJiYgcGFydHMubGVuZ3RoID4gMSAmJiBjb250ZXh0
Lm5vZGVUeXBlID09PSA5ICYmICFjb250ZXh0WE1MICYmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRXhwci5tYXRjaC5JRC50ZXN0KHBhcnRzWzBdKSAmJiAhRXhwci5tYXRjaC5JRC50
ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAg
IHJldCA9IFNpenpsZS5maW5kKCBwYXJ0cy5zaGlmdCgpLCBjb250ZXh0LCBjb250ZXh0WE1MICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSByZXQuZXhwciA/CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcmV0LmV4cHIsIHJldC5zZXQgKVsw
XSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNldFswXTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldCA9IHNlZWQgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
ZXhwcjogcGFydHMucG9wKCksIHNldDogbWFrZUFycmF5KHNlZWQpIH0gOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNpenpsZS5maW5kKCBwYXJ0cy5wb3AoKSwgcGFydHMubGVuZ3Ro
ID09PSAxICYmIChwYXJ0c1swXSA9PT0gIn4iIHx8IHBhcnRzWzBdID09PSAiKyIpICYmIGNvbnRl
eHQucGFyZW50Tm9kZSA/IGNvbnRleHQucGFyZW50Tm9kZSA6IGNvbnRleHQsIGNvbnRleHRYTUwg
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IHJldC5leHByID8KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZmlsdGVyKCByZXQuZXhwciwgcmV0LnNldCApIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuc2V0OwoKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBwYXJ0cy5sZW5ndGggPiAwICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoZWNrU2V0ID0gbWFrZUFycmF5KCBzZXQgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmUgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCBwYXJ0cy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyID0gcGFydHMucG9wKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0g
Y3VyOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFFeHByLnJlbGF0aXZl
WyBjdXIgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9
ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3AgPSBwYXJ0cy5wb3AoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcG9wID09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwb3AgPSBjb250ZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwci5yZWxhdGl2ZVsgY3VyIF0oIGNoZWNr
U2V0LCBwb3AsIGNvbnRleHRYTUwgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU2V0ID0gcGFy
dHMgPSBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggIWNoZWNr
U2V0ICkgewogICAgICAgICAgICAgICAgY2hlY2tTZXQgPSBzZXQ7CiAgICAgICAgfQoKICAgICAg
ICBpZiAoICFjaGVja1NldCApIHsKICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggY3VyIHx8
IHNlbGVjdG9yICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIHRvU3RyaW5nLmNhbGwoY2hlY2tT
ZXQpID09PSAiW29iamVjdCBBcnJheV0iICkgewogICAgICAgICAgICAgICAgaWYgKCAhcHJ1bmUg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaC5hcHBseSggcmVzdWx0cywg
Y2hlY2tTZXQgKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb250ZXh0ICYmIGNvbnRl
eHQubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAw
OyBjaGVja1NldFtpXSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjaGVja1NldFtpXSAmJiAoY2hlY2tTZXRbaV0gPT09IHRydWUgfHwgY2hlY2tT
ZXRbaV0ubm9kZVR5cGUgPT09IDEgJiYgU2l6emxlLmNvbnRhaW5zKGNvbnRleHQsIGNoZWNrU2V0
W2ldKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRz
LnB1c2goIHNldFtpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBjaGVja1NldFtpXSAhPSBudWxsOyBpKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjaGVja1NldFtpXSAmJiBjaGVja1Nl
dFtpXS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdHMucHVzaCggc2V0W2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBtYWtlQXJyYXkoIGNoZWNrU2V0LCByZXN1bHRz
ICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIGV4dHJhICkgewogICAgICAgICAgICAgICAgU2l6
emxlKCBleHRyYSwgb3JpZ0NvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTsKICAgICAgICAgICAgICAg
IFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4g
cmVzdWx0czsKfTsKClNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7CiAg
ICAgICAgaWYgKCBzb3J0T3JkZXIgKSB7CiAgICAgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSBi
YXNlSGFzRHVwbGljYXRlOwogICAgICAgICAgICAgICAgcmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIg
KTsKCiAgICAgICAgICAgICAgICBpZiAoIGhhc0R1cGxpY2F0ZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdHNbaV0gPT09IHJlc3VsdHNb
IGkgLSAxIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRzLnNwbGljZSggaS0tLCAxICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgICByZXR1cm4gcmVzdWx0czsKfTsKClNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIs
IHNldCApIHsKICAgICAgICByZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBzZXQgKTsK
fTsKClNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggbm9kZSwgZXhwciApIHsKICAg
ICAgICByZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBbbm9kZV0gKS5sZW5ndGggPiAw
Owp9OwoKU2l6emxlLmZpbmQgPSBmdW5jdGlvbiggZXhwciwgY29udGV4dCwgaXNYTUwgKSB7CiAg
ICAgICAgdmFyIHNldDsKCiAgICAgICAgaWYgKCAhZXhwciApIHsKICAgICAgICAgICAgICAgIHJl
dHVybiBbXTsKICAgICAgICB9CgogICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IEV4cHIub3Jk
ZXIubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoLAogICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gRXhwci5vcmRlcltpXTsKICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgaWYgKCAobWF0Y2ggPSBFeHByLmxlZnRNYXRjaFsgdHlwZSBdLmV4
ZWMoIGV4cHIgKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gbWF0Y2hb
MV07CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLnNwbGljZSggMSwgMSApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBsZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgIT09
ICJcXCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSAobWF0
Y2hbMV0gfHwgIiIpLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0ID0gRXhwci5maW5kWyB0eXBlIF0oIG1hdGNoLCBjb250ZXh0LCBp
c1hNTCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNldCAhPSBudWxs
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IGV4cHIu
cmVwbGFjZSggRXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoK
ICAgICAgICBpZiAoICFzZXQgKSB7CiAgICAgICAgICAgICAgICBzZXQgPSB0eXBlb2YgY29udGV4
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgPwogICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKSA6CiAgICAgICAgICAg
ICAgICAgICAgICAgIFtdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsgc2V0OiBzZXQsIGV4
cHI6IGV4cHIgfTsKfTsKClNpenpsZS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgc2V0LCBpbnBs
YWNlLCBub3QgKSB7CiAgICAgICAgdmFyIG1hdGNoLCBhbnlGb3VuZCwKICAgICAgICAgICAgICAg
IG9sZCA9IGV4cHIsCiAgICAgICAgICAgICAgICByZXN1bHQgPSBbXSwKICAgICAgICAgICAgICAg
IGN1ckxvb3AgPSBzZXQsCiAgICAgICAgICAgICAgICBpc1hNTEZpbHRlciA9IHNldCAmJiBzZXRb
MF0gJiYgU2l6emxlLmlzWE1MKCBzZXRbMF0gKTsKCiAgICAgICAgd2hpbGUgKCBleHByICYmIHNl
dC5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgdHlwZSBpbiBFeHByLmZpbHRl
ciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAobWF0Y2ggPSBFeHByLmxlZnRNYXRj
aFsgdHlwZSBdLmV4ZWMoIGV4cHIgKSkgIT0gbnVsbCAmJiBtYXRjaFsyXSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQsIGl0ZW0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBFeHByLmZpbHRlclsgdHlwZSBdLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG1hdGNoWzFdOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IGZhbHNlOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC5zcGxpY2UoMSwxKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBsZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgPT09
ICJcXCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY3VyTG9vcCA9PT0gcmVzdWx0ICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW107CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIEV4cHIu
cHJlRmlsdGVyWyB0eXBlIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaCA9IEV4cHIucHJlRmlsdGVyWyB0eXBlIF0oIG1hdGNoLCBjdXJMb29wLCBpbnBs
YWNlLCByZXN1bHQsIG5vdCwgaXNYTUxGaWx0ZXIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYW55Rm91bmQgPSBmb3VuZCA9IHRydWU7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2ggPT09IHRy
dWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMDsgKGl0ZW0gPSBjdXJMb29wW2ldKSAhPSBudWxsOyBpKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXRlbSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IGZpbHRlciggaXRlbSwgbWF0Y2gsIGksIGN1ckxvb3AgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFzcyA9IG5v
dCBeICEhZm91bmQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaW5wbGFjZSAmJiBmb3VuZCAhPSBudWxsICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBwYXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IHRydWU7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyTG9vcFtpXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBwYXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goIGl0ZW0gKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueUZvdW5kID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Zm91bmQgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIWlucGxhY2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1ckxvb3AgPSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwciA9IGV4cHIucmVwbGFjZSggRXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWFueUZvdW5kICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gSW1wcm9wZXIgZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgaWYgKCBl
eHByID09PSBvbGQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYW55Rm91bmQgPT0g
bnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIGV4
cHIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICBvbGQgPSBleHByOwogICAgICAgIH0KCiAgICAgICAg
cmV0dXJuIGN1ckxvb3A7Cn07CgpTaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgewogICAg
ICAgIHRocm93ICJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiICsgbXNn
Owp9OwoKdmFyIEV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0gewogICAgICAgIG9yZGVyOiBbICJJ
RCIsICJOQU1FIiwgIlRBRyIgXSwKCiAgICAgICAgbWF0Y2g6IHsKICAgICAgICAgICAgICAgIElE
OiAvIygoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sCiAgICAgICAgICAgICAgICBDTEFT
UzogL1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLywKICAgICAgICAgICAgICAgIE5B
TUU6IC9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLywK
ICAgICAgICAgICAgICAgIEFUVFI6IC9cW1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikr
KVxzKig/OihcUz89KVxzKig/OihbJyJdKSguKj8pXDN8KCM/KD86W1x3XHUwMGMwLVx1RkZGRlwt
XXxcXC4pKil8KXwpXHMqXF0vLAogICAgICAgICAgICAgICAgVEFHOiAvXigoPzpbXHdcdTAwYzAt
XHVGRkZGXCpcLV18XFwuKSspLywKICAgICAgICAgICAgICAgIENISUxEOiAvOihvbmx5fG50aHxs
YXN0fGZpcnN0KS1jaGlsZCg/OlwoXHMqKGV2ZW58b2RkfCg/OlsrXC1dP1xkK3woPzpbK1wtXT9c
ZCopP25ccyooPzpbK1wtXVxzKlxkKyk/KSlccypcKSk/LywKICAgICAgICAgICAgICAgIFBPUzog
LzoobnRofGVxfGd0fGx0fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXlwt
XXwkKS8sCiAgICAgICAgICAgICAgICBQU0VVRE86IC86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18
XFwuKSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vCiAgICAg
ICAgfSwKCiAgICAgICAgbGVmdE1hdGNoOiB7fSwKCiAgICAgICAgYXR0ck1hcDogewogICAgICAg
ICAgICAgICAgImNsYXNzIjogImNsYXNzTmFtZSIsCiAgICAgICAgICAgICAgICAiZm9yIjogImh0
bWxGb3IiCiAgICAgICAgfSwKCiAgICAgICAgYXR0ckhhbmRsZTogewogICAgICAgICAgICAgICAg
aHJlZjogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtLmdldEF0dHJpYnV0ZSggImhyZWYiICk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAg
ICAgICAgdHlwZTogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUiICk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgfSwKCiAgICAgICAgcmVsYXRpdmU6IHsKICAgICAgICAgICAgICAgICIrIjogZnVuY3Rpb24o
Y2hlY2tTZXQsIHBhcnQpewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNQYXJ0U3RyID0g
dHlwZW9mIHBhcnQgPT09ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlzVGFnID0gaXNQYXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNQYXJ0U3RyTm90VGFnID0gaXNQYXJ0U3RyICYmICFpc1Rh
ZzsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNUYWcgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ID0gY2hlY2tTZXQubGVuZ3RoLCBlbGVtOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBjaGVja1NldFtpXSkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbS5wcmV2aW91
c1NpYmxpbmcpICYmIGVsZW0ubm9kZVR5cGUgIT09IDEgKSB7fQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU2V0W2ldID0gaXNQYXJ0U3RyTm90VGFnIHx8IGVs
ZW0gJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBwYXJ0ID8KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSB8fCBmYWxzZSA6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPT09IHBhcnQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzUGFydFN0ck5vdFRhZyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZmlsdGVyKCBwYXJ0LCBjaGVja1Nl
dCwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgICI+IjogZnVuY3Rpb24oIGNoZWNrU2V0LCBwYXJ0ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpc1BhcnRTdHIgPSB0eXBlb2YgcGFydCA9PT0gInN0cmluZyIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9
IGNoZWNrU2V0Lmxlbmd0aDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNQYXJ0U3Ry
ICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbSA9IGNoZWNrU2V0W2ldOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0g
PSBwYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGFydCA/IHBhcmVudCA6IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNoZWNrU2V0W2ldOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0g
PSBpc1BhcnRTdHIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlID09PSBwYXJ0Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBp
c1BhcnRTdHIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6
bGUuZmlsdGVyKCBwYXJ0LCBjaGVja1NldCwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwK
CiAgICAgICAgICAgICAgICAiIjogZnVuY3Rpb24oY2hlY2tTZXQsIHBhcnQsIGlzWE1MKXsKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVDaGVjaywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb25lTmFtZSA9IGRvbmUrKywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGVja0ZuID0gZGlyQ2hlY2s7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5
cGVvZiBwYXJ0ID09PSAic3RyaW5nIiAmJiAhck5vbldvcmQudGVzdCggcGFydCApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnRvTG93ZXJDYXNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUNoZWNrID0gcGFydDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZuID0gZGlyTm9kZUNoZWNrOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZuKCAicGFyZW50
Tm9kZSIsIHBhcnQsIGRvbmVOYW1lLCBjaGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCApOwogICAg
ICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAifiI6IGZ1bmN0aW9uKCBjaGVja1NldCwg
cGFydCwgaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlQ2hlY2ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZU5hbWUgPSBkb25lKyssCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGbiA9IGRpckNoZWNrOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0eXBlb2YgcGFydCA9PT0gInN0cmluZyIgJiYgIXJOb25Xb3JkLnRl
c3QoIHBhcnQgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFy
dC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVDaGVj
ayA9IHBhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGbiA9IGRpck5v
ZGVDaGVjazsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgY2hlY2tGbiggInByZXZpb3VzU2libGluZyIsIHBhcnQsIGRvbmVOYW1lLCBjaGVja1NldCwg
bm9kZUNoZWNrLCBpc1hNTCApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAg
IGZpbmQ6IHsKICAgICAgICAgICAgICAgIElEOiBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlz
WE1MICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVs
ZW1lbnRCeUlkICE9PSAidW5kZWZpbmVkIiAmJiAhaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG1hdGNoWzFdKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNh
dGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbSAmJiBtLnBhcmVudE5vZGUg
PyBbbV0gOiBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwK
CiAgICAgICAgICAgICAgICBOQU1FOiBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUg
IT09ICJ1bmRlZmluZWQiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBy
ZXQgPSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMg
PSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBtYXRjaFsxXSApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSByZXN1bHRzLmxlbmd0aDsgaSA8
IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cmVzdWx0c1tpXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSA9PT0gbWF0Y2hbMV0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCByZXN1bHRz
W2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0Lmxlbmd0aCA9PT0gMCA/IG51bGwgOiByZXQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgVEFHOiBmdW5jdGlv
biggbWF0Y2gsIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9m
IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCBtYXRjaFsxXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfSwKICAgICAgICBwcmVGaWx0ZXI6IHsKICAgICAgICAgICAgICAgIENMQVNT
OiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSAiICIgKyBtYXRjaFsxXS5yZXBsYWNl
KCByQmFja3NsYXNoLCAiIiApICsgIiAiOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBp
c1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgZWxlbTsgKGVsZW0gPSBjdXJMb29wW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub3QgXiAoZWxlbS5jbGFzc05hbWUgJiYgKCIg
IiArIGVsZW0uY2xhc3NOYW1lICsgIiAiKS5yZXBsYWNlKC9bXHRcblxyXS9nLCAiICIpLmluZGV4
T2YobWF0Y2gpID49IDApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFpbnBsYWNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCBlbGVtICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBpbnBsYWNlICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJMb29wW2ldID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9LAoKICAgICAg
ICAgICAgICAgIElEOiBmdW5jdGlvbiggbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApOwogICAgICAgICAgICAg
ICAgfSwKCiAgICAgICAgICAgICAgICBUQUc6IGZ1bmN0aW9uKCBtYXRjaCwgY3VyTG9vcCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNrc2xh
c2gsICIiICkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAg
ICAgQ0hJTEQ6IGZ1bmN0aW9uKCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBtYXRjaFsxXSA9PT0gIm50aCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhbWF0Y2hbMl0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1hdGNoWzJd
LnJlcGxhY2UoL15cK3xccyovZywgJycpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBwYXJzZSBlcXVhdGlvbnMgbGlrZSAnZXZlbicsICdvZGQnLCAnNScsICcybicsICczbisy
JywgJzRuLTEnLCAnLW4rNicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVz
dCA9IC8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYygKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID09PSAiZXZlbiIgJiYgIjJuIiB8fCBtYXRj
aFsyXSA9PT0gIm9kZCIgJiYgIjJuKzEiIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAhL1xELy50ZXN0KCBtYXRjaFsyXSApICYmICIwbisiICsgbWF0Y2hbMl0gfHwg
bWF0Y2hbMl0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUg
dGhlIG51bWJlcnMgKGZpcnN0KW4rKGxhc3QpIGluY2x1ZGluZyBpZiB0aGV5IGFyZSBuZWdhdGl2
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gKHRlc3RbMV0gKyAo
dGVzdFsyXSB8fCAxKSkgLSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
WzNdID0gdGVzdFszXSAtIDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoIG1hdGNoWzJdICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0byBub3JtYWwgY2Fj
aGluZyBzeXN0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMF0gPSBkb25lKys7Cgog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgIEFUVFI6IGZ1bmN0aW9uKCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwg
cmVzdWx0LCBub3QsIGlzWE1MICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9
IG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzWE1MICYmIEV4
cHIuYXR0ck1hcFtuYW1lXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aFsxXSA9IEV4cHIuYXR0ck1hcFtuYW1lXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGlmIGFuIHVuLXF1b3RlZCB2YWx1ZSB3YXMg
dXNlZAogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFs0XSA9ICggbWF0Y2hbNF0gfHwgbWF0
Y2hbNV0gfHwgIiIgKS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBtYXRjaFsyXSA9PT0gIn49IiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaFs0XSA9ICIgIiArIG1hdGNoWzRdICsgIiAiOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAg
ICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIFBTRVVETzogZnVuY3Rpb24oIG1hdGNoLCBj
dXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBtYXRjaFsxXSA9PT0gIm5vdCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UncmUgZGVhbGluZyB3aXRoIGEgY29tcGxleCBleHByZXNzaW9uLCBvciBhIHNp
bXBsZSBvbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggY2h1bmtlci5l
eGVjKG1hdGNoWzNdKSB8fCAiIiApLmxlbmd0aCA+IDEgfHwgL15cdy8udGVzdChtYXRjaFszXSkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFszXSA9IFNp
enpsZShtYXRjaFszXSwgbnVsbCwgbnVsbCwgY3VyTG9vcCk7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgcmV0ID0gU2l6emxlLmZpbHRlcihtYXRjaFszXSwgY3VyTG9vcCwgaW5wbGFjZSwg
dHJ1ZSBeIG5vdCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhaW5wbGFjZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnB1c2guYXBwbHkoIHJlc3VsdCwgcmV0ICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIEV4cHIubWF0Y2guUE9TLnRlc3Qo
IG1hdGNoWzBdICkgfHwgRXhwci5tYXRjaC5DSElMRC50ZXN0KCBtYXRjaFswXSApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIFBPUzog
ZnVuY3Rpb24oIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC51bnNoaWZ0
KCB0cnVlICk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBmaWx0ZXJzOiB7CiAgICAgICAg
ICAgICAgICBlbmFibGVkOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICYmIGVsZW0udHlwZSAhPT0gImhpZGRl
biI7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlv
biggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQg
PT09IHRydWU7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZ1
bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5jaGVj
a2VkID09PSB0cnVlOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgc2VsZWN0ZWQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVy
bHkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOwogICAgICAg
ICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFlbGVtLmZpcnN0Q2hpbGQ7CiAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbiggZWxlbSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFlbGVtLmZpcnN0Q2hpbGQ7CiAgICAgICAgICAg
ICAgICB9LAoKICAgICAgICAgICAgICAgIGhhczogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFTaXp6bGUoIG1hdGNoWzNdLCBlbGVt
ICkubGVuZ3RoOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoZWFkZXI6IGZ1
bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC9oXGQvaSku
dGVzdCggZWxlbS5ub2RlTmFtZSApOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAg
ICB0ZXh0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0
dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUiICksIHR5cGUgPSBlbGVtLnR5cGU7CiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElFNiBhbmQgNyB3aWxsIG1hcCBlbGVtLnR5cGUgdG8gJ3Rl
eHQnIGZvciBuZXcgSFRNTDUgdHlwZXMgKHNlYXJjaCwgZXRjKSAKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdXNlIGdldEF0dHJpYnV0ZSBpbnN0ZWFkIHRvIHRlc3QgdGhpcyBjYXNlCiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09
ICJpbnB1dCIgJiYgInRleHQiID09PSB0eXBlICYmICggYXR0ciA9PT0gdHlwZSB8fCBhdHRyID09
PSBudWxsICk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHJhZGlvOiBmdW5j
dGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5h
bWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAicmFkaW8iID09PSBlbGVtLnR5cGU7CiAg
ICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGNoZWNrYm94OiBmdW5jdGlvbiggZWxl
bSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSA9PT0gImlucHV0IiAmJiAiY2hlY2tib3giID09PSBlbGVtLnR5cGU7CiAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGZpbGU6IGZ1bmN0aW9uKCBlbGVtICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09
PSAiaW5wdXQiICYmICJmaWxlIiA9PT0gZWxlbS50eXBlOwogICAgICAgICAgICAgICAgfSwKCiAg
ICAgICAgICAgICAgICBwYXNzd29yZDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIg
JiYgInBhc3N3b3JkIiA9PT0gZWxlbS50eXBlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAg
ICAgICAgICBzdWJtaXQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0b24iKSAm
JiAic3VibWl0IiA9PT0gZWxlbS50eXBlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICBpbWFnZTogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgImltYWdlIiA9
PT0gZWxlbS50eXBlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICByZXNldDog
ZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZWxl
bS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KG5hbWUgPT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIpICYmICJyZXNldCIgPT09IGVs
ZW0udHlwZTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgYnV0dG9uOiBmdW5j
dGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1l
ID09PSAiaW5wdXQiICYmICJidXR0b24iID09PSBlbGVtLnR5cGUgfHwgbmFtZSA9PT0gImJ1dHRv
biI7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbigg
ZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgvaW5wdXR8c2VsZWN0fHRl
eHRhcmVhfGJ1dHRvbi9pKS50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CiAgICAgICAgICAgICAgICB9
LAoKICAgICAgICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGVsZW0ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVt
ZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgc2V0RmlsdGVyczogewog
ICAgICAgICAgICAgICAgZmlyc3Q6IGZ1bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaSA9PT0gMDsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAg
ICAgICAgbGFzdDogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoLCBhcnJheSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IGFycmF5Lmxlbmd0aCAtIDE7CiAgICAgICAgICAg
ICAgICB9LAoKICAgICAgICAgICAgICAgIGV2ZW46IGZ1bmN0aW9uKCBlbGVtLCBpICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSAlIDIgPT09IDA7CiAgICAgICAgICAgICAgICB9
LAoKICAgICAgICAgICAgICAgIG9kZDogZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpICUgMiA9PT0gMTsKICAgICAgICAgICAgICAgIH0sCgogICAg
ICAgICAgICAgICAgbHQ6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGkgPCBtYXRjaFszXSAtIDA7CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgIGd0OiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpID4gbWF0Y2hbM10gLSAwOwogICAgICAgICAgICAgICAg
fSwKCiAgICAgICAgICAgICAgICBudGg6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzNdIC0gMCA9PT0gaTsKICAgICAgICAg
ICAgICAgIH0sCgogICAgICAgICAgICAgICAgZXE6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzNdIC0gMCA9PT0gaTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZpbHRlcjogewogICAgICAgICAgICAg
ICAgUFNFVURPOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1hdGNoWzFdLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbHRlciA9IEV4cHIuZmlsdGVyc1sgbmFtZSBdOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBmaWx0ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CgogICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCBuYW1lID09PSAiY29udGFpbnMiICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVy
VGV4dCB8fCBTaXp6bGUuZ2V0VGV4dChbIGVsZW0gXSkgfHwgIiIpLmluZGV4T2YobWF0Y2hbM10p
ID49IDA7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBuYW1lID09PSAibm90
IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90ID0gbWF0Y2hbM107
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgbCA9IG5v
dC5sZW5ndGg7IGogPCBsOyBqKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIG5vdFtqXSA9PT0gZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNp
enpsZS5lcnJvciggbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9LAoKICAgICAgICAgICAgICAgIENISUxEOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gbWF0Y2hbMV0sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW07CgogICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKCB0eXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Im9ubHkiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImZpcnN0IjoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBub2Rl
LnByZXZpb3VzU2libGluZykgKSAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7IAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmaXJzdCIgKSB7IAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW07CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgImxhc3QiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCAobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpICkgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlw
ZSA9PT0gMSApIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJudGgiOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gbWF0Y2hbMl0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBtYXRjaFsz
XTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ID09
PSAxICYmIGxhc3QgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9uZU5hbWUgPSBtYXRjaFsw
XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
ID0gZWxlbS5wYXJlbnROb2RlOwogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBwYXJlbnQgJiYgKHBhcmVudC5zaXpjYWNoZSAhPT0gZG9uZU5hbWUg
fHwgIWVsZW0ubm9kZUluZGV4KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIG5vZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9
IG5vZGUubmV4dFNpYmxpbmcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS5ub2RlSW5kZXggPSArK2NvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudC5zaXpjYWNoZSA9IGRvbmVOYW1lOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlm
ZiA9IGVsZW0ubm9kZUluZGV4IC0gbGFzdDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGZpcnN0ID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlmZiA9PT0gMDsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCBkaWZmICUgZmlyc3QgPT09IDAgJiYg
ZGlmZiAvIGZpcnN0ID49IDAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAg
ICAgICAgICAgICBJRDogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgewogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBlbGVtLmdldEF0dHJpYnV0ZSgi
aWQiKSA9PT0gbWF0Y2g7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIFRBRzog
ZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KG1hdGNoID09PSAiKiIgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSkgfHwgZWxlbS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpID09PSBtYXRjaDsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgIENMQVNTOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoIiAiICsgKGVsZW0uY2xhc3NOYW1lIHx8IGVsZW0u
Z2V0QXR0cmlidXRlKCJjbGFzcyIpKSArICIgIikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuaW5kZXhPZiggbWF0Y2ggKSA+IC0xOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAg
ICAgICAgICBBVFRSOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBuYW1lID0gbWF0Y2hbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gRXhwci5hdHRySGFuZGxlWyBuYW1lIF0gPwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRXhwci5hdHRySGFuZGxlWyBuYW1lIF0oIGVsZW0gKSA6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBuYW1lIF0gIT0gbnVs
bCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1b
IG5hbWUgXSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSByZXN1bHQgKyAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlID0gbWF0Y2hbMl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgPSBt
YXRjaFs0XTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gIiE9IiA6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gIj0iID8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9PT0gY2hlY2sgOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGUgPT09ICIqPSIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlLmluZGV4T2YoY2hlY2spID49IDAgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPT09ICJ+PSIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiICIgKyB2
YWx1ZSArICIgIikuaW5kZXhPZihjaGVjaykgPj0gMCA6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIWNoZWNrID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAm
JiByZXN1bHQgIT09IGZhbHNlIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID09PSAiIT0iID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gY2hl
Y2sgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICJePSIgPwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmluZGV4T2YoY2hlY2spID09PSAwIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAiJD0iID8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zdWJzdHIodmFsdWUubGVuZ3RoIC0gY2hlY2su
bGVuZ3RoKSA9PT0gY2hlY2sgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg
PT09ICJ8PSIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID09PSBjaGVj
ayB8fCB2YWx1ZS5zdWJzdHIoMCwgY2hlY2subGVuZ3RoICsgMSkgPT09IGNoZWNrICsgIi0iIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTsKICAgICAgICAgICAgICAgIH0s
CgogICAgICAgICAgICAgICAgUE9TOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkg
ewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1hdGNoWzJdLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IEV4cHIuc2V0RmlsdGVyc1sgbmFtZSBdOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaWx0ZXIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn07Cgp2
YXIgb3JpZ1BPUyA9IEV4cHIubWF0Y2guUE9TLAogICAgICAgIGZlc2NhcGUgPSBmdW5jdGlvbihh
bGwsIG51bSl7CiAgICAgICAgICAgICAgICByZXR1cm4gIlxcIiArIChudW0gLSAwICsgMSk7CiAg
ICAgICAgfTsKCmZvciAoIHZhciB0eXBlIGluIEV4cHIubWF0Y2ggKSB7CiAgICAgICAgRXhwci5t
YXRjaFsgdHlwZSBdID0gbmV3IFJlZ0V4cCggRXhwci5tYXRjaFsgdHlwZSBdLnNvdXJjZSArICgv
KD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpICk7CiAgICAgICAgRXhwci5sZWZ0TWF0
Y2hbIHR5cGUgXSA9IG5ldyBSZWdFeHAoIC8oXig/Oi58XHJ8XG4pKj8pLy5zb3VyY2UgKyBFeHBy
Lm1hdGNoWyB0eXBlIF0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZywgZmVzY2FwZSkgKTsKfQoK
dmFyIG1ha2VBcnJheSA9IGZ1bmN0aW9uKCBhcnJheSwgcmVzdWx0cyApIHsKICAgICAgICBhcnJh
eSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcnJheSwgMCApOwoKICAgICAgICBpZiAo
IHJlc3VsdHMgKSB7CiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2guYXBwbHkoIHJlc3VsdHMs
IGFycmF5ICk7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICB9CiAgICAg
ICAgCiAgICAgICAgcmV0dXJuIGFycmF5Owp9OwoKLy8gUGVyZm9ybSBhIHNpbXBsZSBjaGVjayB0
byBkZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgY2FwYWJsZSBvZgovLyBjb252ZXJ0aW5nIGEg
Tm9kZUxpc3QgdG8gYW4gYXJyYXkgdXNpbmcgYnVpbHRpbiBtZXRob2RzLgovLyBBbHNvIHZlcmlm
aWVzIHRoYXQgdGhlIHJldHVybmVkIGFycmF5IGhvbGRzIERPTSBub2RlcwovLyAod2hpY2ggaXMg
bm90IHRoZSBjYXNlIGluIHRoZSBCbGFja2JlcnJ5IGJyb3dzZXIpCnRyeSB7CiAgICAgICAgQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jaGlsZE5v
ZGVzLCAwIClbMF0ubm9kZVR5cGU7CgovLyBQcm92aWRlIGEgZmFsbGJhY2sgbWV0aG9kIGlmIGl0
IGRvZXMgbm90IHdvcmsKfSBjYXRjaCggZSApIHsKICAgICAgICBtYWtlQXJyYXkgPSBmdW5jdGlv
biggYXJyYXksIHJlc3VsdHMgKSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9IDAsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldCA9IHJlc3VsdHMgfHwgW107CgogICAgICAgICAgICAgICAgaWYg
KCB0b1N0cmluZy5jYWxsKGFycmF5KSA9PT0gIltvYmplY3QgQXJyYXldIiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoIHJldCwgYXJyYXkgKTsK
CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5
cGVvZiBhcnJheS5sZW5ndGggPT09ICJudW1iZXIiICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIHZhciBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGFycmF5W2ldICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGFycmF5
W2ldOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQu
cHVzaCggYXJyYXlbaV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0OwogICAgICAgIH07Cn0KCnZhciBzb3J0T3JkZXIsIHNpYmxpbmdDaGVjazsKCmlm
ICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICkgewog
ICAgICAgIHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkgewogICAgICAgICAgICAgICAgaWYg
KCBhID09PSBiICkgewogICAgICAgICAgICAgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICBpZiAoICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/IC0xIDogMTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICByZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6
IDE7CiAgICAgICAgfTsKCn0gZWxzZSB7CiAgICAgICAgc29ydE9yZGVyID0gZnVuY3Rpb24oIGEs
IGIgKSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgbm9kZXMgYXJlIGlkZW50aWNhbCwgd2UgY2Fu
IGV4aXQgZWFybHkKICAgICAgICAgICAgICAgIGlmICggYSA9PT0gYiApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CgogICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gdXNpbmcgc291cmNlSW5k
ZXggKGluIElFKSBpZiBpdCdzIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzCiAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBhLnNvdXJjZUluZGV4ICYmIGIuc291cmNlSW5kZXggKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgYWwsIGJsLAogICAgICAgICAgICAg
ICAgICAgICAgICBhcCA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBicCA9IFtdLAogICAg
ICAgICAgICAgICAgICAgICAgICBhdXAgPSBhLnBhcmVudE5vZGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1cCA9IGIucGFyZW50Tm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0g
YXVwOwoKICAgICAgICAgICAgICAgIC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MgKG9yIGlk
ZW50aWNhbCkgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2sKICAgICAgICAgICAgICAgIGlmICggYXVw
ID09PSBidXAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2so
IGEsIGIgKTsKCiAgICAgICAgICAgICAgICAvLyBJZiBubyBwYXJlbnRzIHdlcmUgZm91bmQgdGhl
biB0aGUgbm9kZXMgYXJlIGRpc2Nvbm5lY3RlZAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
IWF1cCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwoKICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoICFidXAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAx
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5J3Jl
IHNvbWV3aGVyZSBlbHNlIGluIHRoZSB0cmVlIHNvIHdlIG5lZWQKICAgICAgICAgICAgICAgIC8v
IHRvIGJ1aWxkIHVwIGEgZnVsbCBsaXN0IG9mIHRoZSBwYXJlbnROb2RlcyBmb3IgY29tcGFyaXNv
bgogICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGFwLnVuc2hpZnQoIGN1ciApOwogICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFy
ZW50Tm9kZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjdXIgPSBidXA7Cgog
ICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJw
LnVuc2hpZnQoIGN1ciApOwogICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50
Tm9kZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBhbCA9IGFwLmxlbmd0aDsK
ICAgICAgICAgICAgICAgIGJsID0gYnAubGVuZ3RoOwoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0
IHdhbGtpbmcgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5CiAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhbCAmJiBpIDwgYmw7IGkrKyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBhcFtpXSAhPT0gYnBbaV0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAvLyBXZSBlbmRlZCBzb21lcGxhY2UgdXAgdGhlIHRyZWUgc28gZG8gYSBzaWJsaW5nIGNoZWNr
CiAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gYWwgPwogICAgICAgICAgICAgICAgICAgICAg
ICBzaWJsaW5nQ2hlY2soIGEsIGJwW2ldLCAtMSApIDoKICAgICAgICAgICAgICAgICAgICAgICAg
c2libGluZ0NoZWNrKCBhcFtpXSwgYiwgMSApOwogICAgICAgIH07CgogICAgICAgIHNpYmxpbmdD
aGVjayA9IGZ1bmN0aW9uKCBhLCBiLCByZXQgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGEgPT09
IGIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgdmFyIGN1ciA9IGEubmV4dFNpYmxpbmc7CgogICAgICAgICAg
ICAgICAgd2hpbGUgKCBjdXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VyID09
PSBiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLm5l
eHRTaWJsaW5nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAxOwog
ICAgICAgIH07Cn0KCi8vIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJlaXZpbmcgdGhlIHRleHQg
dmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzClNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24o
IGVsZW1zICkgewogICAgICAgIHZhciByZXQgPSAiIiwgZWxlbTsKCiAgICAgICAgZm9yICggdmFy
IGkgPSAwOyBlbGVtc1tpXTsgaSsrICkgewogICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1zW2ld
OwoKICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgdGV4dCBmcm9tIHRleHQgbm9kZXMgYW5kIENE
QVRBIG5vZGVzCiAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxl
bS5ub2RlVHlwZSA9PT0gNCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IGVsZW0u
bm9kZVZhbHVlOwoKICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIGV2ZXJ5dGhpbmcgZWxzZSwg
ZXhjZXB0IGNvbW1lbnQgbm9kZXMKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0ubm9k
ZVR5cGUgIT09IDggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBTaXp6bGUuZ2V0
VGV4dCggZWxlbS5jaGlsZE5vZGVzICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgICByZXR1cm4gcmV0Owp9OwoKLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBicm93c2VyIHJldHVy
bnMgZWxlbWVudHMgYnkgbmFtZSB3aGVuCi8vIHF1ZXJ5aW5nIGJ5IGdldEVsZW1lbnRCeUlkIChh
bmQgcHJvdmlkZSBhIHdvcmthcm91bmQpCihmdW5jdGlvbigpewogICAgICAgIC8vIFdlJ3JlIGdv
aW5nIHRvIGluamVjdCBhIGZha2UgaW5wdXQgZWxlbWVudCB3aXRoIGEgc3BlY2lmaWVkIG5hbWUK
ICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLAogICAgICAg
ICAgICAgICAgaWQgPSAic2NyaXB0IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCiAgICAgICAg
ICAgICAgICByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwoKICAgICAgICBmb3JtLmlu
bmVySFRNTCA9ICI8YSBuYW1lPSciICsgaWQgKyAiJy8+IjsKCiAgICAgICAgLy8gSW5qZWN0IGl0
IGludG8gdGhlIHJvb3QgZWxlbWVudCwgY2hlY2sgaXRzIHN0YXR1cywgYW5kIHJlbW92ZSBpdCBx
dWlja2x5CiAgICAgICAgcm9vdC5pbnNlcnRCZWZvcmUoIGZvcm0sIHJvb3QuZmlyc3RDaGlsZCAp
OwoKICAgICAgICAvLyBUaGUgd29ya2Fyb3VuZCBoYXMgdG8gZG8gYWRkaXRpb25hbCBjaGVja3Mg
YWZ0ZXIgYSBnZXRFbGVtZW50QnlJZAogICAgICAgIC8vIFdoaWNoIHNsb3dzIHRoaW5ncyBkb3du
IGZvciBvdGhlciBicm93c2VycyAoaGVuY2UgdGhlIGJyYW5jaGluZykKICAgICAgICBpZiAoIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCBpZCApICkgewogICAgICAgICAgICAgICAgRXhwci5maW5k
LklEID0gZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0LCBpc1hNTCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5l
ZCIgJiYgIWlzWE1MICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0g
Y29udGV4dC5nZXRFbGVtZW50QnlJZChtYXRjaFsxXSk7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG0uaWQgPT09IG1hdGNoWzFdIHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1
bmRlZmluZWQiICYmIG0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWUgPT09IG1hdGNo
WzFdID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21d
IDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZp
bmVkIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIEV4
cHIuZmlsdGVyLklEID0gZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgewogICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRl
ZmluZWQiICYmIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxICYmIG5vZGUgJiYgbm9kZS5ub2RlVmFs
dWUgPT09IG1hdGNoOwogICAgICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIHJvb3Qu
cmVtb3ZlQ2hpbGQoIGZvcm0gKTsKCiAgICAgICAgLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKICAg
ICAgICByb290ID0gZm9ybSA9IG51bGw7Cn0pKCk7CgooZnVuY3Rpb24oKXsKICAgICAgICAvLyBD
aGVjayB0byBzZWUgaWYgdGhlIGJyb3dzZXIgcmV0dXJucyBvbmx5IGVsZW1lbnRzCiAgICAgICAg
Ly8gd2hlbiBkb2luZyBnZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpCgogICAgICAgIC8vIENyZWF0
ZSBhIGZha2UgZWxlbWVudAogICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQo
IiIpICk7CgogICAgICAgIC8vIE1ha2Ugc3VyZSBubyBjb21tZW50cyBhcmUgZm91bmQKICAgICAg
ICBpZiAoIGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aCA+IDAgKSB7CiAgICAg
ICAgICAgICAgICBFeHByLmZpbmQuVEFHID0gZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0ICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoIG1hdGNoWzFdICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIg
b3V0IHBvc3NpYmxlIGNvbW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hb
MV0gPT09ICIqIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0g
W107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgcmVz
dWx0c1tpXTsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCByZXN1bHRzW2ldLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVzaCggcmVzdWx0c1tpXSApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHRt
cDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdHM7CiAgICAgICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIGFuIGF0dHJpYnV0ZSByZXR1cm5zIG5vcm1hbGl6ZWQgaHJlZiBhdHRyaWJ1
dGVzCiAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8YSBocmVmPScjJz48L2E+IjsKCiAgICAgICAg
aWYgKCBkaXYuZmlyc3RDaGlsZCAmJiB0eXBlb2YgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRl
ICE9PSAidW5kZWZpbmVkIiAmJgogICAgICAgICAgICAgICAgICAgICAgICBkaXYuZmlyc3RDaGls
ZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSAhPT0gIiMiICkgewoKICAgICAgICAgICAgICAgIEV4cHIu
YXR0ckhhbmRsZS5ocmVmID0gZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImhyZWYiLCAyICk7CiAgICAgICAgICAgICAg
ICB9OwogICAgICAgIH0KCiAgICAgICAgLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKICAgICAgICBk
aXYgPSBudWxsOwp9KSgpOwoKaWYgKCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgewogICAg
ICAgIChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdmFyIG9sZFNpenpsZSA9IFNpenpsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
IiksCiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gIl9fc2l6emxlX18iOwoKICAgICAgICAg
ICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPHAgY2xhc3M9J1RFU1QnPjwvcD4iOwoKICAgICAgICAg
ICAgICAgIC8vIFNhZmFyaSBjYW4ndCBoYW5kbGUgdXBwZXJjYXNlIG9yIHVuaWNvZGUgY2hhcmFj
dGVycyB3aGVuCiAgICAgICAgICAgICAgICAvLyBpbiBxdWlya3MgbW9kZS4KICAgICAgICAgICAg
ICAgIGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwgJiYgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIi5U
RVNUIikubGVuZ3RoID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICAgICBTaXp6bGUgPSBmdW5jdGlv
biggcXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkICkgewogICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE9ubHkgdXNlIHF1ZXJ5U2VsZWN0b3JBbGwgb24gbm9uLVhNTCBkb2N1bWVudHMKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gKElEIHNlbGVjdG9ycyBkb24ndCB3b3JrIGluIG5vbi1IVE1M
IGRvY3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc2VlZCAmJiAhU2l6emxl
LmlzWE1MKGNvbnRleHQpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNl
ZSBpZiB3ZSBmaW5kIGEgc2VsZWN0b3IgdG8gc3BlZWQgdXAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXihcdyskKXxeXC4oW1x3XC1dKyQpfF4jKFtcd1wtXSsk
KS8uZXhlYyggcXVlcnkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoICYmIChjb250ZXh0Lm5vZGVUeXBl
ID09PSAxIHx8IGNvbnRleHQubm9kZVR5cGUgPT09IDkpICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gU3BlZWQtdXA6IFNpenpsZSgiVEFHIikKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbMV0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXko
IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHF1ZXJ5ICksIGV4dHJhICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIi5DTEFTUyIpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSAmJiBFeHBy
LmZpbmQuQ0xBU1MgJiYgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5
KCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG1hdGNoWzJdICksIGV4dHJhICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udGV4dC5ub2RlVHlwZSA9PT0gOSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6
bGUoImJvZHkiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhl
IGJvZHkgZWxlbWVudCBvbmx5IGV4aXN0cyBvbmNlLCBvcHRpbWl6ZSBmaW5kaW5nIGl0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHF1ZXJ5ID09PSAiYm9keSIg
JiYgY29udGV4dC5ib2R5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBbIGNvbnRleHQuYm9keSBdLCBleHRyYSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIiNJRCIp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRj
aCAmJiBtYXRjaFszXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtYXRjaFszXSApOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sg
cGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUg
bm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2MwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1zCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFt
ZSBpbnN0ZWFkIG9mIElECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBlbGVtLmlkID09PSBtYXRjaFszXSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlQXJyYXkoIFsgZWxlbSBdLCBleHRyYSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBbXSwgZXh0
cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZUFycmF5KCBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLCBl
eHRyYSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChx
c2FFcnJvcikge30KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcVNBIHdvcmtz
IHN0cmFuZ2VseSBvbiBFbGVtZW50LXJvb3RlZCBxdWVyaWVzCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgY2FuIHdvcmsgYXJvdW5kIHRoaXMgYnkgc3BlY2lmeWluZyBhbiBl
eHRyYSBJRCBvbiB0aGUgcm9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFu
ZCB3b3JraW5nIHVwIGZyb20gdGhlcmUgKFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGUg
dGVjaG5pcXVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIDggZG9lc24n
dCB3b3JrIG9uIG9iamVjdCBlbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIGNvbnRleHQubm9kZVR5cGUgPT09IDEgJiYgY29udGV4dC5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpICE9PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBvbGRDb250ZXh0ID0gY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUo
ICJpZCIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmlkID0gb2xkIHx8IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYXNQYXJlbnQgPSBjb250ZXh0LnBhcmVudE5vZGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlSGllcmFyY2h5U2VsZWN0b3Ig
PSAvXlxzKlsrfl0vLnRlc3QoIHF1ZXJ5ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhb2xkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnNldEF0dHJpYnV0ZSggImlkIiwgbmlkICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWQgPSBuaWQucmVwbGFjZSggLycv
ZywgIlxcJCYiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlbGF0aXZlSGllcmFy
Y2h5U2VsZWN0b3IgJiYgaGFzUGFyZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIXJlbGF0aXZlSGllcmFyY2h5U2VsZWN0b3IgfHwgaGFzUGFy
ZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggIltpZD0n
IiArIG5pZCArICInXSAiICsgcXVlcnkgKSwgZXh0cmEgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gY2F0Y2gocHNldWRvRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIW9sZCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRDb250ZXh0LnJlbW92ZUF0dHJp
YnV0ZSggImlkIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZFNpenpsZShxdWVy
eSwgY29udGV4dCwgZXh0cmEsIHNlZWQpOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgcHJvcCBpbiBvbGRTaXp6bGUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIFNpenpsZVsgcHJvcCBdID0gb2xkU2l6emxlWyBwcm9wIF07CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKICAgICAgICAgICAgICAg
IGRpdiA9IG51bGw7CiAgICAgICAgfSkoKTsKfQoKKGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIGh0
bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgICAgICAgICBtYXRjaGVzID0g
aHRtbC5tYXRjaGVzU2VsZWN0b3IgfHwgaHRtbC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgaHRtbC53
ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgaHRtbC5tc01hdGNoZXNTZWxlY3RvcjsKCiAgICAgICAg
aWYgKCBtYXRjaGVzICkgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3Mg
cG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yCiAgICAgICAgICAgICAgICAvLyBvbiBhIGRp
c2Nvbm5lY3RlZCBub2RlIChJRSA5IGZhaWxzIHRoaXMpCiAgICAgICAgICAgICAgICB2YXIgZGlz
Y29ubmVjdGVkTWF0Y2ggPSAhbWF0Y2hlcy5jYWxsKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAi
ZGl2IiApLCAiZGl2IiApLAogICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG9Xb3JrcyA9IGZh
bHNlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZAogICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaGVzLmNhbGwoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgIlt0
ZXN0IT0nJ106c2l6emxlIiApOwogICAgICAgIAogICAgICAgICAgICAgICAgfSBjYXRjaCggcHNl
dWRvRXJyb3IgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkb1dvcmtzID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBTaXp6bGUubWF0Y2hlc1NlbGVjdG9y
ID0gZnVuY3Rpb24oIG5vZGUsIGV4cHIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZAogICAgICAgICAgICAg
ICAgICAgICAgICBleHByID0gZXhwci5yZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9nLCAi
PSckMSddIik7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFTaXp6bGUuaXNYTUwoIG5v
ZGUgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHNldWRvV29ya3MgfHwgIUV4cHIu
bWF0Y2guUFNFVURPLnRlc3QoIGV4cHIgKSAmJiAhLyE9Ly50ZXN0KCBleHByICkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBtYXRj
aGVzLmNhbGwoIG5vZGUsIGV4cHIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBv
biBkaXNjb25uZWN0ZWQgbm9kZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCByZXQgfHwgIWRpc2Nvbm5lY3RlZE1hdGNoIHx8CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBB
cyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZnJhZ21lbnQgaW4gSUUgOSwgc28gY2hlY2sgZm9yIHRoYXQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUu
ZG9jdW1lbnQgJiYgbm9kZS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gY2F0Y2goZSkge30KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpenpsZShleHByLCBudWxsLCBudWxsLCBbbm9kZV0p
Lmxlbmd0aCA+IDA7CiAgICAgICAgICAgICAgICB9OwogICAgICAgIH0KfSkoKTsKCihmdW5jdGlv
bigpewogICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCiAg
ICAgICAgZGl2LmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xh
c3M9J3Rlc3QnPjwvZGl2PiI7CgogICAgICAgIC8vIE9wZXJhIGNhbid0IGZpbmQgYSBzZWNvbmQg
Y2xhc3NuYW1lIChpbiA5LjYpCiAgICAgICAgLy8gQWxzbywgbWFrZSBzdXJlIHRoYXQgZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSBhY3R1YWxseSBleGlzdHMKICAgICAgICBpZiAoICFkaXYuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSB8fCBkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0
aCA9PT0gMCApIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8v
IFNhZmFyaSBjYWNoZXMgY2xhc3MgYXR0cmlidXRlcywgZG9lc24ndCBjYXRjaCBjaGFuZ2VzIChp
biAzLjIpCiAgICAgICAgZGl2Lmxhc3RDaGlsZC5jbGFzc05hbWUgPSAiZSI7CgogICAgICAgIGlm
ICggZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGggPT09IDEgKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEV4cHIub3JkZXIu
c3BsaWNlKDEsIDAsICJDTEFTUyIpOwogICAgICAgIEV4cHIuZmluZC5DTEFTUyA9IGZ1bmN0aW9u
KCBtYXRjaCwgY29udGV4dCwgaXNYTUwgKSB7CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBj
b250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09ICJ1bmRlZmluZWQiICYmICFpc1hNTCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZShtYXRjaFsxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAg
Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKICAgICAgICBkaXYgPSBudWxsOwp9KSgpOwoKZnVuY3Rp
b24gZGlyTm9kZUNoZWNrKCBkaXIsIGN1ciwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ss
IGlzWE1MICkgewogICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGNoZWNrU2V0Lmxlbmd0aDsg
aSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gY2hlY2tTZXRbaV07Cgog
ICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIg
bWF0Y2ggPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtW2Rpcl07
CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnNpemNhY2hlID09PSBkb25lTmFtZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY2hlY2tTZXRbZWxl
bS5zaXpzZXRdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWlzWE1MICl7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNpemNhY2hlID0gZG9uZU5hbWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNpenNldCA9IGk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gY3VyICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBlbGVtOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ID0gZWxlbVtkaXJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja1NldFtpXSA9IG1hdGNoOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0K
fQoKZnVuY3Rpb24gZGlyQ2hlY2soIGRpciwgY3VyLCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVD
aGVjaywgaXNYTUwgKSB7CiAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVu
Z3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBjaGVja1NldFtp
XTsKCiAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbSA9IGVsZW1bZGlyXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlICggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0u
c2l6Y2FjaGUgPT09IGRvbmVOYW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2ggPSBjaGVja1NldFtlbGVtLnNpenNldF07CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlw
ZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWlzWE1MICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtLnNpemNhY2hlID0gZG9uZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gaTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiBjdXIgIT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gPT09IGN1ciApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBTaXp6bGUuZmlsdGVyKCBjdXIsIFtlbGVtXSApLmxlbmd0aCA+IDAgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZWxlbTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbVtk
aXJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBj
aGVja1NldFtpXSA9IG1hdGNoOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKaWYgKCBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMgKSB7CiAgICAgICAgU2l6emxlLmNvbnRh
aW5zID0gZnVuY3Rpb24oIGEsIGIgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYSAhPT0gYiAm
JiAoYS5jb250YWlucyA/IGEuY29udGFpbnMoYikgOiB0cnVlKTsKICAgICAgICB9OwoKfSBlbHNl
IGlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICkg
ewogICAgICAgIFNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBhLCBiICkgewogICAgICAgICAg
ICAgICAgcmV0dXJuICEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAxNik7CiAgICAg
ICAgfTsKCn0gZWxzZSB7CiAgICAgICAgU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfTsKfQoKU2l6emxlLmlzWE1MID0g
ZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVk
IGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAogICAgICAgIC8vIChzdWNoIGFz
IGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKSAKICAgICAgICB2YXIgZG9jdW1lbnRFbGVt
ZW50ID0gKGVsZW0gPyBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSA6IDApLmRvY3VtZW50RWxl
bWVudDsKCiAgICAgICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5u
b2RlTmFtZSAhPT0gIkhUTUwiIDogZmFsc2U7Cn07Cgp2YXIgcG9zUHJvY2VzcyA9IGZ1bmN0aW9u
KCBzZWxlY3RvciwgY29udGV4dCApIHsKICAgICAgICB2YXIgbWF0Y2gsCiAgICAgICAgICAgICAg
ICB0bXBTZXQgPSBbXSwKICAgICAgICAgICAgICAgIGxhdGVyID0gIiIsCiAgICAgICAgICAgICAg
ICByb290ID0gY29udGV4dC5ub2RlVHlwZSA/IFtjb250ZXh0XSA6IGNvbnRleHQ7CgogICAgICAg
IC8vIFBvc2l0aW9uIHNlbGVjdG9ycyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGZpbHRlcgogICAg
ICAgIC8vIEFuZCBzbyBtdXN0IDpub3QocG9zaXRpb25hbCkgc28gd2UgbW92ZSBhbGwgUFNFVURP
cyB0byB0aGUgZW5kCiAgICAgICAgd2hpbGUgKCAobWF0Y2ggPSBFeHByLm1hdGNoLlBTRVVETy5l
eGVjKCBzZWxlY3RvciApKSApIHsKICAgICAgICAgICAgICAgIGxhdGVyICs9IG1hdGNoWzBdOwog
ICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKCBFeHByLm1hdGNoLlBT
RVVETywgIiIgKTsKICAgICAgICB9CgogICAgICAgIHNlbGVjdG9yID0gRXhwci5yZWxhdGl2ZVtz
ZWxlY3Rvcl0gPyBzZWxlY3RvciArICIqIiA6IHNlbGVjdG9yOwoKICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGwgPSByb290Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgIFNp
enpsZSggc2VsZWN0b3IsIHJvb3RbaV0sIHRtcFNldCApOwogICAgICAgIH0KCiAgICAgICAgcmV0
dXJuIFNpenpsZS5maWx0ZXIoIGxhdGVyLCB0bXBTZXQgKTsKfTsKCi8vIEVYUE9TRQpqUXVlcnku
ZmluZCA9IFNpenpsZTsKalF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzOwpqUXVlcnkuZXhw
clsiOiJdID0galF1ZXJ5LmV4cHIuZmlsdGVyczsKalF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlx
dWVTb3J0OwpqUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OwpqUXVlcnkuaXNYTUxEb2MgPSBT
aXp6bGUuaXNYTUw7CmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWluczsKCgp9KSgpOwoK
CnZhciBydW50aWwgPSAvVW50aWwkLywKICAgICAgICBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVu
dHN8cHJldlVudGlsfHByZXZBbGwpLywKICAgICAgICAvLyBOb3RlOiBUaGlzIFJlZ0V4cCBzaG91
bGQgYmUgaW1wcm92ZWQsIG9yIGxpa2VseSBwdWxsZWQgZnJvbSBTaXp6bGUKICAgICAgICBybXVs
dGlzZWxlY3RvciA9IC8sLywKICAgICAgICBpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC8sCiAg
ICAgICAgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsCiAgICAgICAgUE9TID0galF1ZXJ5
LmV4cHIubWF0Y2guUE9TLAogICAgICAgIC8vIG1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNl
IGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0CiAgICAgICAgZ3Vh
cmFudGVlZFVuaXF1ZSA9IHsKICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0cnVlLAogICAgICAg
ICAgICAgICAgY29udGVudHM6IHRydWUsCiAgICAgICAgICAgICAgICBuZXh0OiB0cnVlLAogICAg
ICAgICAgICAgICAgcHJldjogdHJ1ZQogICAgICAgIH07CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAg
ICAgICBmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAgICB2YXIgc2Vs
ZiA9IHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGksIGw7CgogICAgICAgICAgICAgICAg
aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlcihmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHNlbGYubGVuZ3RoOyBp
IDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHZhciByZXQgPSB0aGlzLnB1c2hTdGFjayggIiIsICJmaW5kIiwgc2VsZWN0
b3IgKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLCBuLCByOwoKICAgICAgICAgICAg
ICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJldC5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5maW5kKCBzZWxlY3RvciwgdGhpc1tpXSwgcmV0ICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGkgPiAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXN1bHRzIGFyZSB1bmlxdWUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBuID0gbGVuZ3RoOyBuIDwgcmV0Lmxlbmd0aDsgbisrICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggciA9IDA7IHIg
PCBsZW5ndGg7IHIrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCByZXRbcl0gPT09IHJldFtuXSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuc3BsaWNlKG4tLSwgMSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIGhhczog
ZnVuY3Rpb24oIHRhcmdldCApIHsKICAgICAgICAgICAgICAgIHZhciB0YXJnZXRzID0galF1ZXJ5
KCB0YXJnZXQgKTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGFyZ2V0cy5s
ZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbaV0gKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgfSwKCiAgICAgICAgbm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyh0aGlzLCBzZWxlY3Rvciwg
ZmFsc2UpLCAibm90Iiwgc2VsZWN0b3IpOwogICAgICAgIH0sCgogICAgICAgIGZpbHRlcjogZnVu
Y3Rpb24oIHNlbGVjdG9yICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNr
KCB3aW5ub3codGhpcywgc2VsZWN0b3IsIHRydWUpLCAiZmlsdGVyIiwgc2VsZWN0b3IgKTsKICAg
ICAgICB9LAoKICAgICAgICBpczogZnVuY3Rpb24oIHNlbGVjdG9yICkgewogICAgICAgICAgICAg
ICAgcmV0dXJuICEhc2VsZWN0b3IgJiYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8K
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMgKS5s
ZW5ndGggPiAwIDoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIoIHNlbGVjdG9y
ICkubGVuZ3RoID4gMCApOwogICAgICAgIH0sCgogICAgICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBz
ZWxlY3RvcnMsIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gW10sIGksIGws
IGN1ciA9IHRoaXNbMF07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIEFycmF5
CiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBzZWxlY3RvcnMgKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoLCBzZWxlY3RvciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaGVzID0ge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGV2ZWwgPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXIgJiYgc2Vs
ZWN0b3JzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBp
ID0gMCwgbCA9IHNlbGVjdG9ycy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFtYXRjaGVzWyBzZWxlY3Rv
ciBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXRjaGVzWyBzZWxlY3RvciBdID0gUE9TLnRlc3QoIHNlbGVjdG9yICkgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0
b3IsIGNvbnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgJiYgY3VyLm93
bmVyRG9jdW1lbnQgJiYgY3VyICE9PSBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggc2VsZWN0b3IgaW4gbWF0Y2hlcyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBtYXRjaGVzWyBz
ZWxlY3RvciBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBtYXRjaC5qcXVlcnkgPyBtYXRjaC5pbmRleCggY3VyICkgPiAtMSA6IGpRdWVyeSgg
Y3VyICkuaXMoIG1hdGNoICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goeyBzZWxlY3Rvcjogc2VsZWN0b3IsIGVsZW06
IGN1ciwgbGV2ZWw6IGxldmVsIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVu
dE5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCsrOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBTdHJpbmcKICAgICAgICAgICAgICAgIHZhciBwb3MgPSBQT1Mu
dGVzdCggc2VsZWN0b3JzICkgfHwgdHlwZW9mIHNlbGVjdG9ycyAhPT0gInN0cmluZyIgPwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8
IHRoaXMuY29udGV4dCApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOwoKICAg
ICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IHRoaXNbaV07CgogICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoIGN1ciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHBvcyA/IHBvcy5pbmRleChjdXIpID4gLTEgOiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0
b3IoY3VyLCBzZWxlY3RvcnMpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0LnB1c2goIGN1ciApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9k
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWN1ciB8fCAh
Y3VyLm93bmVyRG9jdW1lbnQgfHwgY3VyID09PSBjb250ZXh0IHx8IGN1ci5ub2RlVHlwZSA9PT0g
MTEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldCA9IHJldC5sZW5ndGggPiAxID8galF1ZXJ5
LnVuaXF1ZSggcmV0ICkgOiByZXQ7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0
YWNrKCByZXQsICJjbG9zZXN0Iiwgc2VsZWN0b3JzICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8g
RGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbgogICAgICAgIC8vIHRo
ZSBtYXRjaGVkIHNldCBvZiBlbGVtZW50cwogICAgICAgIGluZGV4OiBmdW5jdGlvbiggZWxlbSAp
IHsKCiAgICAgICAgICAgICAgICAvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVu
dAogICAgICAgICAgICAgICAgaWYgKCAhZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSA/IHRoaXMucHJldkFsbCgp
Lmxlbmd0aCA6IC0xOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIGluZGV4
IGluIHNlbGVjdG9yCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5n
IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KCB0aGlz
WzBdLCBqUXVlcnkoIGVsZW0gKSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudAogICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQK
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5qcXVlcnkgPyBlbGVtWzBdIDogZWxlbSwgdGhp
cyApOwogICAgICAgIH0sCgogICAgICAgIGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0
ICkgewogICAgICAgICAgICAgICAgdmFyIHNldCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmlu
ZyIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IsIGNv
bnRleHQgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1ha2VBcnJh
eSggc2VsZWN0b3IgJiYgc2VsZWN0b3Iubm9kZVR5cGUgPyBbIHNlbGVjdG9yIF0gOiBzZWxlY3Rv
ciApLAogICAgICAgICAgICAgICAgICAgICAgICBhbGwgPSBqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0
KCksIHNldCApOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggaXNEaXNj
b25uZWN0ZWQoIHNldFswXSApIHx8IGlzRGlzY29ubmVjdGVkKCBhbGxbMF0gKSA/CiAgICAgICAg
ICAgICAgICAgICAgICAgIGFsbCA6CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS51bmlx
dWUoIGFsbCApICk7CiAgICAgICAgfSwKCiAgICAgICAgYW5kU2VsZjogZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoIHRoaXMucHJldk9iamVjdCApOwogICAgICAg
IH0KfSk7CgovLyBBIHBhaW5mdWxseSBzaW1wbGUgY2hlY2sgdG8gc2VlIGlmIGFuIGVsZW1lbnQg
aXMgZGlzY29ubmVjdGVkCi8vIGZyb20gYSBkb2N1bWVudCAoc2hvdWxkIGJlIGltcHJvdmVkLCB3
aGVyZSBmZWFzaWJsZSkuCmZ1bmN0aW9uIGlzRGlzY29ubmVjdGVkKCBub2RlICkgewogICAgICAg
IHJldHVybiAhbm9kZSB8fCAhbm9kZS5wYXJlbnROb2RlIHx8IG5vZGUucGFyZW50Tm9kZS5ub2Rl
VHlwZSA9PT0gMTE7Cn0KCmpRdWVyeS5lYWNoKHsKICAgICAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBl
bGVtICkgewogICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBh
cmVudCA6IG51bGw7CiAgICAgICAgfSwKICAgICAgICBwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSAp
IHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIg
KTsKICAgICAgICB9LAogICAgICAgIHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVu
dGlsICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnRO
b2RlIiwgdW50aWwgKTsKICAgICAgICB9LAogICAgICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5udGgoIGVsZW0sIDIsICJuZXh0U2libGlu
ZyIgKTsKICAgICAgICB9LAogICAgICAgIHByZXY6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5udGgoIGVsZW0sIDIsICJwcmV2aW91c1NpYmxpbmciICk7
CiAgICAgICAgfSwKICAgICAgICBuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciICk7CiAgICAgICAg
fSwKICAgICAgICBwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJl
dHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOwogICAgICAgIH0sCiAg
ICAgICAgbmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJsaW5nIiwgdW50aWwgKTsKICAg
ICAgICB9LAogICAgICAgIHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmci
LCB1bnRpbCApOwogICAgICAgIH0sCiAgICAgICAgc2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5zaWJsaW5nKCBlbGVtLnBhcmVudE5vZGUu
Zmlyc3RDaGlsZCwgZWxlbSApOwogICAgICAgIH0sCiAgICAgICAgY2hpbGRyZW46IGZ1bmN0aW9u
KCBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5zaWJsaW5nKCBlbGVtLmZp
cnN0Q2hpbGQgKTsKICAgICAgICB9LAogICAgICAgIGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSAp
IHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpZnJhbWUi
ICkgPwogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBlbGVt
LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQgOgogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
bWFrZUFycmF5KCBlbGVtLmNoaWxkTm9kZXMgKTsKICAgICAgICB9Cn0sIGZ1bmN0aW9uKCBuYW1l
LCBmbiApIHsKICAgICAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2Vs
ZWN0b3IgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0galF1ZXJ5Lm1hcCggdGhpcywgZm4s
IHVudGlsICksCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB2YXJpYWJsZSAnYXJncycg
d2FzIGludHJvZHVjZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRo
dWIuY29tL2pxdWVyeS9qcXVlcnkvY29tbWl0LzUyYTAyMzgKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdG8gd29yayBhcm91bmQgYSBidWcgaW4gQ2hyb21lIDEwIChEZXYpIGFuZCBzaG91bGQg
YmUgcmVtb3ZlZCB3aGVuIHRoZSBidWcgaXMgZml4ZWQuCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEwNTAKICAg
ICAgICAgICAgICAgICAgICAgICAgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTsKCiAgICAg
ICAgICAgICAgICBpZiAoICFydW50aWwudGVzdCggbmFtZSApICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBzZWxlY3RvciA9IHVudGlsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0ID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHJldCAp
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldCA9IHRoaXMubGVuZ3RoID4g
MSAmJiAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiBy
ZXQ7CgogICAgICAgICAgICAgICAgaWYgKCAodGhpcy5sZW5ndGggPiAxIHx8IHJtdWx0aXNlbGVj
dG9yLnRlc3QoIHNlbGVjdG9yICkpICYmIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJldC5yZXZlcnNlKCk7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsIG5hbWUsIGFy
Z3Muam9pbigiLCIpICk7CiAgICAgICAgfTsKfSk7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICBm
aWx0ZXI6IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkgewogICAgICAgICAgICAgICAgaWYg
KCBub3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSAiOm5vdCgiICsgZXhwciAr
ICIpIjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbXMubGVu
Z3RoID09PSAxID8KICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1Nl
bGVjdG9yKGVsZW1zWzBdLCBleHByKSA/IFsgZWxlbXNbMF0gXSA6IFtdIDoKICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlcyhleHByLCBlbGVtcyk7CiAgICAgICAgfSwK
CiAgICAgICAgZGlyOiBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHsKICAgICAgICAgICAg
ICAgIHZhciBtYXRjaGVkID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGVsZW1b
IGRpciBdOwoKICAgICAgICAgICAgICAgIHdoaWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0g
OSAmJiAodW50aWwgPT09IHVuZGVmaW5lZCB8fCBjdXIubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVy
eSggY3VyICkuaXMoIHVudGlsICkpICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1
ci5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aGVkLnB1c2goIGN1ciApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIGN1ciA9IGN1cltkaXJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoZWQ7CiAgICAgICAgfSwKCiAgICAgICAgbnRoOiBmdW5jdGlvbiggY3Vy
LCByZXN1bHQsIGRpciwgZWxlbSApIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8
fCAxOwogICAgICAgICAgICAgICAgdmFyIG51bSA9IDA7CgogICAgICAgICAgICAgICAgZm9yICgg
OyBjdXI7IGN1ciA9IGN1cltkaXJdICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1
ci5ub2RlVHlwZSA9PT0gMSAmJiArK251bSA9PT0gcmVzdWx0ICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGN1cjsKICAgICAgICB9LAoKICAgICAg
ICBzaWJsaW5nOiBmdW5jdGlvbiggbiwgZWxlbSApIHsKICAgICAgICAgICAgICAgIHZhciByID0g
W107CgogICAgICAgICAgICAgICAgZm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5wdXNoKCBuICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1
cm4gcjsKICAgICAgICB9Cn0pOwoKLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25h
bGl0eSBmb3IgZmlsdGVyIGFuZCBub3QKZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlm
aWVyLCBrZWVwICkgewoKICAgICAgICAvLyBDYW4ndCBwYXNzIG51bGwgb3IgdW5kZWZpbmVkIHRv
IGluZGV4T2YgaW4gRmlyZWZveCA0CiAgICAgICAgLy8gU2V0IHRvIDAgdG8gc2tpcCBzdHJpbmcg
Y2hlY2sKICAgICAgICBxdWFsaWZpZXIgPSBxdWFsaWZpZXIgfHwgMDsKCiAgICAgICAgaWYgKCBq
UXVlcnkuaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcmV0VmFsID0gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSAp
OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsID09PSBrZWVwOwogICAgICAg
ICAgICAgICAgfSk7CgogICAgICAgIH0gZWxzZSBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVs
ZW0sIGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbSA9PT0gcXVhbGlm
aWVyKSA9PT0ga2VlcDsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICB9IGVsc2UgaWYgKCB0
eXBlb2YgcXVhbGlmaWVyID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgIHZhciBmaWx0
ZXJlZCA9IGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7CiAgICAgICAgICAgICAg
ICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIGlzU2ltcGxlLnRlc3QoIHF1YWxpZmllciApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmZpbHRlcihxdWFsaWZpZXIs
IGZpbHRlcmVkLCAha2VlcCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICBxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGZpbHRlcmVk
ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4galF1ZXJ5Lmdy
ZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAgICAgcmV0dXJu
IChqUXVlcnkuaW5BcnJheSggZWxlbSwgcXVhbGlmaWVyICkgPj0gMCkgPT09IGtlZXA7CiAgICAg
ICAgfSk7Cn0KCgoKCnZhciByaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/OlxkK3xudWxs
KSIvZywKICAgICAgICBybGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCiAgICAgICAgcnhodG1s
VGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFt
KSgoW1x3Ol0rKVtePl0qKVwvPi9pZywKICAgICAgICBydGFnTmFtZSA9IC88KFtcdzpdKykvLAog
ICAgICAgIHJ0Ym9keSA9IC88dGJvZHkvaSwKICAgICAgICByaHRtbCA9IC88fCYjP1x3KzsvLAog
ICAgICAgIHJub2NhY2hlID0gLzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkv
aSwKICAgICAgICAvLyBjaGVja2VkPSJjaGVja2VkIiBvciBjaGVja2VkCiAgICAgICAgcmNoZWNr
ZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwKICAgICAgICByc2NyaXB0
VHlwZSA9IC9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksCiAgICAgICAgcmNsZWFuU2NyaXB0ID0gL15c
cyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sCiAgICAgICAgd3JhcE1hcCA9IHsKICAgICAgICAgICAg
ICAgIG9wdGlvbjogWyAxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVj
dD4iIF0sCiAgICAgICAgICAgICAgICBsZWdlbmQ6IFsgMSwgIjxmaWVsZHNldD4iLCAiPC9maWVs
ZHNldD4iIF0sCiAgICAgICAgICAgICAgICB0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxl
PiIgXSwKICAgICAgICAgICAgICAgIHRyOiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5
PjwvdGFibGU+IiBdLAogICAgICAgICAgICAgICAgdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRy
PiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCiAgICAgICAgICAgICAgICBjb2w6IFsgMiwg
Ijx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4i
IF0sCiAgICAgICAgICAgICAgICBhcmVhOiBbIDEsICI8bWFwPiIsICI8L21hcD4iIF0sCiAgICAg
ICAgICAgICAgICBfZGVmYXVsdDogWyAwLCAiIiwgIiIgXQogICAgICAgIH07Cgp3cmFwTWFwLm9w
dGdyb3VwID0gd3JhcE1hcC5vcHRpb247CndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0g
d3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7CndyYXBN
YXAudGggPSB3cmFwTWFwLnRkOwoKLy8gSUUgY2FuJ3Qgc2VyaWFsaXplIDxsaW5rPiBhbmQgPHNj
cmlwdD4gdGFncyBub3JtYWxseQppZiAoICFqUXVlcnkuc3VwcG9ydC5odG1sU2VyaWFsaXplICkg
ewogICAgICAgIHdyYXBNYXAuX2RlZmF1bHQgPSBbIDEsICJkaXY8ZGl2PiIsICI8L2Rpdj4iIF07
Cn0KCmpRdWVyeS5mbi5leHRlbmQoewogICAgICAgIHRleHQ6IGZ1bmN0aW9uKCB0ZXh0ICkgewog
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbih0ZXh0KSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0KCB0ZXh0LmNhbGwodGhpcywgaSwgc2Vs
Zi50ZXh0KCkpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHRleHQgIT09ICJvYmplY3QiICYmIHRleHQg
IT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1w
dHkoKS5hcHBlbmQoICh0aGlzWzBdICYmIHRoaXNbMF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVu
dCkuY3JlYXRlVGV4dE5vZGUoIHRleHQgKSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkudGV4dCggdGhpcyApOwogICAgICAgIH0sCgogICAgICAgIHdy
YXBBbGw6IGZ1bmN0aW9uKCBodG1sICkgewogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggaHRtbCApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnko
dGhpcykud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMsIGkpICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRh
cmdldCBhcm91bmQKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXAgPSBqUXVlcnkoIGh0
bWwsIHRoaXNbMF0ub3duZXJEb2N1bWVudCApLmVxKDApLmNsb25lKHRydWUpOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbMF0gKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgd3JhcC5tYXAoZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCAm
JiBlbGVtLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS5maXJzdENoaWxkOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW07CiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmFwcGVuZCggdGhpcyApOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgog
ICAgICAgIHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7CiAgICAgICAgICAgICAgICBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeSh0aGlzKS53cmFwSW5uZXIoIGh0bWwuY2FsbCh0aGlzLCBpKSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIg
c2VsZiA9IGpRdWVyeSggdGhpcyApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRlbnRzID0gc2VsZi5jb250ZW50cygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBj
b250ZW50cy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVu
dHMud3JhcEFsbCggaHRtbCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCggaHRtbCApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAg
ICB3cmFwOiBmdW5jdGlvbiggaHRtbCApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndy
YXBBbGwoIGh0bWwgKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIHVu
d3JhcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKS5l
YWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkubm9k
ZU5hbWUoIHRoaXMsICJib2R5IiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkuZW5kKCk7CiAgICAgICAgfSwKCiAg
ICAgICAgYXBwZW5kOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRv
bU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKCBlbGVtICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIHByZXBlbmQ6
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1l
bnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0aGlzLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLmZpcnN0Q2hpbGQgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAgYmVm
b3JlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSAmJiB0aGlzWzBd
LnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1h
bmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBhcmd1bWVudHMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2V0ID0g
alF1ZXJ5KGFyZ3VtZW50c1swXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wdXNoLmFw
cGx5KCBzZXQsIHRoaXMudG9BcnJheSgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnB1c2hTdGFjayggc2V0LCAiYmVmb3JlIiwgYXJndW1lbnRzICk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgYWZ0ZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgICAgaWYgKCB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rp
b24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRO
b2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFyZ3VtZW50cy5sZW5n
dGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZXQgPSB0aGlzLnB1c2hTdGFjaygg
dGhpcywgImFmdGVyIiwgYXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5w
dXNoLmFwcGx5KCBzZXQsIGpRdWVyeShhcmd1bWVudHNbMF0pLnRvQXJyYXkoKSApOwogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc2V0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0s
CgogICAgICAgIC8vIGtlZXBEYXRhIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS0tZG8gbm90IGRv
Y3VtZW50CiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IsIGtlZXBEYXRhICkgewog
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IHRoaXNbaV0pICE9
IG51bGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc2VsZWN0b3IgfHwg
alF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIFsgZWxlbSBdICkubGVuZ3RoICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUgPT09
IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xl
YW5EYXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0s
CgogICAgICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMCwgZWxlbTsgKGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBs
ZWFrcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzCiAgICAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxkICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCBk
YXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKICAgICAgICAgICAgICAgIGRhdGFB
bmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7
CiAgICAgICAgICAgICAgICBkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09
IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7CgogICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZl
bnRzICk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICBodG1sOiBmdW5j
dGlvbiggdmFsdWUgKSB7CiAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzWzBdICYmIHRoaXNbMF0ubm9k
ZVR5cGUgPT09IDEgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbMF0uaW5u
ZXJIVE1MLnJlcGxhY2UocmlubGluZWpRdWVyeSwgIiIpIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudWxsOwoKICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBh
IHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgIXJub2NhY2hlLnRlc3QoIHZhbHVlICkg
JiYKICAgICAgICAgICAgICAgICAgICAgICAgKGpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNw
YWNlIHx8ICFybGVhZGluZ1doaXRlc3BhY2UudGVzdCggdmFsdWUgKSkgJiYKICAgICAgICAgICAg
ICAgICAgICAgICAgIXdyYXBNYXBbIChydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJd
KVsxXS50b0xvd2VyQ2FzZSgpIF0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IHZhbHVlLnJlcGxhY2UocnhodG1sVGFnLCAiPCQxPjwvJDI+Iik7CgogICAgICAgICAgICAgICAg
ICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQg
bWVtb3J5IGxlYWtzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHRoaXNbaV0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIHRoaXNbaV0uZ2V0RWxlbWVudHNC
eVRhZ05hbWUoIioiKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzW2ldLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhj
ZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICB9
IGNhdGNoKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCku
YXBwZW5kKCB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbihpKXsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLmh0bWwoIHZhbHVlLmNhbGwodGhpcywgaSwgc2VsZi5odG1sKCkp
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwK
CiAgICAgICAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAg
IGlmICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbGVtZW50cyBhcmUgcmVtb3ZlZCBmcm9tIHRo
ZSBET00gYmVmb3JlIHRoZXkgYXJlIGluc2VydGVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoaXMgY2FuIGhlbHAgZml4IHJlcGxhY2luZyBhIHBhcmVudCB3aXRoIGNoaWxkIGVsZW1lbnRz
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbihpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2Vs
ZiA9IGpRdWVyeSh0aGlzKSwgb2xkID0gc2VsZi5odG1sKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcGxhY2VXaXRoKCB2YWx1ZS5jYWxsKCB0aGlzLCBp
LCBvbGQgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1
ZSAhPT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBqUXVlcnkoIHZhbHVlICkuZGV0YWNoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLm5leHRTaWJsaW5nLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gdGhpcy5wYXJl
bnROb2RlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5y
ZW1vdmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuZXh0ICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KG5leHQpLmJlZm9y
ZSggdmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHBhcmVudCkuYXBwZW5k
KCB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpID8gdmFs
dWUoKSA6IHZhbHVlKSwgInJlcGxhY2VXaXRoIiwgdmFsdWUgKSA6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpczsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAg
ICBkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRydWUgKTsKICAgICAgICB9LAoKICAgICAgICBkb21NYW5p
cDogZnVuY3Rpb24oIGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHZh
ciByZXN1bHRzLCBmaXJzdCwgZnJhZ21lbnQsIHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBhcmdzWzBdLAogICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzID0gW107
CgogICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNv
bnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0CiAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3Vw
cG9ydC5jaGVja0Nsb25lICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIHZhbHVl
ID09PSAic3RyaW5nIiAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxi
YWNrLCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdID0gdmFsdWUuY2FsbCh0aGlzLCBpLCB0
YWJsZSA/IHNlbGYuaHRtbCgpIDogdW5kZWZpbmVkKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmRvbU1hbmlwKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYg
KCB0aGlzWzBdICkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSB2YWx1ZSAmJiB2
YWx1ZS5wYXJlbnROb2RlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4g
YSBmcmFnbWVudCwganVzdCB1c2UgdGhhdCBpbnN0ZWFkIG9mIGJ1aWxkaW5nIGEgbmV3IG9uZQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0LnBhcmVudE5vZGUgJiYg
cGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVu
Z3RoID09PSB0aGlzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRzID0geyBmcmFnbWVudDogcGFyZW50IH07CgogICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBqUXVlcnku
YnVpbGRGcmFnbWVudCggYXJncywgdGhpcywgc2NyaXB0cyApOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IHJlc3VsdHMuZnJhZ21l
bnQ7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVu
Z3RoID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZnJh
Z21lbnQgPSBmcmFnbWVudC5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZnJhZ21lbnQuZmly
c3RDaGlsZDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBmaXJzdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSA9
IHRhYmxlICYmIGpRdWVyeS5ub2RlTmFtZSggZmlyc3QsICJ0ciIgKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGgsIGxhc3RJ
bmRleCA9IGwgLSAxOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2suY2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGFibGUgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QodGhpc1tpXSwgZmlyc3QpIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCB3ZSBkbyBub3QgbGVhayBtZW1vcnkgYnkgaW5hZHZlcnRlbnRseSBkaXNjYXJkaW5n
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBv
cmlnaW5hbCBmcmFnbWVudCAod2hpY2ggbWlnaHQgaGF2ZSBhdHRhY2hlZCBkYXRhKSBpbnN0ZWFk
IG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVz
aW5nIGl0OyBpbiBhZGRpdGlvbiwgdXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBvYmplY3QgZm9y
IHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGl0ZW0gaW5zdGVhZCBvZiBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAgYmVpbmcgZW1w
dGllZCBpbmNvcnJlY3RseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKEJ1ZyAjODA3MCkuCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZyYWdtZW50cyBmcm9tIHRo
ZSBmcmFnbWVudCBjYWNoZSBtdXN0IGFsd2F5cyBiZSBjbG9uZWQgYW5kIG5ldmVyIHVzZWQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gcGxhY2Uu
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMu
Y2FjaGVhYmxlIHx8IChsID4gMSAmJiBpIDwgbGFzdEluZGV4KSA/CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNsb25lKCBmcmFn
bWVudCwgdHJ1ZSwgdHJ1ZSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmcmFnbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2NyaXB0cy5s
ZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHNj
cmlwdHMsIGV2YWxTY3JpcHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KfSk7CgpmdW5j
dGlvbiByb290KCBlbGVtLCBjdXIgKSB7CiAgICAgICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZShl
bGVtLCAidGFibGUiKSA/CiAgICAgICAgICAgICAgICAoZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgidGJvZHkiKVswXSB8fAogICAgICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChlbGVtLm93
bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSkpIDoKICAgICAgICAgICAgICAgIGVs
ZW07Cn0KCmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7CgogICAgICAgIGlm
ICggZGVzdC5ub2RlVHlwZSAhPT0gMSB8fCAhalF1ZXJ5Lmhhc0RhdGEoIHNyYyApICkgewogICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIGludGVybmFsS2V5ID0g
alF1ZXJ5LmV4cGFuZG8sCiAgICAgICAgICAgICAgICBvbGREYXRhID0galF1ZXJ5LmRhdGEoIHNy
YyApLAogICAgICAgICAgICAgICAgY3VyRGF0YSA9IGpRdWVyeS5kYXRhKCBkZXN0LCBvbGREYXRh
ICk7CgogICAgICAgIC8vIFN3aXRjaCB0byB1c2UgdGhlIGludGVybmFsIGRhdGEgb2JqZWN0LCBp
ZiBpdCBleGlzdHMsIGZvciB0aGUgbmV4dAogICAgICAgIC8vIHN0YWdlIG9mIGRhdGEgY29weWlu
ZwogICAgICAgIGlmICggKG9sZERhdGEgPSBvbGREYXRhWyBpbnRlcm5hbEtleSBdKSApIHsKICAg
ICAgICAgICAgICAgIHZhciBldmVudHMgPSBvbGREYXRhLmV2ZW50czsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJEYXRhID0gY3VyRGF0YVsgaW50ZXJuYWxLZXkgXSA9IGpRdWVy
eS5leHRlbmQoe30sIG9sZERhdGEpOwoKICAgICAgICAgICAgICAgIGlmICggZXZlbnRzICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY3VyRGF0YS5oYW5kbGU7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGN1ckRhdGEuZXZlbnRzID0ge307CgogICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgdHlwZSBpbiBldmVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsg
aSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2
ZW50LmFkZCggZGVzdCwgdHlwZSArICggZXZlbnRzWyB0eXBlIF1bIGkgXS5uYW1lc3BhY2UgPyAi
LiIgOiAiIiApICsgZXZlbnRzWyB0eXBlIF1bIGkgXS5uYW1lc3BhY2UsIGV2ZW50c1sgdHlwZSBd
WyBpIF0sIGV2ZW50c1sgdHlwZSBdWyBpIF0uZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgIH0KfQoKZnVuY3Rpb24gY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmMsIGRlc3QgKSB7CiAg
ICAgICAgdmFyIG5vZGVOYW1lOwoKICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0
aGluZyBmb3Igbm9uLUVsZW1lbnRzCiAgICAgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gY2xlYXJBdHRy
aWJ1dGVzIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZXMsIHdoaWNoIHdlIGRvbid0IHdhbnQsCiAgICAg
ICAgLy8gYnV0IGFsc28gcmVtb3ZlcyB0aGUgYXR0YWNoRXZlbnQgZXZlbnRzLCB3aGljaCB3ZSAq
ZG8qIHdhbnQKICAgICAgICBpZiAoIGRlc3QuY2xlYXJBdHRyaWJ1dGVzICkgewogICAgICAgICAg
ICAgICAgZGVzdC5jbGVhckF0dHJpYnV0ZXMoKTsKICAgICAgICB9CgogICAgICAgIC8vIG1lcmdl
QXR0cmlidXRlcywgaW4gY29udHJhc3QsIG9ubHkgbWVyZ2VzIGJhY2sgb24gdGhlCiAgICAgICAg
Ly8gb3JpZ2luYWwgYXR0cmlidXRlcywgbm90IHRoZSBldmVudHMKICAgICAgICBpZiAoIGRlc3Qu
bWVyZ2VBdHRyaWJ1dGVzICkgewogICAgICAgICAgICAgICAgZGVzdC5tZXJnZUF0dHJpYnV0ZXMo
IHNyYyApOwogICAgICAgIH0KCiAgICAgICAgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCk7CgogICAgICAgIC8vIElFNi04IGZhaWwgdG8gY2xvbmUgY2hpbGRyZW4gaW5zaWRl
IG9iamVjdCBlbGVtZW50cyB0aGF0IHVzZQogICAgICAgIC8vIHRoZSBwcm9wcmlldGFyeSBjbGFz
c2lkIGF0dHJpYnV0ZSB2YWx1ZSAocmF0aGVyIHRoYW4gdGhlIHR5cGUKICAgICAgICAvLyBhdHRy
aWJ1dGUpIHRvIGlkZW50aWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgdG8gZGlzcGxheQogICAgICAg
IGlmICggbm9kZU5hbWUgPT09ICJvYmplY3QiICkgewogICAgICAgICAgICAgICAgZGVzdC5vdXRl
ckhUTUwgPSBzcmMub3V0ZXJIVE1MOwoKICAgICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0g
ImlucHV0IiAmJiAoc3JjLnR5cGUgPT09ICJjaGVja2JveCIgfHwgc3JjLnR5cGUgPT09ICJyYWRp
byIpICkgewogICAgICAgICAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hl
Y2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveAogICAgICAgICAgICAgICAgLy8gb3IgcmFk
aW8gYnV0dG9uLiBXb3JzZSwgSUU2LTcgZmFpbCB0byBnaXZlIHRoZSBjbG9uZWQgZWxlbWVudAog
ICAgICAgICAgICAgICAgLy8gYSBjaGVja2VkIGFwcGVhcmFuY2UgaWYgdGhlIGRlZmF1bHRDaGVj
a2VkIHZhbHVlIGlzbid0IGFsc28gc2V0CiAgICAgICAgICAgICAgICBpZiAoIHNyYy5jaGVja2Vk
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBkZXN0LmRlZmF1bHRDaGVja2VkID0gZGVzdC5j
aGVja2VkID0gc3JjLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
Ly8gSUU2LTcgZ2V0IGNvbmZ1c2VkIGFuZCBlbmQgdXAgc2V0dGluZyB0aGUgdmFsdWUgb2YgYSBj
bG9uZWQKICAgICAgICAgICAgICAgIC8vIGNoZWNrYm94L3JhZGlvIGJ1dHRvbiB0byBhbiBlbXB0
eSBzdHJpbmcgaW5zdGVhZCBvZiAib24iCiAgICAgICAgICAgICAgICBpZiAoIGRlc3QudmFsdWUg
IT09IHNyYy52YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC52YWx1ZSA9IHNy
Yy52YWx1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gcmV0
dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQKICAgICAgICAv
LyBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9ucwogICAgICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1l
ID09PSAib3B0aW9uIiApIHsKICAgICAgICAgICAgICAgIGRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVm
YXVsdFNlbGVjdGVkOwoKICAgICAgICAvLyBJRTYtOCBmYWlscyB0byBzZXQgdGhlIGRlZmF1bHRW
YWx1ZSB0byB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuCiAgICAgICAgLy8gY2xvbmluZyBvdGhlciB0
eXBlcyBvZiBpbnB1dCBmaWVsZHMKICAgICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlu
cHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKICAgICAgICAgICAgICAgIGRlc3Qu
ZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTsKICAgICAgICB9CgogICAgICAgIC8vIEV2
ZW50IGRhdGEgZ2V0cyByZWZlcmVuY2VkIGluc3RlYWQgb2YgY29waWVkIGlmIHRoZSBleHBhbmRv
CiAgICAgICAgLy8gZ2V0cyBjb3BpZWQgdG9vCiAgICAgICAgZGVzdC5yZW1vdmVBdHRyaWJ1dGUo
IGpRdWVyeS5leHBhbmRvICk7Cn0KCmpRdWVyeS5idWlsZEZyYWdtZW50ID0gZnVuY3Rpb24oIGFy
Z3MsIG5vZGVzLCBzY3JpcHRzICkgewogICAgICAgIHZhciBmcmFnbWVudCwgY2FjaGVhYmxlLCBj
YWNoZXJlc3VsdHMsIGRvYzsKCiAgLy8gbm9kZXMgbWF5IGNvbnRhaW4gZWl0aGVyIGFuIGV4cGxp
Y2l0IGRvY3VtZW50IG9iamVjdCwKICAvLyBhIGpRdWVyeSBjb2xsZWN0aW9uIG9yIGNvbnRleHQg
b2JqZWN0LgogIC8vIElmIG5vZGVzWzBdIGNvbnRhaW5zIGEgdmFsaWQgb2JqZWN0IHRvIGFzc2ln
biB0byBkb2MKICBpZiAoIG5vZGVzICYmIG5vZGVzWzBdICkgewogICAgZG9jID0gbm9kZXNbMF0u
b3duZXJEb2N1bWVudCB8fCBub2Rlc1swXTsKICB9CgogIC8vIEVuc3VyZSB0aGF0IGFuIGF0dHIg
b2JqZWN0IGRvZXNuJ3QgaW5jb3JyZWN0bHkgc3RhbmQgaW4gYXMgYSBkb2N1bWVudCBvYmplY3QK
ICAgICAgICAvLyBDaHJvbWUgYW5kIEZpcmVmb3ggc2VlbSB0byBhbGxvdyB0aGlzIHRvIG9jY3Vy
IGFuZCB3aWxsIHRocm93IGV4Y2VwdGlvbgogICAgICAgIC8vIEZpeGVzICM4OTUwCiAgICAgICAg
aWYgKCAhZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgKSB7CiAgICAgICAgICAgICAgICBkb2Mg
PSBkb2N1bWVudDsKICAgICAgICB9CgogICAgICAgIC8vIE9ubHkgY2FjaGUgInNtYWxsIiAoMS8y
IEtCKSBIVE1MIHN0cmluZ3MgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGRvY3Vt
ZW50CiAgICAgICAgLy8gQ2xvbmluZyBvcHRpb25zIGxvc2VzIHRoZSBzZWxlY3RlZCBzdGF0ZSwg
c28gZG9uJ3QgY2FjaGUgdGhlbQogICAgICAgIC8vIElFIDYgZG9lc24ndCBsaWtlIGl0IHdoZW4g
eW91IHB1dCA8b2JqZWN0PiBvciA8ZW1iZWQ+IGVsZW1lbnRzIGluIGEgZnJhZ21lbnQKICAgICAg
ICAvLyBBbHNvLCBXZWJLaXQgZG9lcyBub3QgY2xvbmUgJ2NoZWNrZWQnIGF0dHJpYnV0ZXMgb24g
Y2xvbmVOb2RlLCBzbyBkb24ndCBjYWNoZQogICAgICAgIGlmICggYXJncy5sZW5ndGggPT09IDEg
JiYgdHlwZW9mIGFyZ3NbMF0gPT09ICJzdHJpbmciICYmIGFyZ3NbMF0ubGVuZ3RoIDwgNTEyICYm
IGRvYyA9PT0gZG9jdW1lbnQgJiYKICAgICAgICAgICAgICAgIGFyZ3NbMF0uY2hhckF0KDApID09
PSAiPCIgJiYgIXJub2NhY2hlLnRlc3QoIGFyZ3NbMF0gKSAmJiAoalF1ZXJ5LnN1cHBvcnQuY2hl
Y2tDbG9uZSB8fCAhcmNoZWNrZWQudGVzdCggYXJnc1swXSApKSApIHsKCiAgICAgICAgICAgICAg
ICBjYWNoZWFibGUgPSB0cnVlOwoKICAgICAgICAgICAgICAgIGNhY2hlcmVzdWx0cyA9IGpRdWVy
eS5mcmFnbWVudHNbIGFyZ3NbMF0gXTsKICAgICAgICAgICAgICAgIGlmICggY2FjaGVyZXN1bHRz
ICYmIGNhY2hlcmVzdWx0cyAhPT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21l
bnQgPSBjYWNoZXJlc3VsdHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBp
ZiAoICFmcmFnbWVudCApIHsKICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gZG9jLmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKTsKICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbiggYXJncywgZG9j
LCBmcmFnbWVudCwgc2NyaXB0cyApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCBjYWNoZWFibGUg
KSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZnJhZ21lbnRzWyBhcmdzWzBdIF0gPSBjYWNoZXJl
c3VsdHMgPyBmcmFnbWVudCA6IDE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4geyBmcmFnbWVu
dDogZnJhZ21lbnQsIGNhY2hlYWJsZTogY2FjaGVhYmxlIH07Cn07CgpqUXVlcnkuZnJhZ21lbnRz
ID0ge307CgpqUXVlcnkuZWFjaCh7CiAgICAgICAgYXBwZW5kVG86ICJhcHBlbmQiLAogICAgICAg
IHByZXBlbmRUbzogInByZXBlbmQiLAogICAgICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIsCiAg
ICAgICAgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCiAgICAgICAgcmVwbGFjZUFsbDogInJlcGxhY2VX
aXRoIgp9LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBu
YW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0g
W10sCiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gdGhpcy5sZW5ndGggPT09IDEgJiYgdGhp
c1swXS5wYXJlbnROb2RlOwoKICAgICAgICAgICAgICAgIGlmICggcGFyZW50ICYmIHBhcmVudC5u
b2RlVHlwZSA9PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmIGluc2Vy
dC5sZW5ndGggPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydFsgb3JpZ2lu
YWwgXSggdGhpc1swXSApOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKCiAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGwgPSBpbnNlcnQubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBlbGVtcyA9IChpID4gMCA/IHRoaXMuY2xvbmUodHJ1ZSkgOiB0
aGlzKS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGluc2Vy
dFtpXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldCA9IHJldC5jb25jYXQoIGVsZW1zICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1l
LCBpbnNlcnQuc2VsZWN0b3IgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Owp9KTsKCmZ1
bmN0aW9uIGdldEFsbCggZWxlbSApIHsKICAgICAgICBpZiAoICJnZXRFbGVtZW50c0J5VGFnTmFt
ZSIgaW4gZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCAiKiIgKTsKCiAgICAgICAgfSBlbHNlIGlmICggInF1ZXJ5U2VsZWN0b3JBbGwiIGlu
IGVsZW0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKCAi
KiIgKTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAg
ICB9Cn0KCi8vIFVzZWQgaW4gY2xlYW4sIGZpeGVzIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wZXJ0
eQpmdW5jdGlvbiBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSApIHsKICAgICAgICBpZiAoIGVsZW0u
dHlwZSA9PT0gImNoZWNrYm94IiB8fCBlbGVtLnR5cGUgPT09ICJyYWRpbyIgKSB7CiAgICAgICAg
ICAgICAgICBlbGVtLmRlZmF1bHRDaGVja2VkID0gZWxlbS5jaGVja2VkOwogICAgICAgIH0KfQov
LyBGaW5kcyBhbGwgaW5wdXRzIGFuZCBwYXNzZXMgdGhlbSB0byBmaXhEZWZhdWx0Q2hlY2tlZApm
dW5jdGlvbiBmaW5kSW5wdXRzKCBlbGVtICkgewogICAgICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1l
KCBlbGVtLCAiaW5wdXQiICkgKSB7CiAgICAgICAgICAgICAgICBmaXhEZWZhdWx0Q2hlY2tlZCgg
ZWxlbSApOwogICAgICAgIH0gZWxzZSBpZiAoICJnZXRFbGVtZW50c0J5VGFnTmFtZSIgaW4gZWxl
bSApIHsKICAgICAgICAgICAgICAgIGpRdWVyeS5ncmVwKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJpbnB1dCIpLCBmaXhEZWZhdWx0Q2hlY2tlZCApOwogICAgICAgIH0KfQoKalF1ZXJ5LmV4
dGVuZCh7CiAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVw
RGF0YUFuZEV2ZW50cyApIHsKICAgICAgICAgICAgICAgIHZhciBjbG9uZSA9IGVsZW0uY2xvbmVO
b2RlKHRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RFbGVtZW50cywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpOwoKICAgICAgICAgICAgICAgIGlmICggKCFqUXVlcnkuc3Vw
cG9ydC5ub0Nsb25lRXZlbnQgfHwgIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSAmJgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVs
ZW0ubm9kZVR5cGUgPT09IDExKSAmJiAhalF1ZXJ5LmlzWE1MRG9jKGVsZW0pICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJRSBjb3BpZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVu
dCB3aGVuIHVzaW5nIGNsb25lTm9kZS4KICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGlu
ZyBkZXRhY2hFdmVudCBvbiB0aGUgY2xvbmUgd2lsbCBhbHNvIHJlbW92ZSB0aGUgZXZlbnRzCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIG9yaWdpbmFsLiBJbiBvcmRlciB0byBn
ZXQgYXJvdW5kIHRoaXMsIHdlIHVzZSBzb21lCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBy
b3ByaWV0YXJ5IG1ldGhvZHMgdG8gY2xlYXIgdGhlIGV2ZW50cy4gVGhhbmtzIHRvIE1vb1Rvb2xz
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGd1eXMgZm9yIHRoaXMgaG90bmVzcy4KCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNsb25lRml4QXR0cmlidXRlcyggZWxlbSwgY2xvbmUgKTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFVzaW5nIFNpenpsZSBoZXJlIGlzIGNyYXp5IHNsb3cs
IHNvIHdlIHVzZSBnZXRFbGVtZW50c0J5VGFnTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbnN0ZWFkCiAgICAgICAgICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBl
bGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xv
bmUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlaXJkIGl0ZXJhdGlvbiBiZWNhdXNl
IElFIHdpbGwgcmVwbGFjZSB0aGUgbGVuZ3RoIHByb3BlcnR5CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHdpdGggYW4gZWxlbWVudCBpZiB5b3UgYXJlIGNsb25pbmcgdGhlIGJvZHkgYW5kIG9u
ZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudHMgb24gdGhlIHBhZ2Ug
aGFzIGEgbmFtZSBvciBpZCBvZiAibGVuZ3RoIgogICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyBub3QgbnVsbDsg
Rml4ZXMgIzk1ODcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlc3RFbGVt
ZW50c1tpXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25l
Rml4QXR0cmlidXRlcyggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRo
ZSBvcmlnaW5hbCB0byB0aGUgY2xvbmUKICAgICAgICAgICAgICAgIGlmICggZGF0YUFuZEV2ZW50
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25l
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVt
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxs
KCBjbG9uZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsg
c3JjRWxlbWVudHNbaV07ICsraSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ldICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBkZXN0
RWxlbWVudHMgPSBudWxsOwoKICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgY2xvbmVkIHNl
dAogICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lOwogICAgICAgIH0sCgogICAgICAgIGNsZWFu
OiBmdW5jdGlvbiggZWxlbXMsIGNvbnRleHQsIGZyYWdtZW50LCBzY3JpcHRzICkgewogICAgICAg
ICAgICAgICAgdmFyIGNoZWNrU2NyaXB0VHlwZTsKCiAgICAgICAgICAgICAgICBjb250ZXh0ID0g
Y29udGV4dCB8fCBkb2N1bWVudDsKCiAgICAgICAgICAgICAgICAvLyAhY29udGV4dC5jcmVhdGVF
bGVtZW50IGZhaWxzIGluIElFIHdpdGggYW4gZXJyb3IgYnV0IHJldHVybnMgdHlwZW9mICdvYmpl
Y3QnCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmNyZWF0ZUVsZW1lbnQgPT09
ICJ1bmRlZmluZWQiICkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4
dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHRbMF0gJiYgY29udGV4dFswXS5vd25lckRvY3VtZW50
IHx8IGRvY3VtZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciByZXQg
PSBbXSwgajsKCiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0g
ZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0
eXBlb2YgZWxlbSA9PT0gIm51bWJlciIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbSArPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ29udmVydCBodG1sIHN0cmluZyBpbnRvIERPTSBub2RlcwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gY29udGV4dC5jcmVhdGVUZXh0Tm9k
ZSggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXggIlhIVE1MIi1zdHlsZSB0
YWdzIGluIGFsbCBicm93c2VycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbSA9IGVsZW0ucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmltIHdoaXRlc3BhY2UsIG90aGVy
d2lzZSBpbmRleE9mIHdvbid0IHdvcmsgYXMgZXhwZWN0ZWQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSAocnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsi
IiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVs
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgg
PSB3cmFwWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaXYgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEdvIHRvIGh0bWwgYW5kIGJhY2ssIHRoZW4gcGVlbCBv
ZmYgZXh0cmEgd3JhcHBlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpdi5pbm5lckhUTUwgPSB3cmFwWzFdICsgZWxlbSArIHdyYXBbMl07CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSB0byB0aGUgcmlnaHQgZGVwdGgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggZGVwdGgtLSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0gZGl2
Lmxhc3RDaGlsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSUUncyBhdXRv
aW5zZXJ0ZWQgPHRib2R5PiBmcm9tIHRhYmxlIGZyYWdtZW50cwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQudGJvZHkgKSB7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgd2Fz
IGEgPHRhYmxlPiwgKm1heSogaGF2ZSBzcHVyaW91cyA8dGJvZHk+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNCb2R5ID0gcnRib2R5LnRlc3Qo
ZWxlbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGJvZHkgPSB0YWcgPT09ICJ0YWJsZSIgJiYgIWhhc0JvZHkgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmZp
cnN0Q2hpbGQgJiYgZGl2LmZpcnN0Q2hpbGQuY2hpbGROb2RlcyA6CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5n
IHdhcyBhIGJhcmUgPHRoZWFkPiBvciA8dGZvb3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwWzFdID09PSAiPHRhYmxl
PiIgJiYgIWhhc0JvZHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuY2hpbGROb2RlcyA6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFtdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaiA9IHRib2R5Lmxlbmd0aCAtIDE7IGogPj0gMCA7IC0taiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVy
eS5ub2RlTmFtZSggdGJvZHlbIGogXSwgInRib2R5IiApICYmICF0Ym9keVsgaiBdLmNoaWxkTm9k
ZXMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGJvZHlbIGogXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0
Ym9keVsgaiBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgY29tcGxldGVseSBraWxscyBs
ZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiBpbm5lckhUTUwgaXMgdXNlZAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRl
c3BhY2UgJiYgcmxlYWRpbmdXaGl0ZXNwYWNlLnRlc3QoIGVsZW0gKSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2Lmluc2VydEJlZm9yZSggY29u
dGV4dC5jcmVhdGVUZXh0Tm9kZSggcmxlYWRpbmdXaGl0ZXNwYWNlLmV4ZWMoZWxlbSlbMF0gKSwg
ZGl2LmZpcnN0Q2hpbGQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZGl2LmNo
aWxkTm9kZXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldHMgZGVmYXVsdENo
ZWNrZWQgZm9yIGFueSByYWRpb3MgYW5kIGNoZWNrYm94ZXMKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYWJvdXQgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4MDYwKQog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuOwogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFqUXVlcnkuc3VwcG9ydC5hcHBlbmRDaGVja2VkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbVswXSAmJiB0eXBlb2YgKGxlbiA9IGVsZW0ubGVuZ3RoKSA9
PT0gIm51bWJlciIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBqID0gMDsgaiA8IGxlbjsgaisrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5kSW5wdXRzKCBlbGVtW2pdICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRJ
bnB1dHMoIGVsZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2Rl
VHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggZWxlbSAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldCA9IGpRdWVyeS5tZXJnZSggcmV0LCBlbGVtICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGZyYWdt
ZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NjcmlwdFR5cGUgPSBmdW5jdGlv
biggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWVsZW0u
dHlwZSB8fCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IHJldFtpXTsgaSsr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2NyaXB0cyAmJiBqUXVl
cnkubm9kZU5hbWUoIHJldFtpXSwgInNjcmlwdCIgKSAmJiAoIXJldFtpXS50eXBlIHx8IHJldFtp
XS50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICJ0ZXh0L2phdmFzY3JpcHQiKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMucHVzaCggcmV0W2ldLnBhcmVu
dE5vZGUgPyByZXRbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggcmV0W2ldICkgOiByZXRbaV0g
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0W2ldLm5vZGVUeXBlID09PSAxICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNU
YWdzID0galF1ZXJ5LmdyZXAoIHJldFtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSggInNjcmlwdCIg
KSwgY2hlY2tTY3JpcHRUeXBlICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXQuc3BsaWNlLmFwcGx5KCByZXQsIFtpICsgMSwgMF0uY29uY2F0KCBq
c1RhZ3MgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQo
IHJldFtpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBy
ZXQ7CiAgICAgICAgfSwKCiAgICAgICAgY2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7CiAg
ICAgICAgICAgICAgICB2YXIgZGF0YSwgaWQsIGNhY2hlID0galF1ZXJ5LmNhY2hlLCBpbnRlcm5h
bEtleSA9IGpRdWVyeS5leHBhbmRvLCBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxl
dGVFeHBhbmRvOwoKICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0g
PSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGVsZW0ubm9kZU5hbWUgJiYgalF1ZXJ5Lm5vRGF0YVtlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCldICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGVsZW1bIGpR
dWVyeS5leHBhbmRvIF07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlkICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjYWNoZVsgaWQgXSAmJiBjYWNoZVsg
aWQgXVsgaW50ZXJuYWxLZXkgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBkYXRhICYmIGRhdGEuZXZlbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggdmFyIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9p
ZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0s
IHR5cGUsIGRhdGEuaGFuZGxlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOdWxsIHRoZSBET00g
cmVmZXJlbmNlIHRvIGF2b2lkIElFNi83LzggbGVhayAoIzcwNTQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEuaGFuZGxlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmhhbmRsZS5lbGVtID0gbnVs
bDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggZGVsZXRlRXhwYW5kbyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBlbGVtLnJlbW92ZUF0dHJpYnV0ZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBqUXVl
cnkuZXhwYW5kbyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9KTsKCmZ1bmN0aW9uIGV2
YWxTY3JpcHQoIGksIGVsZW0gKSB7CiAgICAgICAgaWYgKCBlbGVtLnNyYyApIHsKICAgICAgICAg
ICAgICAgIGpRdWVyeS5hamF4KHsKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBlbGVtLnNy
YywKICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlLAogICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhVHlwZTogInNjcmlwdCIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggKCBlbGVtLnRleHQgfHwg
ZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVySFRNTCB8fCAiIiApLnJlcGxhY2UoIHJjbGVh
blNjcmlwdCwgIi8qJDAqLyIgKSApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCBlbGVtLnBhcmVu
dE5vZGUgKSB7CiAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVs
ZW0gKTsKICAgICAgICB9Cn0KCgoKCnZhciByYWxwaGEgPSAvYWxwaGFcKFteKV0qXCkvaSwKICAg
ICAgICByb3BhY2l0eSA9IC9vcGFjaXR5PShbXildKikvLAogICAgICAgIC8vIGZpeGVkIGZvciBJ
RTksIHNlZSAjODM0NgogICAgICAgIHJ1cHBlciA9IC8oW0EtWl18Xm1zKS9nLAogICAgICAgIHJu
dW1weCA9IC9eLT9cZCsoPzpweCk/JC9pLAogICAgICAgIHJudW0gPSAvXi0/XGQvLAogICAgICAg
IHJyZWxOdW0gPSAvXihbXC0rXSk9KFtcLSsuXGRlXSspLywKCiAgICAgICAgY3NzU2hvdyA9IHsg
cG9zaXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxv
Y2siIH0sCiAgICAgICAgY3NzV2lkdGggPSBbICJMZWZ0IiwgIlJpZ2h0IiBdLAogICAgICAgIGNz
c0hlaWdodCA9IFsgIlRvcCIsICJCb3R0b20iIF0sCiAgICAgICAgY3VyQ1NTLAoKICAgICAgICBn
ZXRDb21wdXRlZFN0eWxlLAogICAgICAgIGN1cnJlbnRTdHlsZTsKCmpRdWVyeS5mbi5jc3MgPSBm
dW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CiAgICAgICAgLy8gU2V0dGluZyAndW5kZWZpbmVkJyBp
cyBhIG5vLW9wCiAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHZhbHVlID09
PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9Cgog
ICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBuYW1lLCB2YWx1ZSwgdHJ1ZSwgZnVu
Y3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
ICE9PSB1bmRlZmluZWQgPwogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVs
ZW0sIG5hbWUsIHZhbHVlICkgOgogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBl
bGVtLCBuYW1lICk7CiAgICAgICAgfSk7Cn07CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICAvLyBB
ZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKICAg
ICAgICAvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkK
ICAgICAgICBjc3NIb29rczogewogICAgICAgICAgICAgICAgb3BhY2l0eTogewogICAgICAgICAg
ICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIg
YmFjayBmcm9tIG9wYWNpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciByZXQgPSBjdXJDU1MoIGVsZW0sICJvcGFjaXR5IiwgIm9wYWNpdHkiICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6
IHJldDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnN0eWxlLm9wYWNpdHk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gRXhjbHVkZSB0aGUg
Zm9sbG93aW5nIGNzcyBwcm9wZXJ0aWVzIHRvIGFkZCBweAogICAgICAgIGNzc051bWJlcjogewog
ICAgICAgICAgICAgICAgImZpbGxPcGFjaXR5IjogdHJ1ZSwKICAgICAgICAgICAgICAgICJmb250
V2VpZ2h0IjogdHJ1ZSwKICAgICAgICAgICAgICAgICJsaW5lSGVpZ2h0IjogdHJ1ZSwKICAgICAg
ICAgICAgICAgICJvcGFjaXR5IjogdHJ1ZSwKICAgICAgICAgICAgICAgICJvcnBoYW5zIjogdHJ1
ZSwKICAgICAgICAgICAgICAgICJ3aWRvd3MiOiB0cnVlLAogICAgICAgICAgICAgICAgInpJbmRl
eCI6IHRydWUsCiAgICAgICAgICAgICAgICAiem9vbSI6IHRydWUKICAgICAgICB9LAoKICAgICAg
ICAvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3Jl
CiAgICAgICAgLy8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZQogICAgICAgIGNzc1Byb3Bz
OiB7CiAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUgZmxvYXQgY3NzIHByb3BlcnR5CiAgICAg
ICAgICAgICAgICAiZmxvYXQiOiBqUXVlcnkuc3VwcG9ydC5jc3NGbG9hdCA/ICJjc3NGbG9hdCIg
OiAic3R5bGVGbG9hdCIKICAgICAgICB9LAoKICAgICAgICAvLyBHZXQgYW5kIHNldCB0aGUgc3R5
bGUgcHJvcGVydHkgb24gYSBET00gTm9kZQogICAgICAgIHN0eWxlOiBmdW5jdGlvbiggZWxlbSwg
bmFtZSwgdmFsdWUsIGV4dHJhICkgewogICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHN0eWxl
cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHls
ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUg
cmlnaHQgbmFtZQogICAgICAgICAgICAgICAgdmFyIHJldCwgdHlwZSwgb3JpZ05hbWUgPSBqUXVl
cnkuY2FtZWxDYXNlKCBuYW1lICksCiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0gZWxl
bS5zdHlsZSwgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07CgogICAgICAgICAg
ICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fCBvcmlnTmFtZTsKCiAg
ICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUKICAgICAgICAg
ICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZl
cnQgcmVsYXRpdmUgbnVtYmVyIHN0cmluZ3MgKCs9IG9yIC09KSB0byByZWxhdGl2ZSBudW1iZXJz
LiAjNzM0NQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICYm
IChyZXQgPSBycmVsTnVtLmV4ZWMoIHZhbHVlICkpICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gKCArKCByZXRbMV0gKyAxKSAqICtyZXRbMl0gKSArIHBhcnNlRmxv
YXQoIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZpeGVzIGJ1ZyAjOTIzNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSAibnVtYmVyIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgTmFOIGFuZCBudWxsIHZhbHVlcyBhcmVuJ3Qg
c2V0LiBTZWU6ICM3MTE2CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVs
bCB8fCB0eXBlID09PSAibnVtYmVyIiAmJiBpc05hTiggdmFsdWUgKSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAn
cHgnIHRvIHRoZSAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJudW1iZXIiICYmICFqUXVlcnkuY3NzTnVtYmVy
WyBvcmlnTmFtZSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9
ICJweCI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVz
dCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFo
b29rcyB8fCAhKCJzZXQiIGluIGhvb2tzKSB8fCAodmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZh
bHVlICkpICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV3JhcHBlZCB0byBwcmV2ZW50IElFIGZyb20gdGhyb3dpbmcgZXJyb3JzIHdoZW4gJ2ludmFs
aWQnIHZhbHVlcyBhcmUgcHJvdmlkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGaXhlcyBidWcgIzU1MDkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVbIG5hbWUgXSA9IHZh
bHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0
ZWQgdmFsdWUgZnJvbSB0aGVyZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYm
ICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSAp
KSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZVsgbmFtZSBdOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0sCgogICAgICAgIGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJh
ICkgewogICAgICAgICAgICAgICAgdmFyIHJldCwgaG9va3M7CgogICAgICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCiAgICAgICAg
ICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApOwogICAgICAgICAgICAgICAg
aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKICAgICAgICAgICAgICAgIG5hbWUgPSBq
UXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCBuYW1lOwoKICAgICAgICAgICAgICAgIC8vIGNzc0Zs
b2F0IG5lZWRzIGEgc3BlY2lhbCB0cmVhdG1lbnQKICAgICAgICAgICAgICAgIGlmICggbmFtZSA9
PT0gImNzc0Zsb2F0IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJmbG9hdCI7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92
aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKICAgICAgICAgICAgICAgIGlm
ICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1
ZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJldDsKCiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0
aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdAogICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggY3VyQ1NTICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyQ1NTKCBl
bGVtLCBuYW1lICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gQSBt
ZXRob2QgZm9yIHF1aWNrbHkgc3dhcHBpbmcgaW4vb3V0IENTUyBwcm9wZXJ0aWVzIHRvIGdldCBj
b3JyZWN0IGNhbGN1bGF0aW9ucwogICAgICAgIHN3YXA6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25z
LCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHZhciBvbGQgPSB7fTsKCiAgICAgICAgICAg
ICAgICAvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMK
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBuYW1lIGluIG9wdGlvbnMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOwogICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCggZWxlbSApOwoKICAg
ICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgb2xkIHZhbHVlcwogICAgICAgICAgICAgICAgZm9y
ICggbmFtZSBpbiBvcHRpb25zICkgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxl
WyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0pOwoK
Ly8gREVQUkVDQVRFRCwgVXNlIGpRdWVyeS5jc3MoKSBpbnN0ZWFkCmpRdWVyeS5jdXJDU1MgPSBq
UXVlcnkuY3NzOwoKalF1ZXJ5LmVhY2goWyJoZWlnaHQiLCAid2lkdGgiXSwgZnVuY3Rpb24oIGks
IG5hbWUgKSB7CiAgICAgICAgalF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7CiAgICAgICAgICAg
ICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB2YWw7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbXB1
dGVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5vZmZzZXRX
aWR0aCAhPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnZXRXSCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LnN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBnZXRXSCggZWxlbSwgbmFtZSwg
ZXh0cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfSwKCiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBybnVtcHgudGVzdCggdmFsdWUgKSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgbmVnYXRpdmUgd2lkdGggYW5kIGhl
aWdodCB2YWx1ZXMgIzE1OTkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IHBhcnNlRmxvYXQoIHZhbHVlICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdmFsdWUgPj0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZSArICJweCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9Owp9KTsKCmlmICggIWpRdWVyeS5zdXBwb3J0Lm9wYWNpdHkgKSB7
CiAgICAgICAgalF1ZXJ5LmNzc0hvb2tzLm9wYWNpdHkgPSB7CiAgICAgICAgICAgICAgICBnZXQ6
IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SUUgdXNlcyBmaWx0ZXJzIGZvciBvcGFjaXR5CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByb3BhY2l0eS50ZXN0KCAoY29tcHV0ZWQgJiYgZWxlbS5jdXJyZW50U3R5bGUgPyBlbGVtLmN1
cnJlbnRTdHlsZS5maWx0ZXIgOiBlbGVtLnN0eWxlLmZpbHRlcikgfHwgIiIgKSA/CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCBwYXJzZUZsb2F0KCBSZWdFeHAuJDEgKSAvIDEwMCAp
ICsgIiIgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkID8gIjEiIDog
IiI7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVs
ZW0sIHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBlbGVtLnN0
eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdHlsZSA9IGVsZW0u
Y3VycmVudFN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgPSBq
UXVlcnkuaXNOYU4oIHZhbHVlICkgPyAiIiA6ICJhbHBoYShvcGFjaXR5PSIgKyB2YWx1ZSAqIDEw
MCArICIpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBjdXJyZW50
U3R5bGUgJiYgY3VycmVudFN0eWxlLmZpbHRlciB8fCBzdHlsZS5maWx0ZXIgfHwgIiI7CgogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJRSBoYXMgdHJvdWJsZSB3aXRoIG9wYWNpdHkgaWYgaXQg
ZG9lcyBub3QgaGF2ZSBsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgaXQg
Ynkgc2V0dGluZyB0aGUgem9vbSBsZXZlbAogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS56
b29tID0gMTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHNldHRpbmcgb3BhY2l0eSB0
byAxLCBhbmQgbm8gb3RoZXIgZmlsdGVycyBleGlzdCAtIGF0dGVtcHQgdG8gcmVtb3ZlIGZpbHRl
ciBhdHRyaWJ1dGUgIzY2NTIKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA+PSAx
ICYmIGpRdWVyeS50cmltKCBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCAiIiApICkgPT09ICIiICkg
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIHN0eWxlLmZpbHRl
ciB0byBudWxsLCAiIiAmICIgIiBzdGlsbCBsZWF2ZSAiZmlsdGVyOiIgaW4gdGhlIGNzc1RleHQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAiZmlsdGVyOiIgaXMgcHJlc2Vu
dCBhdCBhbGwsIGNsZWFyVHlwZSBpcyBkaXNhYmxlZCwgd2Ugd2FudCB0byBhdm9pZCB0aGlzCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3R5bGUucmVtb3ZlQXR0cmlidXRlIGlz
IElFIE9ubHksIGJ1dCBzbyBhcHBhcmVudGx5IGlzIHRoaXMgY29kZSBwYXRoLi4uCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCAiZmlsdGVyIiAp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSB0aGVyZSBpcyBu
byBmaWx0ZXIgc3R5bGUgYXBwbGllZCBpbiBhIGNzcyBydWxlLCB3ZSBhcmUgZG9uZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudFN0eWxlICYmICFjdXJyZW50U3R5
bGUuZmlsdGVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBzZXQgbmV3IGZp
bHRlciB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuZmlsdGVyID0gcmFscGhh
LnRlc3QoIGZpbHRlciApID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIu
cmVwbGFjZSggcmFscGhhLCBvcGFjaXR5ICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbHRlciArICIgIiArIG9wYWNpdHk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsK
fQoKalF1ZXJ5KGZ1bmN0aW9uKCkgewogICAgICAgIC8vIFRoaXMgaG9vayBjYW5ub3QgYmUgYWRk
ZWQgdW50aWwgRE9NIHJlYWR5IGJlY2F1c2UgdGhlIHN1cHBvcnQgdGVzdAogICAgICAgIC8vIGZv
ciBpdCBpcyBub3QgcnVuIHVudGlsIGFmdGVyIERPTSByZWFkeQogICAgICAgIGlmICggIWpRdWVy
eS5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnku
Y3NzSG9va3MubWFyZ2luUmlnaHQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVu
Y3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgd3JvbmcgdmFs
dWUgZm9yIG1hcmdpbi1yaWdodAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdv
cmsgYXJvdW5kIGJ5IHRlbXBvcmFyaWx5IHNldHRpbmcgZWxlbWVudCBkaXNwbGF5IHRvIGlubGlu
ZS1ibG9jawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN3YXAoIGVsZW0sIHsgImRpc3BsYXkiOiAi
aW5saW5lLWJsb2NrIiB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGN1ckNTUyggZWxlbSwgIm1hcmdpbi1yaWdodCIs
ICJtYXJnaW5SaWdodCIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldCA9IGVsZW0uc3R5bGUubWFyZ2luUmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICB9Cn0pOwoKaWYgKCBkb2N1bWVudC5k
ZWZhdWx0VmlldyAmJiBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlICkgewog
ICAgICAgIGdldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKICAgICAg
ICAgICAgICAgIHZhciByZXQsIGRlZmF1bHRWaWV3LCBjb21wdXRlZFN0eWxlOwoKICAgICAgICAg
ICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoIHJ1cHBlciwgIi0kMSIgKS50b0xvd2VyQ2FzZSgp
OwoKICAgICAgICAgICAgICAgIGlmICggIShkZWZhdWx0VmlldyA9IGVsZW0ub3duZXJEb2N1bWVu
dC5kZWZhdWx0VmlldykgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmlu
ZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAoY29tcHV0ZWRTdHls
ZSA9IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKSkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgg
bmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldCA9PT0gIiIgJiYgIWpRdWVy
eS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgZWxlbSApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGpRdWVyeS5zdHlsZSggZWxl
bSwgbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9Owp9CgppZiAoIGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7CiAgICAgICAgY3VycmVudFN0eWxlID0gZnVu
Y3Rpb24oIGVsZW0sIG5hbWUgKSB7CiAgICAgICAgICAgICAgICB2YXIgbGVmdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gZWxlbS5jdXJyZW50U3R5bGUgJiYgZWxlbS5jdXJyZW50U3R5
bGVbIG5hbWUgXSwKICAgICAgICAgICAgICAgICAgICAgICAgcnNMZWZ0ID0gZWxlbS5ydW50aW1l
U3R5bGUgJiYgZWxlbS5ydW50aW1lU3R5bGVbIG5hbWUgXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGUgPSBlbGVtLnN0eWxlOwoKICAgICAgICAgICAgICAgIC8vIEZyb20gdGhlIGF3ZXNv
bWUgaGFjayBieSBEZWFuIEVkd2FyZHMKICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9lcmlrLmVh
ZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIyOTEKCiAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVndWxhciBwaXhlbCBu
dW1iZXIKICAgICAgICAgICAgICAgIC8vIGJ1dCBhIG51bWJlciB0aGF0IGhhcyBhIHdlaXJkIGVu
ZGluZywgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIHBpeGVscwogICAgICAgICAgICAgICAgaWYg
KCAhcm51bXB4LnRlc3QoIHJldCApICYmIHJudW0udGVzdCggcmV0ICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdCA9IHN0eWxlLmxlZnQ7CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0CiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggcnNMZWZ0ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0ucnVudGltZVN0eWxlLmxlZnQgPSBlbGVtLmN1cnJlbnRTdHlsZS5sZWZ0
OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
LmxlZnQgPSBuYW1lID09PSAiZm9udFNpemUiID8gIjFlbSIgOiAocmV0IHx8IDApOwogICAgICAg
ICAgICAgICAgICAgICAgICByZXQgPSBzdHlsZS5waXhlbExlZnQgKyAicHgiOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlcwogICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZS5sZWZ0ID0gbGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCByc0xlZnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5ydW50aW1l
U3R5bGUubGVmdCA9IHJzTGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09ICIiID8gImF1dG8iIDogcmV0
OwogICAgICAgIH07Cn0KCmN1ckNTUyA9IGdldENvbXB1dGVkU3R5bGUgfHwgY3VycmVudFN0eWxl
OwoKZnVuY3Rpb24gZ2V0V0goIGVsZW0sIG5hbWUsIGV4dHJhICkgewoKICAgICAgICAvLyBTdGFy
dCB3aXRoIG9mZnNldCBwcm9wZXJ0eQogICAgICAgIHZhciB2YWwgPSBuYW1lID09PSAid2lkdGgi
ID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LAogICAgICAgICAgICAgICAg
d2hpY2ggPSBuYW1lID09PSAid2lkdGgiID8gY3NzV2lkdGggOiBjc3NIZWlnaHQ7CgogICAgICAg
IGlmICggdmFsID4gMCApIHsKICAgICAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJib3JkZXIi
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggd2hpY2gsIGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWV4dHJhICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGpR
dWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIHRoaXMgKSApIHx8IDA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZXh0cmEgPT09ICJtYXJnaW4iICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgdGhpcyAp
ICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGpRdWVy
eS5jc3MoIGVsZW0sICJib3JkZXIiICsgdGhpcyArICJXaWR0aCIgKSApIHx8IDA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdmFsICsgInB4IjsKICAgICAg
ICB9CgogICAgICAgIC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3Nz
IGlmIG5lY2Vzc2FyeQogICAgICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgbmFtZSApOwog
ICAgICAgIGlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgIHZh
bCA9IGVsZW0uc3R5bGVbIG5hbWUgXSB8fCAwOwogICAgICAgIH0KICAgICAgICAvLyBOb3JtYWxp
emUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQogICAgICAgIHZhbCA9IHBhcnNlRmxv
YXQoIHZhbCApIHx8IDA7CgogICAgICAgIC8vIEFkZCBwYWRkaW5nLCBib3JkZXIsIG1hcmdpbgog
ICAgICAgIGlmICggZXh0cmEgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggd2hpY2gs
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCgg
alF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgdGhpcyApICkgfHwgMDsKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0gInBhZGRpbmciICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCAiYm9y
ZGVyIiArIHRoaXMgKyAiV2lkdGgiICkgKSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXh0cmEgPT09ICJtYXJnaW4iICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3Nz
KCBlbGVtLCBleHRyYSArIHRoaXMgKSApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHZhbCArICJweCI7
Cn0KCmlmICggalF1ZXJ5LmV4cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKICAgICAgICBq
UXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAg
ICAgICAgdmFyIHdpZHRoID0gZWxlbS5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0ID0gZWxlbS5vZmZzZXRIZWlnaHQ7CgogICAgICAgICAgICAgICAgcmV0dXJuICh3
aWR0aCA9PT0gMCAmJiBoZWlnaHQgPT09IDApIHx8ICghalF1ZXJ5LnN1cHBvcnQucmVsaWFibGVI
aWRkZW5PZmZzZXRzICYmIChlbGVtLnN0eWxlLmRpc3BsYXkgfHwgalF1ZXJ5LmNzcyggZWxlbSwg
ImRpc3BsYXkiICkpID09PSAibm9uZSIpOwogICAgICAgIH07CgogICAgICAgIGpRdWVyeS5leHBy
LmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0
dXJuICFqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiggZWxlbSApOwogICAgICAgIH07Cn0KCgoK
CnZhciByMjAgPSAvJTIwL2csCiAgICAgICAgcmJyYWNrZXQgPSAvXFtcXSQvLAogICAgICAgIHJD
UkxGID0gL1xyP1xuL2csCiAgICAgICAgcmhhc2ggPSAvIy4qJC8sCiAgICAgICAgcmhlYWRlcnMg
PSAvXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL21nLCAvLyBJRSBsZWF2ZXMgYW4gXHIgY2hh
cmFjdGVyIGF0IEVPTAogICAgICAgIHJpbnB1dCA9IC9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxk
YXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNl
YXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSwKICAgICAgICAvLyAjNzY1MywgIzgxMjUs
ICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb24KICAgICAgICBybG9jYWxQcm90b2NvbCA9
IC9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdl
dCk6JC8sCiAgICAgICAgcm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sCiAgICAgICAgcnBy
b3RvY29sID0gL15cL1wvLywKICAgICAgICBycXVlcnkgPSAvXD8vLAogICAgICAgIHJzY3JpcHQg
PSAvPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwK
ICAgICAgICByc2VsZWN0VGV4dGFyZWEgPSAvXig/OnNlbGVjdHx0ZXh0YXJlYSkvaSwKICAgICAg
ICByc3BhY2VzQWpheCA9IC9ccysvLAogICAgICAgIHJ0cyA9IC8oWz8mXSlfPVteJl0qLywKICAg
ICAgICBydXJsID0gL14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKSk/
KT8vLAoKICAgICAgICAvLyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kCiAgICAg
ICAgX2xvYWQgPSBqUXVlcnkuZm4ubG9hZCwKCiAgICAgICAgLyogUHJlZmlsdGVycwogICAgICAg
ICAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2Vl
IGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpCiAgICAgICAgICogMikgVGhlc2UgYXJlIGNh
bGxlZDoKICAgICAgICAgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CiAgICAg
ICAgICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcg
aWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQogICAgICAgICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5
cGUKICAgICAgICAgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAogICAg
ICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFu
ZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5lZWRlZAogICAgICAgICAqLwogICAgICAg
IHByZWZpbHRlcnMgPSB7fSwKCiAgICAgICAgLyogVHJhbnNwb3J0cyBiaW5kaW5ncwogICAgICAg
ICAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGUKICAgICAgICAgKiAyKSB0aGUgY2F0Y2hhbGwgc3lt
Ym9sICIqIiBjYW4gYmUgdXNlZAogICAgICAgICAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdp
dGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvICIqIiBpZiBuZWVkZWQKICAgICAg
ICAgKi8KICAgICAgICB0cmFuc3BvcnRzID0ge30sCgogICAgICAgIC8vIERvY3VtZW50IGxvY2F0
aW9uCiAgICAgICAgYWpheExvY2F0aW9uLAoKICAgICAgICAvLyBEb2N1bWVudCBsb2NhdGlvbiBz
ZWdtZW50cwogICAgICAgIGFqYXhMb2NQYXJ0cywKICAgICAgICAKICAgICAgICAvLyBBdm9pZCBj
b21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBh
bmQgZXZhZGUgY29tcHJlc3Npb24KICAgICAgICBhbGxUeXBlcyA9IFsiKi8iXSArIFsiKiJdOwoK
Ly8gIzgxMzgsIElFIG1heSB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKLy8gYSBm
aWVsZCBmcm9tIHdpbmRvdy5sb2NhdGlvbiBpZiBkb2N1bWVudC5kb21haW4gaGFzIGJlZW4gc2V0
CnRyeSB7CiAgICAgICAgYWpheExvY2F0aW9uID0gbG9jYXRpb24uaHJlZjsKfSBjYXRjaCggZSAp
IHsKICAgICAgICAvLyBVc2UgdGhlIGhyZWYgYXR0cmlidXRlIG9mIGFuIEEgZWxlbWVudAogICAg
ICAgIC8vIHNpbmNlIElFIHdpbGwgbW9kaWZ5IGl0IGdpdmVuIGRvY3VtZW50LmxvY2F0aW9uCiAg
ICAgICAgYWpheExvY2F0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7CiAgICAg
ICAgYWpheExvY2F0aW9uLmhyZWYgPSAiIjsKICAgICAgICBhamF4TG9jYXRpb24gPSBhamF4TG9j
YXRpb24uaHJlZjsKfQoKLy8gU2VnbWVudCBsb2NhdGlvbiBpbnRvIHBhcnRzCmFqYXhMb2NQYXJ0
cyA9IHJ1cmwuZXhlYyggYWpheExvY2F0aW9uLnRvTG93ZXJDYXNlKCkgKSB8fCBbXTsKCi8vIEJh
c2UgImNvbnN0cnVjdG9yIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4
VHJhbnNwb3J0CmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJl
ICkgewoKICAgICAgICAvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1
bHRzIHRvICIqIgogICAgICAgIHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBm
dW5jICkgewoKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAh
PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPSBkYXRhVHlwZUV4
cHJlc3Npb247CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9ICIq
IjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCBmdW5jICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhVHlwZXMgPSBk
YXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5zcGxpdCggcnNwYWNlc0FqYXggKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZW5ndGggPSBkYXRhVHlwZXMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VCZWZvcmU7CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHBy
ZXNzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcig7IGkgPCBsZW5ndGg7IGkrKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSBd
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNvbnRyb2wgaWYgd2UncmUg
YXNrZWQgdG8gYWRkIGJlZm9yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFu
eSBleGlzdGluZyBlbGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VC
ZWZvcmUgPSAvXlwrLy50ZXN0KCBkYXRhVHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggcGxhY2VCZWZvcmUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlLnN1YnN0ciggMSApIHx8ICIqIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8
fCBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIGFkZCB0byB0
aGUgc3RydWN0dXJlIGFjY29yZGluZ2x5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlzdFsgcGxhY2VCZWZvcmUgPyAidW5zaGlmdCIgOiAicHVzaCIgXSggZnVuYyApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKfQoKLy8gQmFz
ZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzCmZ1bmN0
aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9y
aWdpbmFsT3B0aW9ucywganFYSFIsCiAgICAgICAgICAgICAgICBkYXRhVHlwZSAvKiBpbnRlcm5h
bCAqLywgaW5zcGVjdGVkIC8qIGludGVybmFsICovICkgewoKICAgICAgICBkYXRhVHlwZSA9IGRh
dGFUeXBlIHx8IG9wdGlvbnMuZGF0YVR5cGVzWyAwIF07CiAgICAgICAgaW5zcGVjdGVkID0gaW5z
cGVjdGVkIHx8IHt9OwoKICAgICAgICBpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlOwoKICAg
ICAgICB2YXIgbGlzdCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSwKICAgICAgICAgICAgICAgIGkg
PSAwLAogICAgICAgICAgICAgICAgbGVuZ3RoID0gbGlzdCA/IGxpc3QubGVuZ3RoIDogMCwKICAg
ICAgICAgICAgICAgIGV4ZWN1dGVPbmx5ID0gKCBzdHJ1Y3R1cmUgPT09IHByZWZpbHRlcnMgKSwK
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbjsKCiAgICAgICAgZm9yKDsgaSA8IGxlbmd0aCAmJiAo
IGV4ZWN1dGVPbmx5IHx8ICFzZWxlY3Rpb24gKTsgaSsrICkgewogICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uID0gbGlzdFsgaSBdKCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7CiAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSBnb3QgcmVkaXJlY3RlZCB0byBhbm90aGVyIGRhdGFUeXBl
CiAgICAgICAgICAgICAgICAvLyB3ZSB0cnkgdGhlcmUgaWYgZXhlY3V0aW5nIG9ubHkgYW5kIG5v
dCBkb25lIGFscmVhZHkKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdGlvbiA9PT0g
InN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWV4ZWN1dGVPbmx5IHx8
IGluc3BlY3RlZFsgc2VsZWN0aW9uIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0aW9uID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hp
ZnQoIHNlbGVjdGlvbiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlv
biA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0
aW9ucywganFYSFIsIHNlbGVjdGlvbiwgaW5zcGVjdGVkICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gSWYgd2UncmUgb25s
eSBleGVjdXRpbmcgb3Igbm90aGluZyB3YXMgc2VsZWN0ZWQKICAgICAgICAvLyB3ZSB0cnkgdGhl
IGNhdGNoYWxsIGRhdGFUeXBlIGlmIG5vdCBkb25lIGFscmVhZHkKICAgICAgICBpZiAoICggZXhl
Y3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiApICYmICFpbnNwZWN0ZWRbICIqIiBdICkgewogICAgICAg
ICAgICAgICAgc2VsZWN0aW9uID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9w
dGlvbnMsIGpxWEhSLCAiKiIsIGluc3BlY3RlZCApOwogICAgICAgIH0KICAgICAgICAvLyB1bm5l
Y2Vzc2FyeSB3aGVuIG9ubHkgZXhlY3V0aW5nIChwcmVmaWx0ZXJzKQogICAgICAgIC8vIGJ1dCBp
dCdsbCBiZSBpZ25vcmVkIGJ5IHRoZSBjYWxsZXIgaW4gdGhhdCBjYXNlCiAgICAgICAgcmV0dXJu
IHNlbGVjdGlvbjsKfQoKLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zCi8vIHRo
YXQgdGFrZXMgImZsYXQiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKQovLyBGaXhl
cyAjOTg4NwpmdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHsKICAgICAgICB2YXIg
a2V5LCBkZWVwLAogICAgICAgICAgICAgICAgZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRp
bmdzLmZsYXRPcHRpb25zIHx8IHt9OwogICAgICAgIGZvcigga2V5IGluIHNyYyApIHsKICAgICAg
ICAgICAgICAgIGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRl
ZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdOwogICAgICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgICBpZiAoIGRlZXAgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5k
KCB0cnVlLCB0YXJnZXQsIGRlZXAgKTsKICAgICAgICB9Cn0KCmpRdWVyeS5mbi5leHRlbmQoewog
ICAgICAgIGxvYWQ6IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7CiAgICAgICAg
ICAgICAgICBpZiAoIHR5cGVvZiB1cmwgIT09ICJzdHJpbmciICYmIF9sb2FkICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gX2xvYWQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoK
ICAgICAgICAgICAgICAgIC8vIERvbid0IGRvIGEgcmVxdWVzdCBpZiBubyBlbGVtZW50cyBhcmUg
YmVpbmcgcmVxdWVzdGVkCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhdGhpcy5sZW5ndGgg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHZhciBvZmYgPSB1cmwuaW5kZXhPZiggIiAiICk7CiAgICAgICAg
ICAgICAgICBpZiAoIG9mZiA+PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2Vs
ZWN0b3IgPSB1cmwuc2xpY2UoIG9mZiwgdXJsLmxlbmd0aCApOwogICAgICAgICAgICAgICAgICAg
ICAgICB1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIC8vIERlZmF1bHQgdG8gYSBHRVQgcmVxdWVzdAogICAgICAgICAgICAgICAgdmFy
IHR5cGUgPSAiR0VUIjsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIHBhcmFtZXRl
ciB3YXMgcHJvdmlkZWQKICAgICAgICAgICAgICAgIGlmICggcGFyYW1zICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtczsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nCiAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBwYXJhbXMgPT09ICJvYmplY3QiICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IGpRdWVyeS5wYXJhbSggcGFyYW1z
LCBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9ICJQT1NUIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICAg
ICAgICAgICAvLyBSZXF1ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKICAgICAgICAgICAgICAgIGpR
dWVyeS5hamF4KHsKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGU6IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBl
OiAiaHRtbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHBhcmFtcywKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ29tcGxldGUgY2FsbGJhY2sgKHJlc3BvbnNlVGV4dCBpcyB1c2Vk
IGludGVybmFsbHkpCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigg
anFYSFIsIHN0YXR1cywgcmVzcG9uc2VUZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFN0b3JlIHRoZSByZXNwb25zZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGpxWEhSIG9i
amVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCA9IGpxWEhS
LnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBzdWNj
ZXNzZnVsLCBpbmplY3QgdGhlIEhUTUwgaW50byBhbGwgdGhlIG1hdGNoZWQgZWxlbWVudHMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpxWEhSLmlzUmVzb2x2ZWQoKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICM0ODI1OiBHZXQgdGhl
IGFjdHVhbCByZXNwb25zZSBpbiBjYXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhIGRhdGFGaWx0ZXIgaXMgcHJlc2VudCBpbiBhamF4U2V0dGluZ3MKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLmRvbmUoZnVuY3Rpb24oIHIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlVGV4dCA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBpZiBhIHNlbGVj
dG9yIHdhcyBzcGVjaWZpZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuaHRtbCggc2VsZWN0b3IgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBkdW1teSBkaXYgdG8gaG9sZCB0aGUgcmVzdWx0cwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIjxk
aXY+IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBpbmplY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVtb3Zpbmcg
dGhlIHNjcmlwdHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0byBhdm9pZCBhbnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMgaW4g
SUUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuYXBwZW5kKHJlc3BvbnNlVGV4dC5yZXBsYWNlKHJzY3JpcHQsICIiKSkKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9jYXRlIHRo
ZSBzcGVjaWZpZWQgZWxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuZmluZChzZWxlY3RvcikgOgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm90LCBqdXN0IGluamVjdCB0aGUg
ZnVsbCByZXN1bHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2VUZXh0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lYWNoKCBjYWxsYmFjaywgWyByZXNw
b25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgc2VyaWFsaXplOiBm
dW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2Vy
aWFsaXplQXJyYXkoKSApOwogICAgICAgIH0sCgogICAgICAgIHNlcmlhbGl6ZUFycmF5OiBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJy
YXkoIHRoaXMuZWxlbWVudHMgKSA6IHRoaXM7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAg
ICAgICAgLmZpbHRlcihmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5uYW1lICYmICF0aGlzLmRpc2FibGVkICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCB0aGlzLmNoZWNrZWQgfHwgcnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMubm9kZU5h
bWUgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlucHV0LnRl
c3QoIHRoaXMudHlwZSApICk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLm1h
cChmdW5jdGlvbiggaSwgZWxlbSApewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0g
alF1ZXJ5KCB0aGlzICkudmFsKCk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFs
ID09IG51bGwgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9u
KCB2YWwsIGkgKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAi
XHJcbiIgKSB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBlbGVtLm5hbWUs
IHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07CiAgICAgICAgICAgICAgICB9
KS5nZXQoKTsKICAgICAgICB9Cn0pOwoKLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZv
ciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHMKalF1ZXJ5LmVhY2goICJhamF4U3RhcnQgYWph
eFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQo
ICIgIiApLCBmdW5jdGlvbiggaSwgbyApewogICAgICAgIGpRdWVyeS5mblsgbyBdID0gZnVuY3Rp
b24oIGYgKXsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJpbmQoIG8sIGYgKTsKICAgICAg
ICB9Owp9KTsKCmpRdWVyeS5lYWNoKCBbICJnZXQiLCAicG9zdCIgXSwgZnVuY3Rpb24oIGksIG1l
dGhvZCApIHsKICAgICAgICBqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwg
Y2FsbGJhY2ssIHR5cGUgKSB7CiAgICAgICAgICAgICAgICAvLyBzaGlmdCBhcmd1bWVudHMgaWYg
ZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZAogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggZGF0YSApICkgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8
fCBjYWxsYmFjazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBkYXRhOwogICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWpheCh7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGU6IG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIHN1
Y2Nlc3M6IGNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogdHlwZQog
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKfSk7CgpqUXVlcnkuZXh0ZW5kKHsKCiAgICAg
ICAgZ2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAg
IHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7
CiAgICAgICAgfSwKCiAgICAgICAgZ2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJh
Y2sgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxs
YmFjaywgImpzb24iICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gQ3JlYXRlcyBhIGZ1bGwgZmxl
ZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXQKICAgICAgICAvLyB3aXRoIGJvdGggYWph
eFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuCiAgICAgICAgLy8gSWYgdGFyZ2V0IGlzIG9t
aXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy4KICAgICAgICBhamF4U2V0dXA6IGZ1bmN0
aW9uKCB0YXJnZXQsIHNldHRpbmdzICkgewogICAgICAgICAgICAgICAgaWYgKCBzZXR0aW5ncyAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3QK
ICAgICAgICAgICAgICAgICAgICAgICAgYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNl
dHRpbmdzICk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzCiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRp
bmdzID0gdGFyZ2V0OwogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBqUXVlcnkuYWph
eFNldHRpbmdzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYWpheEV4dGVuZCgg
dGFyZ2V0LCBzZXR0aW5ncyApOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgICAg
ICB9LAoKICAgICAgICBhamF4U2V0dGluZ3M6IHsKICAgICAgICAgICAgICAgIHVybDogYWpheExv
Y2F0aW9uLAogICAgICAgICAgICAgICAgaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWph
eExvY1BhcnRzWyAxIF0gKSwKICAgICAgICAgICAgICAgIGdsb2JhbDogdHJ1ZSwKICAgICAgICAg
ICAgICAgIHR5cGU6ICJHRVQiLAogICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICJhcHBsaWNh
dGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLAogICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGE6
IHRydWUsCiAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSwKICAgICAgICAgICAgICAgIC8qCiAg
ICAgICAgICAgICAgICB0aW1lb3V0OiAwLAogICAgICAgICAgICAgICAgZGF0YTogbnVsbCwKICAg
ICAgICAgICAgICAgIGRhdGFUeXBlOiBudWxsLAogICAgICAgICAgICAgICAgdXNlcm5hbWU6IG51
bGwsCiAgICAgICAgICAgICAgICBwYXNzd29yZDogbnVsbCwKICAgICAgICAgICAgICAgIGNhY2hl
OiBudWxsLAogICAgICAgICAgICAgICAgdHJhZGl0aW9uYWw6IGZhbHNlLAogICAgICAgICAgICAg
ICAgaGVhZGVyczoge30sCiAgICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAgIGFjY2Vw
dHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sLCB0ZXh0
L3htbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAogICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0OiAidGV4dC9wbGFpbiIsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLAogICAgICAgICAg
ICAgICAgICAgICAgICAiKiI6IGFsbFR5cGVzCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAg
ICAgICAgIGNvbnRlbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHhtbDogL3htbC8sCiAg
ICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IC9odG1sLywKICAgICAgICAgICAgICAgICAgICAg
ICAganNvbjogL2pzb24vCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHJlc3Bv
bnNlRmllbGRzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHhtbDogInJlc3BvbnNlWE1MIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogInJlc3BvbnNlVGV4dCIKICAgICAgICAgICAg
ICAgIH0sCgogICAgICAgICAgICAgICAgLy8gTGlzdCBvZiBkYXRhIGNvbnZlcnRlcnMKICAgICAg
ICAgICAgICAgIC8vIDEpIGtleSBmb3JtYXQgaXMgInNvdXJjZV90eXBlIGRlc3RpbmF0aW9uX3R5
cGUiIChhIHNpbmdsZSBzcGFjZSBpbi1iZXR3ZWVuKQogICAgICAgICAgICAgICAgLy8gMikgdGhl
IGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQgZm9yIHNvdXJjZV90eXBlCiAgICAgICAg
ICAgICAgICBjb252ZXJ0ZXJzOiB7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0
IGFueXRoaW5nIHRvIHRleHQKICAgICAgICAgICAgICAgICAgICAgICAgIiogdGV4dCI6IHdpbmRv
dy5TdHJpbmcsCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUg
PSBubyB0cmFuc2Zvcm1hdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgInRleHQgaHRtbCI6
IHRydWUsCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNv
biBleHByZXNzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IGpzb24iOiBqUXVlcnku
cGFyc2VKU09OLAoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGV4dCBhcyB4bWwK
ICAgICAgICAgICAgICAgICAgICAgICAgInRleHQgeG1sIjogalF1ZXJ5LnBhcnNlWE1MCiAgICAg
ICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxk
bid0IGJlIGRlZXAgZXh0ZW5kZWQ6CiAgICAgICAgICAgICAgICAvLyB5b3UgY2FuIGFkZCB5b3Vy
IG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmCiAgICAgICAgICAgICAgICAvLyBhbmQgd2hlbiB5
b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZQogICAgICAgICAgICAgICAgLy8gZGVlcCBl
eHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpCiAgICAgICAgICAgICAgICBmbGF0T3B0aW9uczogewog
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB0cnVlLAogICAgICAgICAgICAgICAgICAg
ICAgICB1cmw6IHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBhamF4
UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKICAg
ICAgICBhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9y
dHMgKSwKCiAgICAgICAgLy8gTWFpbiBtZXRob2QKICAgICAgICBhamF4OiBmdW5jdGlvbiggdXJs
LCBvcHRpb25zICkgewoKICAgICAgICAgICAgICAgIC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNp
bXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB1cmwg
PT09ICJvYmplY3QiICkgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gdXJsOwog
ICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3QKICAgICAg
ICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIHZhciAv
LyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAg
IHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLAogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDYWxsYmFja3MgY29udGV4dAogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
a0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29u
dGV4dCBmb3IgZ2xvYmFsIGV2ZW50cwogICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHRo
ZSBjYWxsYmFja0NvbnRleHQgaWYgb25lIHdhcyBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucwogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaWYgaXQncyBhIERPTSBub2RlIG9yIGEgalF1ZXJ5
IGNvbGxlY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0ID0g
Y2FsbGJhY2tDb250ZXh0ICE9PSBzICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0IGluc3RhbmNlb2Yg
alF1ZXJ5ICkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDogalF1ZXJ5LmV2ZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBEZWZlcnJlZHMKICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQg
PSBqUXVlcnkuRGVmZXJyZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVEZWZl
cnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3Rh
dHVzLWRlcGVuZGVudCBjYWxsYmFja3MKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29k
ZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWZNb2Rp
ZmllZCBrZXkKICAgICAgICAgICAgICAgICAgICAgICAgaWZNb2RpZmllZEtleSwKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnMgPSB7fSwKICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LAogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZXNwb25zZSBoZWFkZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVh
ZGVyc1N0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLAogICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc3BvcnQKICAgICAgICAgICAgICAgICAgICAgICAg
dHJhbnNwb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aW1lb3V0IGhhbmRsZQogICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0VGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIENyb3NzLWRvbWFpbiBkZXRlY3Rpb24gdmFycwogICAgICAgICAgICAgICAgICAgICAgICBw
YXJ0cywKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGpxWEhSIHN0YXRlCiAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG8g
a25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCiAgICAgICAgICAgICAg
ICAgICAgICAgIGZpcmVHbG9iYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBMb29wIHZh
cmlhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgIGksCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZha2UgeGhyCiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSID0gewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWFkeVN0YXRlOiAwLAoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDYWNoZXMgdGhlIGhlYWRlcgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXRlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG5hbWUgPSBu
YW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhl
YWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBuYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSYXcgc3RyaW5n
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBm
dW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VIZWFk
ZXJzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3BvbnNlSGVhZGVycyA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhl
YyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1sg
bWF0Y2hbMV0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xv
d2VyQ2FzZSgpIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2ggPT09IHVu
ZGVmaW5lZCA/IG51bGwgOiBtYXRjaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdmVycmlkZXMgcmVzcG9uc2Ug
Y29udGVudC10eXBlIGhlYWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJy
aWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHMubWltZVR5cGUgPSB0eXBlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9
IHN0YXR1c1RleHQgfHwgImFib3J0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggdHJhbnNwb3J0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuYWJvcnQoIHN0YXR1c1RleHQgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvbmUoIDAsIHN0YXR1c1RleHQgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAv
LyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmUKICAgICAgICAgICAgICAgIC8v
IEl0IGlzIGRlZmluZWQgaGVyZSBiZWNhdXNlIGpzbGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVj
bGFyZWQKICAgICAgICAgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uICh3aGlj
aCB3b3VsZCBiZSBtb3JlIGxvZ2ljYWwgYW5kIHJlYWRhYmxlKQogICAgICAgICAgICAgICAgZnVu
Y3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMg
KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQgb25jZQogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHN0YXRlID09PSAyICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU3RhdGUgaXMgImRvbmUiIG5vdwogICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZSA9IDI7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciB0aW1lb3V0IGlmIGl0
IGV4aXN0cwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBE
ZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qg
d2lsbCBiZSB1c2VkKQogICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSB1bmRlZmlu
ZWQ7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCiAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwg
IiI7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgcmVhZHlTdGF0ZQogICAgICAgICAg
ICAgICAgICAgICAgICBqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGlzU3VjY2VzcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0
dXNUZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9u
c2VzID8gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIDogdW5kZWZp
bmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldGFnOwoKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMw
NCApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2Rp
ZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQg
bW9kZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCAp
IHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggbGFzdE1v
ZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJMYXN0LU1vZGlmaWVkIiApICkgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5s
YXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSA9IGxhc3RNb2RpZmllZDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggKCBldGFnID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJFdGFn
IiApICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gPSBldGFnOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm90IG1vZGlmaWVkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPT09IDMwNCApIHsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gIm5vdG1vZGlm
aWVkIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9
IHRydWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgZGF0
YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25z
ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
dXNUZXh0ID0gInN1Y2Nlc3MiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc1N1Y2Nlc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBwYXJzZXJlcnJvcgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gInBhcnNlcmVycm9y
IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Ig
PSBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHRyYWN0IGVycm9yIGZyb20g
c3RhdHVzVGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gbm9ybWFs
aXplIHN0YXR1c1RleHQgYW5kIHN0YXR1cyBmb3Igbm9uLWFib3J0cwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yID0gc3RhdHVzVGV4dDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiggIXN0YXR1c1RleHQgfHwgc3RhdHVzICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJlcnJvciI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA8IDAgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdAogICAgICAgICAgICAg
ICAgICAgICAgICBqcVhIUi5zdGF0dXMgPSBzdGF0dXM7CiAgICAgICAgICAgICAgICAgICAgICAg
IGpxWEhSLnN0YXR1c1RleHQgPSAiIiArICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWNjZXNzL0Vycm9yCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaXNTdWNjZXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywg
c3RhdHVzVGV4dCwganFYSFIgXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxi
YWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50
IGNhbGxiYWNrcwogICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlKCBzdGF0
dXNDb2RlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheCIg
KyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNzIiA6ICJFcnJvciIgKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3Vj
Y2VzcyA6IGVycm9yIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ29tcGxldGUKICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVE
ZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0
IF0gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJh
amF4Q29tcGxldGUiLCBbIGpxWEhSLCBzIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXIKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3Rv
cCIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggZGVm
ZXJyZWRzCiAgICAgICAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApOwogICAgICAg
ICAgICAgICAganFYSFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7CiAgICAgICAgICAgICAgICBqcVhI
Ui5lcnJvciA9IGpxWEhSLmZhaWw7CiAgICAgICAgICAgICAgICBqcVhIUi5jb21wbGV0ZSA9IGNv
bXBsZXRlRGVmZXJyZWQuZG9uZTsKCiAgICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50
IGNhbGxiYWNrcwogICAgICAgICAgICAgICAganFYSFIuc3RhdHVzQ29kZSA9IGZ1bmN0aW9uKCBt
YXAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWFwICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB0bXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBzdGF0ZSA8IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IoIHRtcCBpbiBtYXAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1c0NvZGVbIHRtcCBdID0gWyBzdGF0dXNDb2RlW3RtcF0sIG1h
cFt0bXBdIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRtcCA9IG1hcFsganFYSFIuc3RhdHVzIF07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi50aGVuKCB0bXAsIHRtcCApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH07Cgog
ICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmlu
ZyBwcm9tb3Rpb24pCiAgICAgICAgICAgICAgICAvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3Zp
ZGVkICgjNTg2NjogSUU3IGlzc3VlIHdpdGggcHJvdG9jb2wtbGVzcyB1cmxzKQogICAgICAgICAg
ICAgICAgLy8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCiAgICAg
ICAgICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgKSArICIiICkucmVwbGFjZSggcmhh
c2gsICIiICkucmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9jUGFydHNbIDEgXSArICIvLyIgKTsK
CiAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0CiAgICAgICAgICAgICAg
ICBzLmRhdGFUeXBlcyA9IGpRdWVyeS50cmltKCBzLmRhdGFUeXBlIHx8ICIqIiApLnRvTG93ZXJD
YXNlKCkuc3BsaXQoIHJzcGFjZXNBamF4ICk7CgogICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5l
IGlmIGEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIKICAgICAgICAgICAgICAgIGlm
ICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJ0
cyA9IHJ1cmwuZXhlYyggcy51cmwudG9Mb3dlckNhc2UoKSApOwogICAgICAgICAgICAgICAgICAg
ICAgICBzLmNyb3NzRG9tYWluID0gISEoIHBhcnRzICYmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCBwYXJ0c1sgMSBdICE9IGFqYXhMb2NQYXJ0c1sgMSBdIHx8IHBhcnRzWyAyIF0g
IT0gYWpheExvY1BhcnRzWyAyIF0gfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICggcGFydHNbIDMgXSB8fCAoIHBhcnRzWyAxIF0gPT09ICJodHRwOiIgPyA4MCA6IDQ0
MyApICkgIT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCBhamF4TG9jUGFydHNbIDMgXSB8fCAoIGFqYXhMb2NQYXJ0c1sgMSBdID09PSAiaHR0cDoiID8g
ODAgOiA0NDMgKSApICkKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJp
bmcKICAgICAgICAgICAgICAgIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9m
IHMuZGF0YSAhPT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YSA9
IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gQXBwbHkgcHJlZmlsdGVycwogICAgICAgICAgICAgICAgaW5z
cGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhS
ICk7CgogICAgICAgICAgICAgICAgLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBw
cmVmaWxlciwgc3RvcCB0aGVyZQogICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlm
IGFza2VkIHRvCiAgICAgICAgICAgICAgICBmaXJlR2xvYmFscyA9IHMuZ2xvYmFsOwoKICAgICAg
ICAgICAgICAgIC8vIFVwcGVyY2FzZSB0aGUgdHlwZQogICAgICAgICAgICAgICAgcy50eXBlID0g
cy50eXBlLnRvVXBwZXJDYXNlKCk7CgogICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHJl
cXVlc3QgaGFzIGNvbnRlbnQKICAgICAgICAgICAgICAgIHMuaGFzQ29udGVudCA9ICFybm9Db250
ZW50LnRlc3QoIHMudHlwZSApOwoKICAgICAgICAgICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBz
ZXQgb2YgcmVxdWVzdHMKICAgICAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5
LmFjdGl2ZSsrID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
dHJpZ2dlciggImFqYXhTdGFydCIgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudAog
ICAgICAgICAgICAgICAgaWYgKCAhcy5oYXNDb250ZW50ICkgewoKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgZGF0YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHMuZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyBz
LmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIzk2ODI6IHJlbW92ZSBk
YXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzLmRhdGE7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBpZk1vZGlmaWVkS2V5IGJlZm9y
ZSBhZGRpbmcgdGhlIGFudGktY2FjaGUgcGFyYW1ldGVyCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmTW9kaWZpZWRLZXkgPSBzLnVybDsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBh
bnRpLWNhY2hlIGluIHVybCBpZiBuZWVkZWQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBz
LmNhY2hlID09PSBmYWxzZSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHRzID0galF1ZXJ5Lm5vdygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHJ5IHJlcGxhY2luZyBfPSBpZiBpdCBpcyB0aGVyZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcy51cmwucmVwbGFjZSggcnRzLCAiJDFfPSIgKyB0
cyApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBub3RoaW5nIHdhcyBy
ZXBsYWNlZCwgYWRkIHRpbWVzdGFtcCB0byB0aGUgZW5kCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcy51cmwgPSByZXQgKyAoIChyZXQgPT09IHMudXJsICkgPyAoIHJxdWVyeS50ZXN0
KCBzLnVybCApID8gIiYiIDogIj8iICkgKyAiXz0iICsgdHMgOiAiIiApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2V0IHRo
ZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50CiAgICAgICAgICAgICAgICBp
ZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwg
b3B0aW9ucy5jb250ZW50VHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0
UmVxdWVzdEhlYWRlciggIkNvbnRlbnQtVHlwZSIsIHMuY29udGVudFR5cGUgKTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFu
ZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgogICAgICAg
ICAgICAgICAgaWYgKCBzLmlmTW9kaWZpZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
TW9kaWZpZWRLZXkgPSBpZk1vZGlmaWVkS2V5IHx8IHMudXJsOwogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9k
aWZpZWQtU2luY2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVy
eS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU5vbmUtTWF0Y2giLCBqUXVlcnkuZXRhZ1sg
aWZNb2RpZmllZEtleSBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUg
c2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlCiAgICAgICAgICAgICAgICBqcVhIUi5z
ZXRSZXF1ZXN0SGVhZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAiQWNjZXB0IiwKICAgICAg
ICAgICAgICAgICAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5
cGVzWzBdIF0gPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgcy5k
YXRhVHlwZXNbMF0gXSArICggcy5kYXRhVHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5
cGVzICsgIjsgcT0wLjAxIiA6ICIiICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHMuYWNjZXB0c1sgIioiIF0KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgLy8g
Q2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uCiAgICAgICAgICAgICAgICBmb3IgKCBpIGluIHMuaGVh
ZGVycyApIHsKICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigg
aSwgcy5oZWFkZXJzWyBpIF0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0CiAgICAgICAg
ICAgICAgICBpZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFj
a0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLmFib3J0KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKICAgICAgICAg
ICAgICAgIGZvciAoIGkgaW4geyBzdWNjZXNzOiAxLCBlcnJvcjogMSwgY29tcGxldGU6IDEgfSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAganFYSFJbIGkgXSggc1sgaSBdICk7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gR2V0IHRyYW5zcG9ydAogICAgICAgICAgICAg
ICAgdHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMs
IHMsIG9wdGlvbnMsIGpxWEhSICk7CgogICAgICAgICAgICAgICAgLy8gSWYgbm8gdHJhbnNwb3J0
LCB3ZSBhdXRvLWFib3J0CiAgICAgICAgICAgICAgICBpZiAoICF0cmFuc3BvcnQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGRvbmUoIC0xLCAiTm8gVHJhbnNwb3J0IiApOwogICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9
IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlbmQgZ2xvYmFsIGV2ZW50CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4U2VuZCIsIFsganFY
SFIsIHMgXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRpbWVvdXQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLmFzeW5jICYmIHMu
dGltZW91dCA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dFRp
bWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpxWEhSLmFib3J0KCAidGltZW91dCIgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LCBzLnRpbWVvdXQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0
LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUg
ZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb25lKCAtMSwgZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNpbXBseSByZXRocm93IG90aGVyd2lzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZXJyb3IoIGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4g
anFYSFI7CiAgICAgICAgfSwKCiAgICAgICAgLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0g
ZWxlbWVudHMgb3IgYSBzZXQgb2YKICAgICAgICAvLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBz
dHJpbmcKICAgICAgICBwYXJhbTogZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkgewogICAgICAg
ICAgICAgICAgdmFyIHMgPSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgYWRkID0gZnVuY3Rp
b24oIGtleSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
dmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFs
dWUgKSA/IHZhbHVlKCkgOiB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
WyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArICI9IiArIGVuY29kZVVS
SUNvbXBvbmVudCggdmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAg
ICAgICAgICAvLyBTZXQgdHJhZGl0aW9uYWwgdG8gdHJ1ZSBmb3IgalF1ZXJ5IDw9IDEuMy4yIGJl
aGF2aW9yLgogICAgICAgICAgICAgICAgaWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGlu
Z3MudHJhZGl0aW9uYWw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSWYg
YW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9y
bSBlbGVtZW50cy4KICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAo
IGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50cwogICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5
IDEuMy4yIG9yIG9sZGVyCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZCBpdCksIG90aGVy
d2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgogICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgcHJlZml4IGluIGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb24KICAgICAgICAgICAgICAgIHJl
dHVybiBzLmpvaW4oICImIiApLnJlcGxhY2UoIHIyMCwgIisiICk7CiAgICAgICAgfQp9KTsKCmZ1
bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKICAg
ICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHsKICAgICAgICAgICAgICAgIC8vIFNl
cmlhbGl6ZSBhcnJheSBpdGVtLgogICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIG9iaiwgZnVu
Y3Rpb24oIGksIHYgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHJhZGl0aW9uYWwg
fHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZCggcHJlZml4LCB2ICk7CgogICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFycmF5
IGl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2ZSBkZXNl
cmlhbGl6YXRpb24gYW1iaWd1aXR5IGlzc3Vlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBOb3RlIHRoYXQgcmFjayAoYXMgb2YgMS4wLjApIGNhbid0IGN1cnJlbnRseSBkZXNl
cmlhbGl6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lc3RlZCBhcnJheXMg
cHJvcGVybHksIGFuZCBhdHRlbXB0aW5nIHRvIGRvIHNvIG1heSBjYXVzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGEgc2VydmVyIGVycm9yLiBQb3NzaWJsZSBmaXhlcyBhcmUg
dG8gbW9kaWZ5IHJhY2sncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2Vy
aWFsaXphdGlvbiBhbGdvcml0aG0gb3IgdG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxhZwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGZvcmNlIGFycmF5IHNlcmlhbGl6YXRp
b24gdG8gYmUgc2hhbGxvdy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBh
cmFtcyggcHJlZml4ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgfHwgalF1ZXJ5Lmlz
QXJyYXkodikgPyBpIDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIGlm
ICggIXRyYWRpdGlvbmFsICYmIG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmogPT09ICJvYmplY3Qi
ICkgewogICAgICAgICAgICAgICAgLy8gU2VyaWFsaXplIG9iamVjdCBpdGVtLgogICAgICAgICAg
ICAgICAgZm9yICggdmFyIG5hbWUgaW4gb2JqICkgewogICAgICAgICAgICAgICAgICAgICAgICBi
dWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRyYWRp
dGlvbmFsLCBhZGQgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgIC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KICAgICAgICAgICAgICAgIGFkZCgg
cHJlZml4LCBvYmogKTsKICAgICAgICB9Cn0KCi8vIFRoaXMgaXMgc3RpbGwgb24gdGhlIGpRdWVy
eSBvYmplY3QuLi4gZm9yIG5vdwovLyBXYW50IHRvIG1vdmUgdGhpcyB0byBqUXVlcnkuYWpheCBz
b21lIGRheQpqUXVlcnkuZXh0ZW5kKHsKCiAgICAgICAgLy8gQ291bnRlciBmb3IgaG9sZGluZyB0
aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCiAgICAgICAgYWN0aXZlOiAwLAoKICAgICAgICAv
LyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0CiAgICAgICAgbGFz
dE1vZGlmaWVkOiB7fSwKICAgICAgICBldGFnOiB7fQoKfSk7CgovKiBIYW5kbGVzIHJlc3BvbnNl
cyB0byBhbiBhamF4IHJlcXVlc3Q6CiAqIC0gc2V0cyBhbGwgcmVzcG9uc2VYWFggZmllbGRzIGFj
Y29yZGluZ2x5CiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVu
IGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpCiAqIC0gcmV0dXJucyB0aGUgY29y
cmVzcG9uZGluZyByZXNwb25zZQogKi8KZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywg
anFYSFIsIHJlc3BvbnNlcyApIHsKCiAgICAgICAgdmFyIGNvbnRlbnRzID0gcy5jb250ZW50cywK
ICAgICAgICAgICAgICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLAogICAgICAgICAgICAgICAg
cmVzcG9uc2VGaWVsZHMgPSBzLnJlc3BvbnNlRmllbGRzLAogICAgICAgICAgICAgICAgY3QsCiAg
ICAgICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAgICAgZmluYWxEYXRhVHlwZSwKICAgICAg
ICAgICAgICAgIGZpcnN0RGF0YVR5cGU7CgogICAgICAgIC8vIEZpbGwgcmVzcG9uc2VYWFggZmll
bGRzCiAgICAgICAgZm9yKCB0eXBlIGluIHJlc3BvbnNlRmllbGRzICkgewogICAgICAgICAgICAg
ICAgaWYgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAganFY
SFJbIHJlc3BvbnNlRmllbGRzW3R5cGVdIF0gPSByZXNwb25zZXNbIHR5cGUgXTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBn
ZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzCiAgICAgICAgd2hpbGUoIGRhdGFUeXBlc1sg
MCBdID09PSAiKiIgKSB7CiAgICAgICAgICAgICAgICBkYXRhVHlwZXMuc2hpZnQoKTsKICAgICAg
ICAgICAgICAgIGlmICggY3QgPT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgY3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiY29udGVudC10
eXBlIiApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYg
d2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlCiAgICAgICAgaWYgKCBjdCAp
IHsKICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRl
c3QoIGN0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVu
c2hpZnQoIHR5cGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAg
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVk
IGRhdGFUeXBlCiAgICAgICAgaWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7CiAg
ICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07CiAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgIC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXMKICAgICAg
ICAgICAgICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyAiICIgKyBk
YXRhVHlwZXNbMF0gXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbERh
dGFUeXBlID0gdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFmaXJz
dERhdGFUeXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5
cGUgPSB0eXBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmUKICAgICAgICAgICAgICAgIGZp
bmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7CiAgICAgICAgfQoK
ICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlCiAgICAgICAgLy8gV2UgYWRkIHRoZSBk
YXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWQKICAgICAgICAvLyBhbmQgcmV0dXJuIHRoZSBj
b3JyZXNwb25kaW5nIHJlc3BvbnNlCiAgICAgICAgaWYgKCBmaW5hbERhdGFUeXBlICkgewogICAg
ICAgICAgICAgICAgaWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZXNbIGZpbmFs
RGF0YVR5cGUgXTsKICAgICAgICB9Cn0KCi8vIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSBy
ZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2UKZnVuY3Rpb24gYWpheENvbnZlcnQoIHMs
IHJlc3BvbnNlICkgewoKICAgICAgICAvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRl
ZAogICAgICAgIGlmICggcy5kYXRhRmlsdGVyICkgewogICAgICAgICAgICAgICAgcmVzcG9uc2Ug
PSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7CiAgICAgICAgfQoKICAgICAg
ICB2YXIgZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMsCiAgICAgICAgICAgICAgICBjb252ZXJ0ZXJz
ID0ge30sCiAgICAgICAgICAgICAgICBpLAogICAgICAgICAgICAgICAga2V5LAogICAgICAgICAg
ICAgICAgbGVuZ3RoID0gZGF0YVR5cGVzLmxlbmd0aCwKICAgICAgICAgICAgICAgIHRtcCwKICAg
ICAgICAgICAgICAgIC8vIEN1cnJlbnQgYW5kIHByZXZpb3VzIGRhdGFUeXBlcwogICAgICAgICAg
ICAgICAgY3VycmVudCA9IGRhdGFUeXBlc1sgMCBdLAogICAgICAgICAgICAgICAgcHJldiwKICAg
ICAgICAgICAgICAgIC8vIENvbnZlcnNpb24gZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgY29u
dmVyc2lvbiwKICAgICAgICAgICAgICAgIC8vIENvbnZlcnNpb24gZnVuY3Rpb24KICAgICAgICAg
ICAgICAgIGNvbnYsCiAgICAgICAgICAgICAgICAvLyBDb252ZXJzaW9uIGZ1bmN0aW9ucyAodHJh
bnNpdGl2ZSBjb252ZXJzaW9uKQogICAgICAgICAgICAgICAgY29udjEsCiAgICAgICAgICAgICAg
ICBjb252MjsKCiAgICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGNoYWluCiAgICAg
ICAgZm9yKCBpID0gMTsgaSA8IGxlbmd0aDsgaSsrICkgewoKICAgICAgICAgICAgICAgIC8vIENy
ZWF0ZSBjb252ZXJ0ZXJzIG1hcAogICAgICAgICAgICAgICAgLy8gd2l0aCBsb3dlcmNhc2VkIGtl
eXMKICAgICAgICAgICAgICAgIGlmICggaSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yKCBrZXkgaW4gcy5jb252ZXJ0ZXJzICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmKCB0eXBlb2Yga2V5ID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF0gPSBz
LmNvbnZlcnRlcnNbIGtleSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IC8vIEdldCB0aGUgZGF0YVR5cGVzCiAgICAgICAgICAgICAgICBwcmV2ID0gY3VycmVudDsKICAg
ICAgICAgICAgICAgIGN1cnJlbnQgPSBkYXRhVHlwZXNbIGkgXTsKCiAgICAgICAgICAgICAgICAv
LyBJZiBjdXJyZW50IGlzIGF1dG8gZGF0YVR5cGUsIHVwZGF0ZSBpdCB0byBwcmV2CiAgICAgICAg
ICAgICAgICBpZiggY3VycmVudCA9PT0gIioiICkgewogICAgICAgICAgICAgICAgICAgICAgICBj
dXJyZW50ID0gcHJldjsKICAgICAgICAgICAgICAgIC8vIElmIG5vIGF1dG8gYW5kIGRhdGFUeXBl
cyBhcmUgYWN0dWFsbHkgZGlmZmVyZW50CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBwcmV2
ICE9PSAiKiIgJiYgcHJldiAhPT0gY3VycmVudCApIHsKCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEdldCB0aGUgY29udmVydGVyCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb24g
PSBwcmV2ICsgIiAiICsgY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNv
bnZlcnRlcnNbIGNvbnZlcnNpb24gXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGlyZWN0IGNvbnZlcnRl
ciwgc2VhcmNoIHRyYW5zaXRpdmVseQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb252
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYyID0gdW5kZWZpbmVkOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciggY29udjEgaW4gY29udmVydGVycyAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGNvbnYxLnNw
bGl0KCAiICIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dG1wWyAwIF0gPT09IHByZXYgfHwgdG1wWyAwIF0gPT09ICIqIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udjIgPSBjb252ZXJ0ZXJzWyB0bXBb
MV0gKyAiICIgKyBjdXJyZW50IF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY29udjIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udjEgPSBjb252ZXJ0ZXJzWyBjb252MSBdOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggY29udjEgPT09IHRydWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ID0gY29udjI7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29u
djIgPT09IHRydWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb252ID0gY29udjE7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
IGZvdW5kIG5vIGNvbnZlcnRlciwgZGlzcGF0Y2ggYW4gZXJyb3IKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhKCBjb252IHx8IGNvbnYyICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmVycm9yKCAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBjb252ZXJzaW9u
LnJlcGxhY2UoIiAiLCIgdG8gIikgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBmb3VuZCBjb252ZXJ0ZXIgaXMgbm90IGFuIGVxdWl2YWxl
bmNlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udiAhPT0gdHJ1ZSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHdpdGggMSBvciAyIGNvbnZlcnRl
cnMgYWNjb3JkaW5nbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9
IGNvbnYgPyBjb252KCByZXNwb25zZSApIDogY29udjIoIGNvbnYxKHJlc3BvbnNlKSApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg
IHJldHVybiByZXNwb25zZTsKfQoKCgoKdmFyIGpzYyA9IGpRdWVyeS5ub3coKSwKICAgICAgICBq
c3JlID0gLyhcPSlcPygmfCQpfFw/XD8vaTsKCi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKalF1
ZXJ5LmFqYXhTZXR1cCh7CiAgICAgICAganNvbnA6ICJjYWxsYmFjayIsCiAgICAgICAganNvbnBD
YWxsYmFjazogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmV4cGFu
ZG8gKyAiXyIgKyAoIGpzYysrICk7CiAgICAgICAgfQp9KTsKCi8vIERldGVjdCwgbm9ybWFsaXpl
IG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0cwpqUXVlcnku
YWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5n
cywganFYSFIgKSB7CgogICAgICAgIHZhciBpbnNwZWN0RGF0YSA9IHMuY29udGVudFR5cGUgPT09
ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiICYmCiAgICAgICAgICAgICAgICAo
IHR5cGVvZiBzLmRhdGEgPT09ICJzdHJpbmciICk7CgogICAgICAgIGlmICggcy5kYXRhVHlwZXNb
IDAgXSA9PT0gImpzb25wIiB8fAogICAgICAgICAgICAgICAgcy5qc29ucCAhPT0gZmFsc2UgJiYg
KCBqc3JlLnRlc3QoIHMudXJsICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNwZWN0RGF0YSAmJiBqc3JlLnRlc3QoIHMuZGF0YSApICkgKSB7CgogICAgICAgICAgICAgICAg
dmFyIHJlc3BvbnNlQ29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICBqc29ucENhbGxi
YWNrID0gcy5qc29ucENhbGxiYWNrID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPyBzLmpzb25wQ2FsbGJhY2soKSA6
IHMuanNvbnBDYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSB3aW5k
b3dbIGpzb25wQ2FsbGJhY2sgXSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gcy51cmws
CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzLmRhdGEsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2UgPSAiJDEiICsganNvbnBDYWxsYmFjayArICIkMiI7CgogICAgICAgICAg
ICAgICAgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
dXJsID0gdXJsLnJlcGxhY2UoIGpzcmUsIHJlcGxhY2UgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBzLnVybCA9PT0gdXJsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggaW5zcGVjdERhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCBqc3JlLCByZXBsYWNlICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cy5kYXRhID09PSBkYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQWRkIGNhbGxiYWNrIG1hbnVhbGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cmwgKz0gKC9cPy8udGVzdCggdXJsICkgPyAiJiIgOiAiPyIpICsgcy5qc29u
cCArICI9IiArIGpzb25wQ2FsbGJhY2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgcy51cmwgPSB1cmw7CiAgICAgICAgICAgICAgICBzLmRhdGEgPSBkYXRhOwoKICAgICAg
ICAgICAgICAgIC8vIEluc3RhbGwgY2FsbGJhY2sKICAgICAgICAgICAgICAgIHdpbmRvd1sganNv
bnBDYWxsYmFjayBdID0gZnVuY3Rpb24oIHJlc3BvbnNlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZUNvbnRhaW5lciA9IFsgcmVzcG9uc2UgXTsKICAgICAgICAgICAgICAgIH07
CgogICAgICAgICAgICAgICAgLy8gQ2xlYW4tdXAgZnVuY3Rpb24KICAgICAgICAgICAgICAgIGpx
WEhSLmFsd2F5cyhmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNh
bGxiYWNrIGJhY2sgdG8gcHJldmlvdXMgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgd2lu
ZG93WyBqc29ucENhbGxiYWNrIF0gPSBwcmV2aW91czsKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVu
Y3Rpb24oIHByZXZpb3VzICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lu
ZG93WyBqc29ucENhbGxiYWNrIF0oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8g
VXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlv
bgogICAgICAgICAgICAgICAgcy5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdID0gZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvcigganNvbnBDYWxsYmFj
ayArICIgd2FzIG5vdCBjYWxsZWQiICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07CiAgICAgICAg
ICAgICAgICB9OwoKICAgICAgICAgICAgICAgIC8vIGZvcmNlIGpzb24gZGF0YVR5cGUKICAgICAg
ICAgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7CgogICAgICAgICAgICAgICAgLy8g
RGVsZWdhdGUgdG8gc2NyaXB0CiAgICAgICAgICAgICAgICByZXR1cm4gInNjcmlwdCI7CiAgICAg
ICAgfQp9KTsKCgoKCi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlCmpRdWVyeS5hamF4U2V0dXAo
ewogICAgICAgIGFjY2VwdHM6IHsKICAgICAgICAgICAgICAgIHNjcmlwdDogInRleHQvamF2YXNj
cmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBw
bGljYXRpb24veC1lY21hc2NyaXB0IgogICAgICAgIH0sCiAgICAgICAgY29udGVudHM6IHsKICAg
ICAgICAgICAgICAgIHNjcmlwdDogL2phdmFzY3JpcHR8ZWNtYXNjcmlwdC8KICAgICAgICB9LAog
ICAgICAgIGNvbnZlcnRlcnM6IHsKICAgICAgICAgICAgICAgICJ0ZXh0IHNjcmlwdCI6IGZ1bmN0
aW9uKCB0ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCgg
dGV4dCApOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9Cn0pOwoKLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBn
bG9iYWwKalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKICAg
ICAgICBpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgIHMuY2Fj
aGUgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBzLmNyb3NzRG9tYWluICkgewogICAg
ICAgICAgICAgICAgcy50eXBlID0gIkdFVCI7CiAgICAgICAgICAgICAgICBzLmdsb2JhbCA9IGZh
bHNlOwogICAgICAgIH0KfSk7CgovLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnQKalF1
ZXJ5LmFqYXhUcmFuc3BvcnQoICJzY3JpcHQiLCBmdW5jdGlvbihzKSB7CgogICAgICAgIC8vIFRo
aXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKICAgICAg
ICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7CgogICAgICAgICAgICAgICAgdmFyIHNjcmlwdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoICJoZWFkIiApWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dDsKCiAgICAgICAgICAgICAgICByZXR1cm4gewoKICAgICAgICAgICAgICAgICAgICAgICAgc2Vu
ZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNrICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2NyaXB0IiApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXN5bmMgPSAiYXN5bmMiOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5jaGFyc2V0ID0gcy5zY3Jp
cHRDaGFyc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHMudXJsOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBdHRhY2ggaGFuZGxlcnMgZm9yIGFsbCBicm93c2VycwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFk
eXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oIF8sIGlzQWJvcnQgKSB7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0Fib3J0IHx8ICFzY3JpcHQucmVhZHlTdGF0
ZSB8fCAvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KCBzY3JpcHQucmVhZHlTdGF0ZSApICkgewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG1l
bW9yeSBsZWFrIGluIElFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92
ZSB0aGUgc2NyaXB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggaGVhZCAmJiBzY3JpcHQucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkLnJlbW92ZUNoaWxkKCBz
Y3JpcHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVy
ZWZlcmVuY2UgdGhlIHNjcmlwdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JpcHQgPSB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsYmFjayBpZiBub3QgYWJvcnQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNBYm9ydCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjayggMjAwLCAic3VjY2VzcyIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVXNlIGluc2VydEJlZm9yZSBpbnN0ZWFkIG9mIGFwcGVuZENoaWxk
ICB0byBjaXJjdW12ZW50IGFuIElFNiBidWcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBhcmlzZXMgd2hlbiBhIGJhc2Ugbm9kZSBpcyB1c2VkICgjMjcwOSBhbmQgIzQz
NzgpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKCBz
Y3JpcHQsIGhlYWQuZmlyc3RDaGlsZCApOwogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAg
ICAgICAgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggc2NyaXB0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCggMCwgMSApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fTsKICAgICAgICB9Cn0pOwoKCgoKdmFyIC8vICM1MjgwOiBJbnRlcm5ldCBFeHBsb3JlciB3aWxs
IGtlZXAgY29ubmVjdGlvbnMgYWxpdmUgaWYgd2UgZG9uJ3QgYWJvcnQgb24gdW5sb2FkCiAgICAg
ICAgeGhyT25VbmxvYWRBYm9ydCA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8gZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICAvLyBBYm9ydCBhbGwgcGVuZGluZyByZXF1ZXN0cwogICAgICAgICAg
ICAgICAgZm9yICggdmFyIGtleSBpbiB4aHJDYWxsYmFja3MgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHhockNhbGxiYWNrc1sga2V5IF0oIDAsIDEgKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9IDogZmFsc2UsCiAgICAgICAgeGhySWQgPSAwLAogICAgICAgIHhockNhbGxiYWNrczsK
Ci8vIEZ1bmN0aW9ucyB0byBjcmVhdGUgeGhycwpmdW5jdGlvbiBjcmVhdGVTdGFuZGFyZFhIUigp
IHsKICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0
cFJlcXVlc3QoKTsKICAgICAgICB9IGNhdGNoKCBlICkge30KfQoKZnVuY3Rpb24gY3JlYXRlQWN0
aXZlWEhSKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRv
dy5BY3RpdmVYT2JqZWN0KCAiTWljcm9zb2Z0LlhNTEhUVFAiICk7CiAgICAgICAgfSBjYXRjaCgg
ZSApIHt9Cn0KCi8vIENyZWF0ZSB0aGUgcmVxdWVzdCBvYmplY3QKLy8gKFRoaXMgaXMgc3RpbGwg
YXR0YWNoZWQgdG8gYWpheFNldHRpbmdzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQpqUXVl
cnkuYWpheFNldHRpbmdzLnhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8KICAgICAgICAvKiBN
aWNyb3NvZnQgZmFpbGVkIHRvIHByb3Blcmx5CiAgICAgICAgICogaW1wbGVtZW50IHRoZSBYTUxI
dHRwUmVxdWVzdCBpbiBJRTcgKGNhbid0IHJlcXVlc3QgbG9jYWwgZmlsZXMpLAogICAgICAgICAq
IHNvIHdlIHVzZSB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQogICAgICAg
ICAqIEFkZGl0aW9uYWxseSBYTUxIdHRwUmVxdWVzdCBjYW4gYmUgZGlzYWJsZWQgaW4gSUU3L0lF
OCBzbwogICAgICAgICAqIHdlIG5lZWQgYSBmYWxsYmFjay4KICAgICAgICAgKi8KICAgICAgICBm
dW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0xvY2FsICYmIGNyZWF0
ZVN0YW5kYXJkWEhSKCkgfHwgY3JlYXRlQWN0aXZlWEhSKCk7CiAgICAgICAgfSA6CiAgICAgICAg
Ly8gRm9yIGFsbCBvdGhlciBicm93c2VycywgdXNlIHRoZSBzdGFuZGFyZCBYTUxIdHRwUmVxdWVz
dCBvYmplY3QKICAgICAgICBjcmVhdGVTdGFuZGFyZFhIUjsKCi8vIERldGVybWluZSBzdXBwb3J0
IHByb3BlcnRpZXMKKGZ1bmN0aW9uKCB4aHIgKSB7CiAgICAgICAgalF1ZXJ5LmV4dGVuZCggalF1
ZXJ5LnN1cHBvcnQsIHsKICAgICAgICAgICAgICAgIGFqYXg6ICEheGhyLAogICAgICAgICAgICAg
ICAgY29yczogISF4aHIgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHIgKQogICAgICAgIH0p
Owp9KSggalF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKSApOwoKLy8gQ3JlYXRlIHRyYW5zcG9ydCBp
ZiB0aGUgYnJvd3NlciBjYW4gcHJvdmlkZSBhbiB4aHIKaWYgKCBqUXVlcnkuc3VwcG9ydC5hamF4
ICkgewoKICAgICAgICBqUXVlcnkuYWpheFRyYW5zcG9ydChmdW5jdGlvbiggcyApIHsKICAgICAg
ICAgICAgICAgIC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91
Z2ggWE1MSHR0cFJlcXVlc3QKICAgICAgICAgICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gfHwg
alF1ZXJ5LnN1cHBvcnQuY29ycyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxs
YmFjazsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkgewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBhIG5ldyB4aHIKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4aHIgPSBzLnhocigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlbiB0aGUgc29ja2V0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgdXNlcm5h
bWUsIGdlbmVyYXRlcyBhIGxvZ2luIHBvcHVwIG9uIE9wZXJhICgjMjg2NSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy51c2VybmFtZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oIHMudHlwZSwg
cy51cmwsIHMuYXN5bmMsIHMudXNlcm5hbWUsIHMucGFzc3dvcmQgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5j
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBw
cm92aWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnho
ckZpZWxkcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSBpbiBzLnhockZpZWxkcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJbIGkgXSA9IHMueGhyRmllbGRzWyBpIF07
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMubWltZVR5cGUgJiYgeGhy
Lm92ZXJyaWRlTWltZVR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHhoci5vdmVycmlkZU1pbWVUeXBlKCBzLm1pbWVUeXBlICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXIKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMs
IHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBz
aW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBi
YXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhl
YWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhcy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1siWC1SZXF1ZXN0ZWQtV2l0
aCJdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTmVlZCBhbiBleHRyYSB0cnkvY2F0Y2ggZm9yIGNyb3NzIGRv
bWFpbiByZXF1ZXN0cyBpbiBGaXJlZm94IDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGkgaW4gaGVhZGVycyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVh
ZGVyc1sgaSBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIF8g
KSB7fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHNlbmQg
dGhlIHJlcXVlc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGljaCBpcyBhY3R1YWxseQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlZCBpbiBqUXVlcnkuYWpheCAoc28g
bm8gdHJ5L2NhdGNoIGhlcmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4aHIuc2VuZCggKCBzLmhhc0NvbnRlbnQgJiYgcy5kYXRhICkgfHwgbnVsbCApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpc3RlbmVyCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKCBfLCBpc0Fi
b3J0ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0dXNUZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCB0
aHJvd3MgZXhjZXB0aW9ucyB3aGVuIGFjY2Vzc2luZyBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGFuIHhociB3aGVuIGEgbmV0
d29yayBlcnJvciBvY2N1cmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGh0dHA6Ly9oZWxwZnVsLmtub2JzLWRpYWxzLmNvbS9pbmRleC5waHAvQ29t
cG9uZW50X3JldHVybmVkX2ZhaWx1cmVfY29kZTpfMHg4MDA0MDExMV8oTlNfRVJST1JfTk9UX0FW
QUlMQUJMRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ5IHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2FzIG5ldmVyIGNhbGxlZCBhbmQgaXMgYWJvcnRlZCBvciBjb21wbGV0ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y2FsbGJhY2sgJiYgKCBpc0Fib3J0IHx8IHhoci5yZWFkeVN0YXRlID09PSA0ICkgKSB7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gT25seSBjYWxsZWQgb25jZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQ7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRG8gbm90IGtlZXAgYXMgYWN0aXZlIGFueW1vcmUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgeGhyQ2FsbGJhY2tzWyBoYW5kbGUgXTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIGl0J3MgYW4gYWJvcnQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQWJvcnQgaXQgbWFudWFsbHkgaWYgbmVlZGVkCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggeGhyLnJlYWR5U3RhdGUgIT09IDQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eGhyLmFib3J0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9
IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzID0g
e307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHhtbCA9IHhoci5yZXNwb25zZVhNTDsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIENvbnN0cnVjdCByZXNwb25zZSBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeG1sICYmIHht
bC5kb2N1bWVudEVsZW1lbnQgLyogIzQ5NTggKi8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VzLnhtbCA9IHhtbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZXMudGV4dCA9IHhoci5yZXNwb25zZVRleHQ7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94
IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Rh
dHVzVGV4dCBmb3IgZmF1bHR5IGNyb3NzLWRvbWFpbiByZXF1ZXN0cwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSB4aHIuc3RhdHVzVGV4dDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBub3JtYWxpemUgd2l0aCBXZWJraXQgZ2l2aW5nIGFuIGVtcHR5IHN0YXR1c1RleHQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZpbHRlciBzdGF0dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzIGxvY2FsIGFuZCB3ZSBoYXZlIGRhdGE6
IGFzc3VtZSBhIHN1Y2Nlc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRh
IHdvbid0IGdldCBub3RpZmllZCwgdGhhdCdzIHRoZSBiZXN0IHdlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGNhbiBkbyBnaXZlbiBjdXJyZW50IGltcGxlbWVudGF0aW9ucykKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhc3RhdHVzICYmIHMuaXNMb2NhbCAmJiAhcy5jcm9zc0RvbWFpbiApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0dXMgPSByZXNwb25zZXMudGV4dCA/IDIwMCA6IDQwNDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3Vs
ZCBiZSAyMDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc3RhdHVzID09PSAxMjIzICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDIwNDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBj
YXRjaCggZmlyZWZveEFjY2Vzc0V4Y2VwdGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Fib3J0ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGxldGUoIC0xLCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGNvbXBsZXRlIGlmIG5lZWRlZAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNl
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb21wbGV0ZSggc3RhdHVzLCBzdGF0dXNUZXh0LCByZXNwb25zZXMsIHJlc3BvbnNlSGVh
ZGVycyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGluIHN5bmMgbW9kZSBvciBp
dCdzIGluIGNhY2hlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
bmQgaGFzIGJlZW4gcmV0cmlldmVkIGRpcmVjdGx5IChJRTYgJiBJRTcpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hbnVhbGx5IGZpcmUgdGhl
IGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFz
LmFzeW5jIHx8IHhoci5yZWFkeVN0YXRlID09PSA0ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0gKyt4aHJJZDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENyZWF0ZSB0aGUgYWN0aXZlIHhocnMgY2FsbGJhY2tzIGxpc3QgaWYgbmVlZGVkCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGF0
dGFjaCB0aGUgdW5sb2FkIGhhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF4aHJDYWxsYmFja3MgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJD
YWxsYmFja3MgPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggd2luZG93ICkudW5sb2FkKCB4aHJPblVubG9h
ZEFib3J0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEFkZCB0byBsaXN0IG9mIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxi
YWNrc1sgaGFuZGxlIF0gPSBjYWxsYmFjazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gY2FsbGJhY2s7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFj
ayApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2soMCwxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH07
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSk7Cn0KCgoKCnZhciBlbGVtZGlzcGxheSA9IHt9
LAogICAgICAgIGlmcmFtZSwgaWZyYW1lRG9jLAogICAgICAgIHJmeHR5cGVzID0gL14oPzp0b2dn
bGV8c2hvd3xoaWRlKSQvLAogICAgICAgIHJmeG51bSA9IC9eKFsrXC1dPSk/KFtcZCsuXC1dKyko
W2EteiVdKikkL2ksCiAgICAgICAgdGltZXJJZCwKICAgICAgICBmeEF0dHJzID0gWwogICAgICAg
ICAgICAgICAgLy8gaGVpZ2h0IGFuaW1hdGlvbnMKICAgICAgICAgICAgICAgIFsgImhlaWdodCIs
ICJtYXJnaW5Ub3AiLCAibWFyZ2luQm90dG9tIiwgInBhZGRpbmdUb3AiLCAicGFkZGluZ0JvdHRv
bSIgXSwKICAgICAgICAgICAgICAgIC8vIHdpZHRoIGFuaW1hdGlvbnMKICAgICAgICAgICAgICAg
IFsgIndpZHRoIiwgIm1hcmdpbkxlZnQiLCAibWFyZ2luUmlnaHQiLCAicGFkZGluZ0xlZnQiLCAi
cGFkZGluZ1JpZ2h0IiBdLAogICAgICAgICAgICAgICAgLy8gb3BhY2l0eSBhbmltYXRpb25zCiAg
ICAgICAgICAgICAgICBbICJvcGFjaXR5IiBdCiAgICAgICAgXSwKICAgICAgICBmeE5vdzsKCmpR
dWVyeS5mbi5leHRlbmQoewogICAgICAgIHNob3c6IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBj
YWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtLCBkaXNwbGF5OwoKICAgICAgICAg
ICAgICAgIGlmICggc3BlZWQgfHwgc3BlZWQgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmFuaW1hdGUoIGdlbkZ4KCJzaG93IiwgMyksIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDAsIGogPSB0aGlzLmxlbmd0aDsgaSA8IGo7IGkrKyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1tpXTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnN0eWxlICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgaW5saW5l
IGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0IGlzCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWluZyBoaWRkZW4gYnkgY2FzY2FkZWQgcnVs
ZXMgb3Igbm90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFq
UXVlcnkuX2RhdGEoZWxlbSwgIm9sZGRpc3BsYXkiKSAmJiBkaXNwbGF5ID09PSAibm9uZSIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkg
PSBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBT
ZXQgZWxlbWVudHMgd2hpY2ggaGF2ZSBiZWVuIG92ZXJyaWRkZW4gd2l0aCBkaXNwbGF5OiBub25l
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIHN0eWxlc2hl
ZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgYnJvd3NlciBzdHlsZSBpcwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHN1Y2ggYW4gZWxlbWVudAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAiIiAmJiBq
UXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUiICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoZWxlbSwgIm9s
ZGRpc3BsYXkiLCBkZWZhdWx0RGlzcGxheShlbGVtLm5vZGVOYW1lKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9zdCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9v
cAogICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93
CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgajsgaSsrICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzW2ldOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc3R5bGUgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5OwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGlzcGxheSA9PT0gIiIg
fHwgZGlzcGxheSA9PT0gIm5vbmUiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSBqUXVlcnkuX2RhdGEoZWxlbSwg
Im9sZGRpc3BsYXkiKSB8fCAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGhpZGU6IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5n
LCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIGlmICggc3BlZWQgfHwgc3BlZWQgPT09IDAg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGUoIGdlbkZ4KCJo
aWRlIiwgMyksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrKTsKCiAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGogPSB0aGlzLmxl
bmd0aDsgaSA8IGo7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHRoaXNbaV0uc3R5bGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRoaXNbaV0sICJkaXNwbGF5IiApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGlzcGxheSAhPT0gIm5vbmUi
ICYmICFqUXVlcnkuX2RhdGEoIHRoaXNbaV0sICJvbGRkaXNwbGF5IiApICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIHRoaXNb
aV0sICJvbGRkaXNwbGF5IiwgZGlzcGxheSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBkaXNw
bGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wCiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3cKICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDA7IGkgPCBqOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0aGlzW2ldLnN0eWxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpc1tpXS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwK
CiAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIHRvZ2dsZSBmdW5jdGlvbgogICAgICAgIF90b2dnbGU6
IGpRdWVyeS5mbi50b2dnbGUsCgogICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oIGZuLCBmbjIsIGNh
bGxiYWNrICkgewogICAgICAgICAgICAgICAgdmFyIGJvb2wgPSB0eXBlb2YgZm4gPT09ICJib29s
ZWFuIjsKCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKGZuKSAmJiBqUXVl
cnkuaXNGdW5jdGlvbihmbjIpICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dn
bGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IGZuID09IG51bGwgfHwgYm9vbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lYWNo
KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9
IGJvb2wgPyBmbiA6IGpRdWVyeSh0aGlzKS5pcygiOmhpZGRlbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKVsgc3RhdGUgPyAic2hvdyIgOiAiaGlkZSIgXSgp
OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGUoZ2VuRngoInRvZ2dsZSIsIDMpLCBm
biwgZm4yLCBjYWxsYmFjayk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRv
LCBlYXNpbmcsIGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVy
KCI6aGlkZGVuIikuY3NzKCJvcGFjaXR5IiwgMCkuc2hvdygpLmVuZCgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuYW5pbWF0ZSh7b3BhY2l0eTogdG99LCBzcGVlZCwg
ZWFzaW5nLCBjYWxsYmFjayk7CiAgICAgICAgfSwKCiAgICAgICAgYW5pbWF0ZTogZnVuY3Rpb24o
IHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAgdmFyIG9w
dGFsbCA9IGpRdWVyeS5zcGVlZChzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayk7CgogICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBvcHRhbGwuY29tcGxldGUsIFsgZmFsc2UgXSAp
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIERvIG5vdCBjaGFuZ2UgcmVm
ZXJlbmNlZCBwcm9wZXJ0aWVzIGFzIHBlci1wcm9wZXJ0eSBlYXNpbmcgd2lsbCBiZSBsb3N0CiAg
ICAgICAgICAgICAgICBwcm9wID0galF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKTsKCiAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpc1sgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/ICJlYWNoIiA6ICJx
dWV1ZSIgXShmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gWFhYICd0aGlz
JyBkb2VzIG5vdCBhbHdheXMgaGF2ZSBhIG5vZGVOYW1lIHdoZW4gcnVubmluZyB0aGUKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdGVzdCBzdWl0ZQoKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBvcHRhbGwucXVldWUgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5fbWFyayggdGhpcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0ID0galF1ZXJ5LmV4dGVuZCgge30sIG9wdGFs
bCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRWxlbWVudCA9IHRoaXMubm9k
ZVR5cGUgPT09IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuID0gaXNF
bGVtZW50ICYmIGpRdWVyeSh0aGlzKS5pcygiOmhpZGRlbiIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUsIHZhbCwgcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaXNwbGF5LCBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLCBzdGFy
dCwgZW5kLCB1bml0OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBzdG9yZSBwZXIg
cHJvcGVydHkgZWFzaW5nIGFuZCBiZSB1c2VkIHRvIGRldGVybWluZSB3aGVuIGFuIGFuaW1hdGlv
biBpcyBjb21wbGV0ZQogICAgICAgICAgICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQcm9wZXJ0
aWVzID0ge307CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBwIGluIHByb3AgKSB7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3BlcnR5IG5hbWUgbm9ybWFsaXph
dGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxD
YXNlKCBwICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwICE9PSBuYW1l
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFsgbmFtZSBd
ID0gcHJvcFsgcCBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHByb3BbIHAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHByb3BbIG5hbWUgXTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gZWFzaW5nIHJlc29sdXRpb246IHBlciBwcm9wZXJ0eSA+
IG9wdC5zcGVjaWFsRWFzaW5nID4gb3B0LmVhc2luZyA+ICdzd2luZycgKGRlZmF1bHQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQcm9w
ZXJ0aWVzWyBuYW1lIF0gPSB2YWxbIDEgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbCA9IHByb3BbIG5hbWUgXSA9IHZhbFsgMCBdOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcHQuYW5pbWF0ZWRQcm9wZXJ0aWVzWyBuYW1lIF0gPSBvcHQuc3BlY2lhbEVhc2lu
ZyAmJiBvcHQuc3BlY2lhbEVhc2luZ1sgbmFtZSBdIHx8IG9wdC5lYXNpbmcgfHwgJ3N3aW5nJzsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdmFsID09PSAiaGlkZSIgJiYgaGlkZGVuIHx8IHZhbCA9PT0gInNob3ci
ICYmICFoaWRkZW4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gb3B0LmNvbXBsZXRlLmNhbGwoIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNFbGVtZW50
ICYmICggbmFtZSA9PT0gImhlaWdodCIgfHwgbmFtZSA9PT0gIndpZHRoIiApICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGlu
ZyBzbmVha3Mgb3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBS
ZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIG92ZXJmbG93
IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93WCBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQub3ZlcmZsb3cgPSBbIHRoaXMu
c3R5bGUub3ZlcmZsb3csIHRoaXMuc3R5bGUub3ZlcmZsb3dYLCB0aGlzLnN0eWxlLm92ZXJmbG93
WSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBkaXNw
bGF5IHByb3BlcnR5IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVt
ZW50cyB0aGF0IGFyZSBoYXZpbmcgd2lkdGgvaGVpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhbmltYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBqUXVlcnkuY3NzKCB0aGlzLCAiZGlzcGxheSIgKSA9PT0gImlubGlu
ZSIgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuY3NzKCB0aGlzLCAiZmxvYXQiICkgPT09ICJub25lIiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBv
cnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5l
LWJsb2NrIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5KCB0aGlzLm5vZGVOYW1lICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlu
bGluZS1sZXZlbCBlbGVtZW50cyBhY2NlcHQgaW5saW5lLWJsb2NrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrLWxldmVsIGVs
ZW1lbnRzIG5lZWQgdG8gYmUgaW5saW5lIHdpdGggbGF5b3V0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAiaW5s
aW5lIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxvY2siOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0
eWxlLnpvb20gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHQub3ZlcmZsb3cgIT0gbnVsbCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IHAgaW4gcHJvcCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IGpR
dWVyeS5meCggdGhpcywgb3B0LCBwICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsID0gcHJvcFsgcCBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJm
eHR5cGVzLnRlc3QodmFsKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVbIHZhbCA9PT0gInRvZ2dsZSIgPyBoaWRkZW4gPyAic2hvdyIgOiAiaGlkZSIgOiB2YWwg
XSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMgPSByZnhudW0uZXhlYyggdmFsICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGUuY3VyKCk7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJ0cyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcGFy
c2VGbG9hdCggcGFydHNbMl0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5pdCA9IHBhcnRzWzNdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcCBdID8g
IiIgOiAicHgiICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGNvbXB1dGUgc3RhcnRpbmcgdmFsdWUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB1bml0ICE9PSAicHgiICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5zdHlsZSggdGhpcywgcCwgKGVuZCB8fCAxKSArIHVuaXQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gKChlbmQgfHwg
MSkgLyBlLmN1cigpKSAqIHN0YXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggdGhpcywgcCwgc3RhcnQgKyB1bml0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSArPS8t
PSB0b2tlbiB3YXMgcHJvdmlkZWQsIHdlJ3JlIGRvaW5nIGEgcmVsYXRpdmUgYW5pbWF0aW9uCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFydHNb
MV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kID0gKCAocGFydHNbIDEgXSA9PT0gIi09IiA/IC0xIDogMSkgKiBlbmQgKSArIHN0
YXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmN1c3RvbSgg
c3RhcnQsIGVuZCwgdW5pdCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGUuY3VzdG9tKCBzdGFydCwgdmFsLCAiIiApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIEpTIHN0
cmljdCBjb21wbGlhbmNlCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAgc3RvcDogZnVuY3Rpb24oIGNsZWFy
UXVldWUsIGdvdG9FbmQgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGNsZWFyUXVldWUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUoW10pOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHRpbWVycyA9IGpRdWVyeS50aW1lcnMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaSA9IHRpbWVycy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNs
ZWFyIG1hcmtlciBjb3VudGVycyBpZiB3ZSBrbm93IHRoZXkgd29uJ3QgYmUKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhZ290b0VuZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuX3VubWFyayggdHJ1ZSwgdGhpcyApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdGltZXJzW2ldLmVsZW0gPT09IHRoaXMgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ290b0VuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZSB0aGUgbmV4
dCBzdGVwIHRvIGJlIHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVyc1tpXSh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lcnMuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAg
ICAgLy8gc3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0
IGZvcmNlZAogICAgICAgICAgICAgICAgaWYgKCAhZ290b0VuZCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5kZXF1ZXVlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKfSk7CgovLyBBbmltYXRpb25zIGNyZWF0ZWQgc3lu
Y2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5CmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkg
ewogICAgICAgIHNldFRpbWVvdXQoIGNsZWFyRnhOb3csIDAgKTsKICAgICAgICByZXR1cm4gKCBm
eE5vdyA9IGpRdWVyeS5ub3coKSApOwp9CgpmdW5jdGlvbiBjbGVhckZ4Tm93KCkgewogICAgICAg
IGZ4Tm93ID0gdW5kZWZpbmVkOwp9CgovLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBh
IHN0YW5kYXJkIGFuaW1hdGlvbgpmdW5jdGlvbiBnZW5GeCggdHlwZSwgbnVtICkgewogICAgICAg
IHZhciBvYmogPSB7fTsKCiAgICAgICAgalF1ZXJ5LmVhY2goIGZ4QXR0cnMuY29uY2F0LmFwcGx5
KFtdLCBmeEF0dHJzLnNsaWNlKDAsbnVtKSksIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
b2JqWyB0aGlzIF0gPSB0eXBlOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gb2JqOwp9Cgov
LyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zCmpRdWVyeS5lYWNoKHsK
ICAgICAgICBzbGlkZURvd246IGdlbkZ4KCJzaG93IiwgMSksCiAgICAgICAgc2xpZGVVcDogZ2Vu
RngoImhpZGUiLCAxKSwKICAgICAgICBzbGlkZVRvZ2dsZTogZ2VuRngoInRvZ2dsZSIsIDEpLAog
ICAgICAgIGZhZGVJbjogeyBvcGFjaXR5OiAic2hvdyIgfSwKICAgICAgICBmYWRlT3V0OiB7IG9w
YWNpdHk6ICJoaWRlIiB9LAogICAgICAgIGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRvZ2dsZSIg
fQp9LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0g
PSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKICAg
ICAgICB9Owp9KTsKCmpRdWVyeS5leHRlbmQoewogICAgICAgIHNwZWVkOiBmdW5jdGlvbiggc3Bl
ZWQsIGVhc2luZywgZm4gKSB7CiAgICAgICAgICAgICAgICB2YXIgb3B0ID0gc3BlZWQgJiYgdHlw
ZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpRdWVyeS5leHRlbmQoe30sIHNwZWVkKSA6IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAm
JiBzcGVlZCwKICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IHNwZWVkLAogICAgICAg
ICAgICAgICAgICAgICAgICBlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWpRdWVy
eS5pc0Z1bmN0aW9uKGVhc2luZykgJiYgZWFzaW5nCiAgICAgICAgICAgICAgICB9OwoKICAgICAg
ICAgICAgICAgIG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5k
dXJhdGlvbiA9PT0gIm51bWJlciIgPyBvcHQuZHVyYXRpb24gOgogICAgICAgICAgICAgICAgICAg
ICAgICBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/IGpRdWVyeS5meC5zcGVlZHNb
b3B0LmR1cmF0aW9uXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7CgogICAgICAgICAgICAg
ICAgLy8gUXVldWVpbmcKICAgICAgICAgICAgICAgIG9wdC5vbGQgPSBvcHQuY29tcGxldGU7CiAg
ICAgICAgICAgICAgICBvcHQuY29tcGxldGUgPSBmdW5jdGlvbiggbm9Vbm1hcmsgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQub2xkLmNhbGwoIHRoaXMgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHQu
cXVldWUgIT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5kZXF1ZXVlKCB0aGlzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5v
VW5tYXJrICE9PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuX3VubWFyayggdGhpcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9OwoKICAgICAgICAgICAgICAgIHJldHVybiBvcHQ7CiAgICAgICAgfSwKCiAgICAgICAg
ZWFzaW5nOiB7CiAgICAgICAgICAgICAgICBsaW5lYXI6IGZ1bmN0aW9uKCBwLCBuLCBmaXJzdE51
bSwgZGlmZiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TnVtICsgZGlm
ZiAqIHA7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgc3dpbmc6IGZ1bmN0aW9u
KCBwLCBuLCBmaXJzdE51bSwgZGlmZiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICgoLU1hdGguY29zKHAqTWF0aC5QSSkvMikgKyAwLjUpICogZGlmZiArIGZpcnN0TnVtOwogICAg
ICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHRpbWVyczogW10sCgogICAgICAgIGZ4
OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCApIHsKICAgICAgICAgICAgICAgIHRoaXMu
b3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgICAgICAgICAgICB0aGlzLmVsZW0gPSBlbGVtOwogICAg
ICAgICAgICAgICAgdGhpcy5wcm9wID0gcHJvcDsKCiAgICAgICAgICAgICAgICBvcHRpb25zLm9y
aWcgPSBvcHRpb25zLm9yaWcgfHwge307CiAgICAgICAgfQoKfSk7CgpqUXVlcnkuZngucHJvdG90
eXBlID0gewogICAgICAgIC8vIFNpbXBsZSBmdW5jdGlvbiBmb3Igc2V0dGluZyBhIHN0eWxlIHZh
bHVlCiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICggdGhp
cy5vcHRpb25zLnN0ZXAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5z
dGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAoalF1ZXJ5LmZ4LnN0ZXBbdGhpcy5wcm9wXSB8fCBqUXVlcnkuZngu
c3RlcC5fZGVmYXVsdCkoIHRoaXMgKTsKICAgICAgICB9LAoKICAgICAgICAvLyBHZXQgdGhlIGN1
cnJlbnQgc2l6ZQogICAgICAgIGN1cjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAo
IHRoaXMuZWxlbVt0aGlzLnByb3BdICE9IG51bGwgJiYgKCF0aGlzLmVsZW0uc3R5bGUgfHwgdGhp
cy5lbGVtLnN0eWxlW3RoaXMucHJvcF0gPT0gbnVsbCkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmVsZW1bIHRoaXMucHJvcCBdOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHZhciBwYXJzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBqUXVl
cnkuY3NzKCB0aGlzLmVsZW0sIHRoaXMucHJvcCApOwogICAgICAgICAgICAgICAgLy8gRW1wdHkg
c3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLAog
ICAgICAgICAgICAgICAgLy8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyAicm90YXRlKDFyYWQpIiBh
cmUgcmV0dXJuZWQgYXMgaXMsCiAgICAgICAgICAgICAgICAvLyBzaW1wbGUgdmFsdWVzIHN1Y2gg
YXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8gRmxvYXQuCiAgICAgICAgICAgICAgICByZXR1cm4gaXNO
YU4oIHBhcnNlZCA9IHBhcnNlRmxvYXQoIHIgKSApID8gIXIgfHwgciA9PT0gImF1dG8iID8gMCA6
IHIgOiBwYXJzZWQ7CiAgICAgICAgfSwKCiAgICAgICAgLy8gU3RhcnQgYW4gYW5pbWF0aW9uIGZy
b20gb25lIG51bWJlciB0byBhbm90aGVyCiAgICAgICAgY3VzdG9tOiBmdW5jdGlvbiggZnJvbSwg
dG8sIHVuaXQgKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGZ4ID0galF1ZXJ5LmZ4OwoKICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRU
aW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKTsKICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQg
PSBmcm9tOwogICAgICAgICAgICAgICAgdGhpcy5lbmQgPSB0bzsKICAgICAgICAgICAgICAgIHRo
aXMudW5pdCA9IHVuaXQgfHwgdGhpcy51bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgdGhpcy5w
cm9wIF0gPyAiIiA6ICJweCIgKTsKICAgICAgICAgICAgICAgIHRoaXMubm93ID0gdGhpcy5zdGFy
dDsKICAgICAgICAgICAgICAgIHRoaXMucG9zID0gdGhpcy5zdGF0ZSA9IDA7CgogICAgICAgICAg
ICAgICAgZnVuY3Rpb24gdCggZ290b0VuZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHNlbGYuc3RlcChnb3RvRW5kKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICB0LmVsZW0gPSB0aGlzLmVsZW07CgogICAgICAgICAgICAgICAgaWYgKCB0KCkgJiYgalF1ZXJ5
LnRpbWVycy5wdXNoKHQpICYmICF0aW1lcklkICkgewogICAgICAgICAgICAgICAgICAgICAgICB0
aW1lcklkID0gc2V0SW50ZXJ2YWwoIGZ4LnRpY2ssIGZ4LmludGVydmFsICk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gU2ltcGxlICdzaG93JyBmdW5jdGlvbgogICAg
ICAgIHNob3c6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgd2hlcmUg
d2Ugc3RhcnRlZCwgc28gdGhhdCB3ZSBjYW4gZ28gYmFjayB0byBpdCBsYXRlcgogICAgICAgICAg
ICAgICAgdGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXSA9IGpRdWVyeS5zdHlsZSggdGhpcy5l
bGVtLCB0aGlzLnByb3AgKTsKICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdHJ1
ZTsKCiAgICAgICAgICAgICAgICAvLyBCZWdpbiB0aGUgYW5pbWF0aW9uCiAgICAgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBzdGFydCBhdCBhIHNtYWxsIHdpZHRoL2hlaWdodCB0byBh
dm9pZCBhbnkKICAgICAgICAgICAgICAgIC8vIGZsYXNoIG9mIGNvbnRlbnQKICAgICAgICAgICAg
ICAgIHRoaXMuY3VzdG9tKHRoaXMucHJvcCA9PT0gIndpZHRoIiB8fCB0aGlzLnByb3AgPT09ICJo
ZWlnaHQiID8gMSA6IDAsIHRoaXMuY3VyKCkpOwoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGJ5
IHNob3dpbmcgdGhlIGVsZW1lbnQKICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcy5lbGVtICku
c2hvdygpOwogICAgICAgIH0sCgogICAgICAgIC8vIFNpbXBsZSAnaGlkZScgZnVuY3Rpb24KICAg
ICAgICBoaWRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHdoZXJl
IHdlIHN0YXJ0ZWQsIHNvIHRoYXQgd2UgY2FuIGdvIGJhY2sgdG8gaXQgbGF0ZXIKICAgICAgICAg
ICAgICAgIHRoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF0gPSBqUXVlcnkuc3R5bGUoIHRoaXMu
ZWxlbSwgdGhpcy5wcm9wICk7CiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuaGlkZSA9IHRy
dWU7CgogICAgICAgICAgICAgICAgLy8gQmVnaW4gdGhlIGFuaW1hdGlvbgogICAgICAgICAgICAg
ICAgdGhpcy5jdXN0b20odGhpcy5jdXIoKSwgMCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gRWFj
aCBzdGVwIG9mIGFuIGFuaW1hdGlvbgogICAgICAgIHN0ZXA6IGZ1bmN0aW9uKCBnb3RvRW5kICkg
ewogICAgICAgICAgICAgICAgdmFyIHQgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAogICAgICAg
ICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bSA9IHRoaXMuZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0
aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgaSwgbjsKCiAgICAgICAgICAgICAgICBpZiAo
IGdvdG9FbmQgfHwgdCA+PSBvcHRpb25zLmR1cmF0aW9uICsgdGhpcy5zdGFydFRpbWUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm93ID0gdGhpcy5lbmQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMucG9zID0gdGhpcy5zdGF0ZSA9IDE7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMudXBkYXRlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFuaW1h
dGVkUHJvcGVydGllc1sgdGhpcy5wcm9wIF0gPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSBpbiBvcHRpb25zLmFuaW1hdGVkUHJvcGVydGllcyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzW2ldICE9
PSB0cnVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkb25lICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBvdmVyZmxvdwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy5vdmVyZmxvdyAhPSBudWxsICYmICFq
UXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzICkgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBbICIiLCAiWCIsICJZIiBdLCBmdW5jdGlv
biAoaW5kZXgsIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0uc3R5bGVbICJvdmVyZmxvdyIgKyB2YWx1ZSBdID0gb3B0aW9ucy5vdmVy
Zmxvd1tpbmRleF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEhpZGUgdGhlIGVsZW1lbnQgaWYgdGhlICJoaWRlIiBvcGVyYXRpb24gd2Fz
IGRvbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMuaGlkZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShlbGVtKS5o
aWRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgcHJvcGVydGllcywgaWYgdGhlIGl0ZW0gaGFz
IGJlZW4gaGlkZGVuIG9yIHNob3duCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBvcHRpb25zLmhpZGUgfHwgb3B0aW9ucy5zaG93ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIHAgaW4gb3B0aW9ucy5hbmltYXRlZFByb3BlcnRp
ZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5zdHlsZSggZWxlbSwgcCwgb3B0aW9ucy5vcmlnW3BdICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb21wbGV0
ZSBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tcGxl
dGUuY2FsbCggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY2xhc3NpY2FsIGVhc2luZyBjYW5ub3QgYmUgdXNlZCB3aXRo
IGFuIEluZmluaXR5IGR1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9u
cy5kdXJhdGlvbiA9PSBJbmZpbml0eSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLm5vdyA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHQgLSB0aGlzLnN0YXJ0VGltZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbiAvIG9wdGlvbnMuZHVyYXRpb247
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gdGhlIGVhc2luZyBm
dW5jdGlvbiwgZGVmYXVsdHMgdG8gc3dpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnBvcyA9IGpRdWVyeS5lYXNpbmdbIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzWyB0
aGlzLnByb3AgXSBdKCB0aGlzLnN0YXRlLCBuLCAwLCAxLCBvcHRpb25zLmR1cmF0aW9uICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3cgPSB0aGlzLnN0YXJ0ICsgKCh0
aGlzLmVuZCAtIHRoaXMuc3RhcnQpICogdGhpcy5wb3MpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gdGhlIG5leHQgc3RlcCBvZiB0
aGUgYW5pbWF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQp9OwoK
alF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmZ4LCB7CiAgICAgICAgdGljazogZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgdGltZXJzID0galF1ZXJ5LnRpbWVycywgaSA9IDAgOyBp
IDwgdGltZXJzLmxlbmd0aCA7ICsraSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
dGltZXJzW2ldKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJzLnNw
bGljZShpLS0sIDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmZ4LnN0b3AoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoK
ICAgICAgICBpbnRlcnZhbDogMTMsCgogICAgICAgIHN0b3A6IGZ1bmN0aW9uKCkgewogICAgICAg
ICAgICAgICAgY2xlYXJJbnRlcnZhbCggdGltZXJJZCApOwogICAgICAgICAgICAgICAgdGltZXJJ
ZCA9IG51bGw7CiAgICAgICAgfSwKCiAgICAgICAgc3BlZWRzOiB7CiAgICAgICAgICAgICAgICBz
bG93OiA2MDAsCiAgICAgICAgICAgICAgICBmYXN0OiAyMDAsCiAgICAgICAgICAgICAgICAvLyBE
ZWZhdWx0IHNwZWVkCiAgICAgICAgICAgICAgICBfZGVmYXVsdDogNDAwCiAgICAgICAgfSwKCiAg
ICAgICAgc3RlcDogewogICAgICAgICAgICAgICAgb3BhY2l0eTogZnVuY3Rpb24oIGZ4ICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGZ4LmVsZW0sICJvcGFjaXR5Iiwg
Zngubm93ICk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIF9kZWZhdWx0OiBm
dW5jdGlvbiggZnggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZnguZWxlbS5zdHls
ZSAmJiBmeC5lbGVtLnN0eWxlWyBmeC5wcm9wIF0gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmeC5lbGVtLnN0eWxlWyBmeC5wcm9wIF0gPSAoZngucHJvcCA9PT0g
IndpZHRoIiB8fCBmeC5wcm9wID09PSAiaGVpZ2h0IiA/IE1hdGgubWF4KDAsIGZ4Lm5vdykgOiBm
eC5ub3cpICsgZngudW5pdDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmeC5lbGVtWyBmeC5wcm9wIF0gPSBmeC5ub3c7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0pOwoK
aWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewogICAgICAgIGpRdWVy
eS5leHByLmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBqUXVlcnkuZ3JlcChqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBmbi5lbGVtOwogICAgICAgICAg
ICAgICAgfSkubGVuZ3RoOwogICAgICAgIH07Cn0KCi8vIFRyeSB0byByZXN0b3JlIHRoZSBkZWZh
dWx0IGRpc3BsYXkgdmFsdWUgb2YgYW4gZWxlbWVudApmdW5jdGlvbiBkZWZhdWx0RGlzcGxheSgg
bm9kZU5hbWUgKSB7CgogICAgICAgIGlmICggIWVsZW1kaXNwbGF5WyBub2RlTmFtZSBdICkgewoK
ICAgICAgICAgICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keSwKICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbSA9IGpRdWVyeSggIjwiICsgbm9kZU5hbWUgKyAiPiIgKS5hcHBlbmRUbygg
Ym9keSApLAogICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZWxlbS5jc3MoICJkaXNw
bGF5IiApOwoKICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlKCk7CgogICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIHNpbXBsZSB3YXkgZmFpbHMsCiAgICAgICAgICAgICAgICAvLyBnZXQgZWxlbWVu
dCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5IGJ5IGF0dGFjaGluZyBpdCB0byBhIHRlbXAgaWZyYW1l
CiAgICAgICAgICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICJub25lIiB8fCBkaXNwbGF5ID09PSAi
IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gaWZyYW1lIHRvIHVzZSB5ZXQsIHNv
IGNyZWF0ZSBpdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpZnJhbWUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggImlmcmFtZSIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUuZnJh
bWVCb3JkZXIgPSBpZnJhbWUud2lkdGggPSBpZnJhbWUuaGVpZ2h0ID0gMDsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZCgg
aWZyYW1lICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjYWNoZWFibGUg
Y29weSBvZiB0aGUgaWZyYW1lIGRvY3VtZW50IG9uIGZpcnN0IGNhbGwuCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElFIGFuZCBPcGVyYSB3aWxsIGFsbG93IHVzIHRvIHJldXNlIHRoZSBpZnJh
bWVEb2Mgd2l0aG91dCByZS13cml0aW5nIHRoZSBmYWtlIEhUTUwKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZG9jdW1lbnQgdG8gaXQ7IFdlYktpdCAmIEZpcmVmb3ggd29uJ3QgYWxsb3cgcmV1
c2luZyB0aGUgaWZyYW1lIGRvY3VtZW50LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFp
ZnJhbWVEb2MgfHwgIWlmcmFtZS5jcmVhdGVFbGVtZW50ICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmcmFtZURvYyA9ICggaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1l
LmNvbnRlbnREb2N1bWVudCApLmRvY3VtZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmcmFtZURvYy53cml0ZSggKCBkb2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBh
dCIgPyAiPCFkb2N0eXBlIGh0bWw+IiA6ICIiICkgKyAiPGh0bWw+PGJvZHk+IiApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZURvYy5jbG9zZSgpOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gaWZyYW1lRG9jLmNy
ZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVE
b2MuYm9keS5hcHBlbmRDaGlsZCggZWxlbSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGlz
cGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgYm9keS5yZW1vdmVDaGlsZCggaWZyYW1lICk7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5CiAgICAgICAg
ICAgICAgICBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7CiAgICAgICAgfQoKICAg
ICAgICByZXR1cm4gZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF07Cn0KCgoKCnZhciBydGFibGUgPSAv
XnQoPzphYmxlfGR8aCkkL2ksCiAgICAgICAgcnJvb3QgPSAvXig/OmJvZHl8aHRtbCkkL2k7Cgpp
ZiAoICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAp
IHsKICAgICAgICBqUXVlcnkuZm4ub2Zmc2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CiAgICAg
ICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF0sIGJveDsKCiAgICAgICAgICAgICAgICBpZiAo
IG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oIGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm9mZnNl
dC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8fCAhZWxl
bS5vd25lckRvY3VtZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGVsZW0gPT09IGVsZW0ub3du
ZXJEb2N1bWVudC5ib2R5ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5
Lm9mZnNldC5ib2R5T2Zmc2V0KCBlbGVtICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgYm94ID0gZWxlbS5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KCiAgICAgICAgICAg
ICAgICB2YXIgZG9jID0gZWxlbS5vd25lckRvY3VtZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDsKCiAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZQogICAg
ICAgICAgICAgICAgaWYgKCAhYm94IHx8ICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0g
KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJveCA/IHsgdG9wOiBib3gudG9w
LCBsZWZ0OiBib3gubGVmdCB9IDogeyB0b3A6IDAsIGxlZnQ6IDAgfTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICB2YXIgYm9keSA9IGRvYy5ib2R5LAogICAgICAgICAgICAgICAg
ICAgICAgICB3aW4gPSBnZXRXaW5kb3coZG9jKSwKICAgICAgICAgICAgICAgICAgICAgICAgY2xp
ZW50VG9wICA9IGRvY0VsZW0uY2xpZW50VG9wICB8fCBib2R5LmNsaWVudFRvcCAgfHwgMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgY2xpZW50TGVmdCA9IGRvY0VsZW0uY2xpZW50TGVmdCB8fCBi
b2R5LmNsaWVudExlZnQgfHwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wICA9
IHdpbi5wYWdlWU9mZnNldCB8fCBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAmJiBkb2NFbGVtLnNj
cm9sbFRvcCAgfHwgYm9keS5zY3JvbGxUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9s
bExlZnQgPSB3aW4ucGFnZVhPZmZzZXQgfHwgalF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwgJiYgZG9j
RWxlbS5zY3JvbGxMZWZ0IHx8IGJvZHkuc2Nyb2xsTGVmdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgdG9wICA9IGJveC50b3AgICsgc2Nyb2xsVG9wICAtIGNsaWVudFRvcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdCA9IGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQ7Cgog
ICAgICAgICAgICAgICAgcmV0dXJuIHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKICAgICAgICB9
OwoKfSBlbHNlIHsKICAgICAgICBqUXVlcnkuZm4ub2Zmc2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMg
KSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF07CgogICAgICAgICAgICAgICAg
aWYgKCBvcHRpb25zICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5v
ZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggIWVsZW0gfHwg
IWVsZW0ub3duZXJEb2N1bWVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBlbGVt
Lm93bmVyRG9jdW1lbnQuYm9keSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeS5vZmZzZXQuYm9keU9mZnNldCggZWxlbSApOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIGpRdWVyeS5vZmZzZXQuaW5pdGlhbGl6ZSgpOwoKICAgICAgICAgICAgICAgIHZh
ciBjb21wdXRlZFN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBl
bGVtLm9mZnNldFBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgcHJldk9mZnNldFBhcmVu
dCA9IGVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBkb2MuYm9keSwKICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdFZpZXcgPSBkb2MuZGVmYXVsdFZpZXcsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXZDb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRD
b21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICkgOiBlbGVtLmN1cnJlbnRTdHlsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgdG9wID0gZWxlbS5vZmZzZXRUb3AsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSBlbGVtLm9mZnNldExlZnQ7CgogICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxl
bSA9IGVsZW0ucGFyZW50Tm9kZSkgJiYgZWxlbSAhPT0gYm9keSAmJiBlbGVtICE9PSBkb2NFbGVt
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuc3VwcG9ydHNG
aXhlZFBvc2l0aW9uICYmIHByZXZDb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAiZml4ZWQiICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZFN0eWxlID0gZGVmYXVs
dFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpIDogZWxlbS5j
dXJyZW50U3R5bGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAgLT0gZWxlbS5zY3JvbGxU
b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgLT0gZWxlbS5zY3JvbGxMZWZ0OwoKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBvZmZzZXRQYXJlbnQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wICArPSBlbGVtLm9mZnNldFRvcDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IGVsZW0ub2Zmc2V0TGVmdDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkub2Zmc2V0LmRvZXNOb3RBZGRC
b3JkZXIgJiYgIShqUXVlcnkub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzICYm
IHJ0YWJsZS50ZXN0KGVsZW0ubm9kZU5hbWUpKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRvcCAgKz0gcGFyc2VGbG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJU
b3BXaWR0aCAgKSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdCArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCApIHx8IDA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmV2T2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50OwogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVy
eS5vZmZzZXQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlICYmIGNvbXB1dGVk
U3R5bGUub3ZlcmZsb3cgIT09ICJ2aXNpYmxlIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGgg
ICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IHBhcnNlRmxv
YXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoICkgfHwgMDsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNvbXB1dGVkU3R5bGUgPSBj
b21wdXRlZFN0eWxlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggcHJl
dkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICJyZWxhdGl2ZSIgfHwgcHJldkNvbXB1dGVkU3R5
bGUucG9zaXRpb24gPT09ICJzdGF0aWMiICkgewogICAgICAgICAgICAgICAgICAgICAgICB0b3Ag
ICs9IGJvZHkub2Zmc2V0VG9wOwogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IGJvZHku
b2Zmc2V0TGVmdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVy
eS5vZmZzZXQuc3VwcG9ydHNGaXhlZFBvc2l0aW9uICYmIHByZXZDb21wdXRlZFN0eWxlLnBvc2l0
aW9uID09PSAiZml4ZWQiICkgewogICAgICAgICAgICAgICAgICAgICAgICB0b3AgICs9IE1hdGgu
bWF4KCBkb2NFbGVtLnNjcm9sbFRvcCwgYm9keS5zY3JvbGxUb3AgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdCArPSBNYXRoLm1heCggZG9jRWxlbS5zY3JvbGxMZWZ0LCBib2R5LnNjcm9s
bExlZnQgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4geyB0b3A6
IHRvcCwgbGVmdDogbGVmdCB9OwogICAgICAgIH07Cn0KCmpRdWVyeS5vZmZzZXQgPSB7CiAgICAg
ICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgYm9keSA9IGRv
Y3VtZW50LmJvZHksIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBp
bm5lckRpdiwgY2hlY2tEaXYsIHRhYmxlLCB0ZCwgYm9keU1hcmdpblRvcCA9IHBhcnNlRmxvYXQo
IGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpblRvcCIpICkgfHwgMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgaHRtbCA9ICI8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7
bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0
OjFweDsnPjxkaXY+PC9kaXY+PC9kaXY+PHRhYmxlIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0
b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDt3aWR0
aDoxcHg7aGVpZ2h0OjFweDsnIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+PHRyPjx0
ZD48L3RkPjwvdHI+PC90YWJsZT4iOwoKICAgICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIGNv
bnRhaW5lci5zdHlsZSwgeyBwb3NpdGlvbjogImFic29sdXRlIiwgdG9wOiAwLCBsZWZ0OiAwLCBt
YXJnaW46IDAsIGJvcmRlcjogMCwgd2lkdGg6ICIxcHgiLCBoZWlnaHQ6ICIxcHgiLCB2aXNpYmls
aXR5OiAiaGlkZGVuIiB9ICk7CgogICAgICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9
IGh0bWw7CiAgICAgICAgICAgICAgICBib2R5Lmluc2VydEJlZm9yZSggY29udGFpbmVyLCBib2R5
LmZpcnN0Q2hpbGQgKTsKICAgICAgICAgICAgICAgIGlubmVyRGl2ID0gY29udGFpbmVyLmZpcnN0
Q2hpbGQ7CiAgICAgICAgICAgICAgICBjaGVja0RpdiA9IGlubmVyRGl2LmZpcnN0Q2hpbGQ7CiAg
ICAgICAgICAgICAgICB0ZCA9IGlubmVyRGl2Lm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RD
aGlsZDsKCiAgICAgICAgICAgICAgICB0aGlzLmRvZXNOb3RBZGRCb3JkZXIgPSAoY2hlY2tEaXYu
b2Zmc2V0VG9wICE9PSA1KTsKICAgICAgICAgICAgICAgIHRoaXMuZG9lc0FkZEJvcmRlckZvclRh
YmxlQW5kQ2VsbHMgPSAodGQub2Zmc2V0VG9wID09PSA1KTsKCiAgICAgICAgICAgICAgICBjaGVj
a0Rpdi5zdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7CiAgICAgICAgICAgICAgICBjaGVja0Rpdi5z
dHlsZS50b3AgPSAiMjBweCI7CgogICAgICAgICAgICAgICAgLy8gc2FmYXJpIHN1YnRyYWN0cyBw
YXJlbnQgYm9yZGVyIHdpZHRoIGhlcmUgd2hpY2ggaXMgNXB4CiAgICAgICAgICAgICAgICB0aGlz
LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiA9IChjaGVja0Rpdi5vZmZzZXRUb3AgPT09IDIwIHx8IGNo
ZWNrRGl2Lm9mZnNldFRvcCA9PT0gMTUpOwogICAgICAgICAgICAgICAgY2hlY2tEaXYuc3R5bGUu
cG9zaXRpb24gPSBjaGVja0Rpdi5zdHlsZS50b3AgPSAiIjsKCiAgICAgICAgICAgICAgICBpbm5l
ckRpdi5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwogICAgICAgICAgICAgICAgaW5uZXJEaXYu
c3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwoKICAgICAgICAgICAgICAgIHRoaXMuc3VidHJh
Y3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlID0gKGNoZWNrRGl2Lm9mZnNldFRvcCA9PT0g
LTUpOwoKICAgICAgICAgICAgICAgIHRoaXMuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZz
ZXQgPSAoYm9keS5vZmZzZXRUb3AgIT09IGJvZHlNYXJnaW5Ub3ApOwoKICAgICAgICAgICAgICAg
IGJvZHkucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApOwogICAgICAgICAgICAgICAgalF1ZXJ5Lm9m
ZnNldC5pbml0aWFsaXplID0galF1ZXJ5Lm5vb3A7CiAgICAgICAgfSwKCiAgICAgICAgYm9keU9m
ZnNldDogZnVuY3Rpb24oIGJvZHkgKSB7CiAgICAgICAgICAgICAgICB2YXIgdG9wID0gYm9keS5v
ZmZzZXRUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBib2R5Lm9mZnNldExlZnQ7
CgogICAgICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5pbml0aWFsaXplKCk7CgogICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkub2Zmc2V0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5j
c3MoYm9keSwgIm1hcmdpblRvcCIpICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJtYXJnaW5MZWZ0IikgKSB8fCAwOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB7IHRvcDogdG9wLCBsZWZ0
OiBsZWZ0IH07CiAgICAgICAgfSwKCiAgICAgICAgc2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwg
b3B0aW9ucywgaSApIHsKICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGpRdWVyeS5jc3Mo
IGVsZW0sICJwb3NpdGlvbiIgKTsKCiAgICAgICAgICAgICAgICAvLyBzZXQgcG9zaXRpb24gZmly
c3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtCiAgICAgICAg
ICAgICAgICBpZiAoIHBvc2l0aW9uID09PSAic3RhdGljIiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgdmFyIGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgY3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgY3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgInRvcCIgKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiAp
LAogICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVQb3NpdGlvbiA9IChwb3NpdGlvbiA9
PT0gImFic29sdXRlIiB8fCBwb3NpdGlvbiA9PT0gImZpeGVkIikgJiYgalF1ZXJ5LmluQXJyYXko
ImF1dG8iLCBbY3VyQ1NTVG9wLCBjdXJDU1NMZWZ0XSkgPiAtMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcHMgPSB7fSwgY3VyUG9zaXRpb24gPSB7fSwgY3VyVG9wLCBjdXJMZWZ0OwoKICAg
ICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYg
ZWl0aGVyIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0
ZSBvciBmaXhlZAogICAgICAgICAgICAgICAgaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgY3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKICAgICAgICAg
ICAgICAgICAgICAgICAgY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7CiAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBj
dXJDU1NUb3AgKSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICBjdXJMZWZ0ID0gcGFyc2VG
bG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBjdXJPZmZzZXQgKTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy50b3AgIT0gbnVsbCkg
ewogICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy50b3AgPSAob3B0aW9ucy50b3AgLSBjdXJP
ZmZzZXQudG9wKSArIGN1clRvcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlm
IChvcHRpb25zLmxlZnQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5s
ZWZ0ID0gKG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0KSArIGN1ckxlZnQ7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAidXNpbmciIGluIG9wdGlvbnMgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTsK
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckVsZW0u
Y3NzKCBwcm9wcyApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfTsKCgpqUXVlcnkuZm4u
ZXh0ZW5kKHsKICAgICAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBp
ZiAoICF0aGlzWzBdICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF0sCgogICAg
ICAgICAgICAgICAgLy8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnQKICAgICAgICAgICAgICAgIG9m
ZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCksCgogICAgICAgICAgICAgICAgLy8gR2V0
IGNvcnJlY3Qgb2Zmc2V0cwogICAgICAgICAgICAgICAgb2Zmc2V0ICAgICAgID0gdGhpcy5vZmZz
ZXQoKSwKICAgICAgICAgICAgICAgIHBhcmVudE9mZnNldCA9IHJyb290LnRlc3Qob2Zmc2V0UGFy
ZW50WzBdLm5vZGVOYW1lKSA/IHsgdG9wOiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zm
c2V0KCk7CgogICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZWxlbWVudCBtYXJnaW5zCiAgICAg
ICAgICAgICAgICAvLyBub3RlOiB3aGVuIGFuIGVsZW1lbnQgaGFzIG1hcmdpbjogYXV0byB0aGUg
b2Zmc2V0TGVmdCBhbmQgbWFyZ2luTGVmdAogICAgICAgICAgICAgICAgLy8gYXJlIHRoZSBzYW1l
IGluIFNhZmFyaSBjYXVzaW5nIG9mZnNldC5sZWZ0IHRvIGluY29ycmVjdGx5IGJlIDAKICAgICAg
ICAgICAgICAgIG9mZnNldC50b3AgIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1h
cmdpblRvcCIpICkgfHwgMDsKICAgICAgICAgICAgICAgIG9mZnNldC5sZWZ0IC09IHBhcnNlRmxv
YXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7CgogICAgICAgICAgICAg
ICAgLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCiAgICAgICAgICAgICAgICBwYXJlbnRPZmZz
ZXQudG9wICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKG9mZnNldFBhcmVudFswXSwgImJvcmRl
clRvcFdpZHRoIikgKSB8fCAwOwogICAgICAgICAgICAgICAgcGFyZW50T2Zmc2V0LmxlZnQgKz0g
cGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sICJib3JkZXJMZWZ0V2lkdGgi
KSApIHx8IDA7CgogICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgdGhlIHR3byBvZmZzZXRzCiAg
ICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICB0b3A6ICBvZmZz
ZXQudG9wICAtIHBhcmVudE9mZnNldC50b3AsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6
IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQKICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgfSwKCiAgICAgICAgb2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50LmJvZHk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICggb2Zmc2V0UGFyZW50ICYmICghcnJvb3QudGVzdChv
ZmZzZXRQYXJlbnQubm9kZU5hbWUpICYmIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCAicG9zaXRp
b24iKSA9PT0gInN0YXRpYyIpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9m
ZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldFBhcmVudDsKICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgIH0KfSk7CgoKLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5k
IHNjcm9sbFRvcCBtZXRob2RzCmpRdWVyeS5lYWNoKCBbIkxlZnQiLCAiVG9wIl0sIGZ1bmN0aW9u
KCBpLCBuYW1lICkgewogICAgICAgIHZhciBtZXRob2QgPSAic2Nyb2xsIiArIG5hbWU7CgogICAg
ICAgIGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkgewogICAgICAgICAgICAg
ICAgdmFyIGVsZW0sIHdpbjsKCiAgICAgICAgICAgICAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVk
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBdOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgd2luID0gZ2V0V2luZG93KCBlbGVtICk7CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBSZXR1cm4gdGhlIHNjcm9sbCBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHdpbiA/ICgicGFnZVhPZmZzZXQiIGluIHdpbikgPyB3aW5bIGkgPyAicGFnZVlPZmZz
ZXQiIDogInBhZ2VYT2Zmc2V0IiBdIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAmJiB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBt
ZXRob2QgXSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luLmRv
Y3VtZW50LmJvZHlbIG1ldGhvZCBdIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtWyBtZXRob2QgXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTZXQg
dGhlIHNjcm9sbCBvZmZzZXQKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdpbiA9IGdldFdpbmRvdyggdGhpcyApOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3aW4gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2luLnNjcm9sbFRvKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIWkgPyB2YWwgOiBqUXVlcnkoIHdpbiApLnNjcm9sbExlZnQoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5z
Y3JvbGxUb3AoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXNbIG1ldGhvZCBdID0gdmFsOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICB9Owp9KTsKCmZ1bmN0aW9uIGdldFdpbmRvdyggZWxlbSApIHsKICAg
ICAgICByZXR1cm4galF1ZXJ5LmlzV2luZG93KCBlbGVtICkgPwogICAgICAgICAgICAgICAgZWxl
bSA6CiAgICAgICAgICAgICAgICBlbGVtLm5vZGVUeXBlID09PSA5ID8KICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbS5kZWZhdWx0VmlldyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6CiAgICAgICAg
ICAgICAgICAgICAgICAgIGZhbHNlOwp9CgoKCgovLyBDcmVhdGUgd2lkdGgsIGhlaWdodCwgaW5u
ZXJIZWlnaHQsIGlubmVyV2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMK
alF1ZXJ5LmVhY2goWyAiSGVpZ2h0IiwgIldpZHRoIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsK
CiAgICAgICAgdmFyIHR5cGUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CgogICAgICAgIC8vIGlubmVy
SGVpZ2h0IGFuZCBpbm5lcldpZHRoCiAgICAgICAgalF1ZXJ5LmZuWyAiaW5uZXIiICsgbmFtZSBd
ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF07CiAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbSAmJiBlbGVtLnN0eWxlID8KICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgInBhZGRpbmciICkgKSA6
CiAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgLy8gb3V0
ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGgKICAgICAgICBqUXVlcnkuZm5bICJvdXRlciIgKyBuYW1l
IF0gPSBmdW5jdGlvbiggbWFyZ2luICkgewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlz
WzBdOwogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0gJiYgZWxlbS5zdHlsZSA/CiAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIG1hcmdp
biA/ICJtYXJnaW4iIDogImJvcmRlciIgKSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgbnVs
bDsKICAgICAgICB9OwoKICAgICAgICBqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBzaXpl
ICkgewogICAgICAgICAgICAgICAgLy8gR2V0IHdpbmRvdyB3aWR0aCBvciBoZWlnaHQKICAgICAg
ICAgICAgICAgIHZhciBlbGVtID0gdGhpc1swXTsKICAgICAgICAgICAgICAgIGlmICggIWVsZW0g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaXplID09IG51bGwgPyBudWxsIDog
dGhpczsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCBzaXplICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oIGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNl
bGYgPSBqUXVlcnkoIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
WyB0eXBlIF0oIHNpemUuY2FsbCggdGhpcywgaSwgc2VsZlsgdHlwZSBdKCkgKSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAv
LyBFdmVyeW9uZSBlbHNlIHVzZSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgb3IgZG9jdW1lbnQu
Ym9keSBkZXBlbmRpbmcgb24gUXVpcmtzIHZzIFN0YW5kYXJkcyBtb2RlCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIDNyZCBjb25kaXRpb24gYWxsb3dzIE5va2lhIHN1cHBvcnQsIGFzIGl0IHN1
cHBvcnRzIHRoZSBkb2NFbGVtIHByb3AgYnV0IG5vdCBDU1MxQ29tcGF0CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBkb2NFbGVtUHJvcCA9IGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
WyAiY2xpZW50IiArIG5hbWUgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5
ID0gZWxlbS5kb2N1bWVudC5ib2R5OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bS5kb2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBhdCIgJiYgZG9jRWxlbVByb3AgfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5ICYmIGJvZHlbICJjbGllbnQiICsg
bmFtZSBdIHx8IGRvY0VsZW1Qcm9wOwoKICAgICAgICAgICAgICAgIC8vIEdldCBkb2N1bWVudCB3
aWR0aCBvciBoZWlnaHQKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUg
PT09IDkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciBzY3JvbGxbV2lkdGgv
SGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSwgd2hpY2hldmVyIGlzIGdyZWF0ZXIKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0uZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiICsgbmFtZV0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5ib2R5WyJzY3JvbGwiICsgbmFtZV0sIGVs
ZW0uZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiICsgbmFtZV0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS5ib2R5WyJvZmZzZXQiICsgbmFtZV0sIGVsZW0uZG9jdW1lbnRFbGVt
ZW50WyJvZmZzZXQiICsgbmFtZV0KICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAg
ICAgICAgICAvLyBHZXQgb3Igc2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAogICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggc2l6ZSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgb3JpZyA9IGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUgKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBwYXJzZUZsb2F0KCBvcmlnICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmlzTmFOKCByZXQgKSA/IG9yaWcgOiBy
ZXQ7CgogICAgICAgICAgICAgICAgLy8gU2V0IHRoZSB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVs
ZW1lbnQgKGRlZmF1bHQgdG8gcGl4ZWxzIGlmIHZhbHVlIGlzIHVuaXRsZXNzKQogICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3NzKCB0
eXBlLCB0eXBlb2Ygc2l6ZSA9PT0gInN0cmluZyIgPyBzaXplIDogc2l6ZSArICJweCIgKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9OwoKfSk7CgoKLy8gRXhwb3NlIGpRdWVyeSB0byB0aGUg
Z2xvYmFsIG9iamVjdAp3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7Cn0pKHdpbmRv
dyk7Cl8QD3RleHQvamF2YXNjcmlwdF8QaWZpbGU6Ly8vVm9sdW1lcy9IREQvTm9uUGVyZm9yY2Uv
V2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvbGli
L2pxdWVyeS0xLjYuNC5qc9QFBgcIDg8QEU8RAlJicGxpc3QwMNQBAgMEBQY2N1gkdmVyc2lvblgk
b2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagqwcIHyUmLS4vMDEyVSRudWxs2wkKCwwNDg8QERIT
FBUWFxgZGhscHR5SJDNWJGNsYXNzUiQ2UiQxUiQ5UiQ0UiQ3UiQyUiQ1UiQwUiQ4gAKACoAHEACA
CYAFgAAQB4AGEAiACNMgCiEaIyRXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QVGZpbGU6Ly8v
Vm9sdW1lcy9IREQvTm9uUGVyZm9yY2UvV2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2Vz
L2pxdWVyeS5mbG90Lm1pbi5qc9InKCkqWiRjbGFzc25hbWVYJGNsYXNzZXNVTlNVUkyiKyxVTlNV
UkxYTlNPYmplY3QjQbcgRN44q/cQAl8QD3RleHQvamF2YXNjcmlwdBGSsyN/7////////9InKDM0
XU5TVVJMUmVzcG9uc2WiNSxdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctE4OV8QE1dl
YlJlc291cmNlUmVzcG9uc2WAAQAIABEAGgAjAC0AMgA3AEMASQBgAGMAagBtAHAAcwB2AHkAfAB/
AIIAhQCHAIkAiwCNAI8AkQCTAJUAlwCZAJsAogCqALYAuAC6ALwBEwEYASMBLAEyATUBOwFEAU0B
TwFhAWQBbQFyAYABgwGRAaMBpgG8AAAAAAAAAgEAAAAAAAAAOgAAAAAAAAAAAAAAAAAAAb5PEZKz
LyogSmF2YXNjcmlwdCBwbG90dGluZyBsaWJyYXJ5IGZvciBqUXVlcnksIHYuIDAuNy4KICoKICog
UmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGJ5IElPTEEsIERlY2VtYmVyIDIwMDcuCiAq
CiAqLwooZnVuY3Rpb24oYil7Yi5jb2xvcj17fTtiLmNvbG9yLm1ha2U9ZnVuY3Rpb24oZCxlLGcs
Zil7dmFyIGM9e307Yy5yPWR8fDA7Yy5nPWV8fDA7Yy5iPWd8fDA7Yy5hPWYhPW51bGw/ZjoxO2Mu
YWRkPWZ1bmN0aW9uKGgsail7Zm9yKHZhciBrPTA7azxoLmxlbmd0aDsrK2spe2NbaC5jaGFyQXQo
ayldKz1qfXJldHVybiBjLm5vcm1hbGl6ZSgpfTtjLnNjYWxlPWZ1bmN0aW9uKGgsail7Zm9yKHZh
ciBrPTA7azxoLmxlbmd0aDsrK2spe2NbaC5jaGFyQXQoayldKj1qfXJldHVybiBjLm5vcm1hbGl6
ZSgpfTtjLnRvU3RyaW5nPWZ1bmN0aW9uKCl7aWYoYy5hPj0xKXtyZXR1cm4icmdiKCIrW2Mucixj
LmcsYy5iXS5qb2luKCIsIikrIikifWVsc2V7cmV0dXJuInJnYmEoIitbYy5yLGMuZyxjLmIsYy5h
XS5qb2luKCIsIikrIikifX07Yy5ub3JtYWxpemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGssaixs
KXtyZXR1cm4gajxrP2s6KGo+bD9sOmopfWMucj1oKDAscGFyc2VJbnQoYy5yKSwyNTUpO2MuZz1o
KDAscGFyc2VJbnQoYy5nKSwyNTUpO2MuYj1oKDAscGFyc2VJbnQoYy5iKSwyNTUpO2MuYT1oKDAs
Yy5hLDEpO3JldHVybiBjfTtjLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGIuY29sb3IubWFrZShj
LnIsYy5iLGMuZyxjLmEpfTtyZXR1cm4gYy5ub3JtYWxpemUoKX07Yi5jb2xvci5leHRyYWN0PWZ1
bmN0aW9uKGQsZSl7dmFyIGM7ZG97Yz1kLmNzcyhlKS50b0xvd2VyQ2FzZSgpO2lmKGMhPSIiJiZj
IT0idHJhbnNwYXJlbnQiKXticmVha31kPWQucGFyZW50KCl9d2hpbGUoIWIubm9kZU5hbWUoZC5n
ZXQoMCksImJvZHkiKSk7aWYoYz09InJnYmEoMCwgMCwgMCwgMCkiKXtjPSJ0cmFuc3BhcmVudCJ9
cmV0dXJuIGIuY29sb3IucGFyc2UoYyl9O2IuY29sb3IucGFyc2U9ZnVuY3Rpb24oYyl7dmFyIGQs
Zj1iLmNvbG9yLm1ha2U7aWYoZD0vcmdiXChccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEs
M30pXHMqLFxzKihbMC05XXsxLDN9KVxzKlwpLy5leGVjKGMpKXtyZXR1cm4gZihwYXJzZUludChk
WzFdLDEwKSxwYXJzZUludChkWzJdLDEwKSxwYXJzZUludChkWzNdLDEwKSl9aWYoZD0vcmdiYVwo
XHMqKFswLTldezEsM30pXHMqLFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyos
XHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXHMqXCkvLmV4ZWMoYykpe3JldHVybiBmKHBhcnNlSW50
KGRbMV0sMTApLHBhcnNlSW50KGRbMl0sMTApLHBhcnNlSW50KGRbM10sMTApLHBhcnNlRmxvYXQo
ZFs0XSkpfWlmKGQ9L3JnYlwoXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMqKFswLTld
Kyg/OlwuWzAtOV0rKT8pXCVccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccypcKS8uZXhl
YyhjKSl7cmV0dXJuIGYocGFyc2VGbG9hdChkWzFdKSoyLjU1LHBhcnNlRmxvYXQoZFsyXSkqMi41
NSxwYXJzZUZsb2F0KGRbM10pKjIuNTUpfWlmKGQ9L3JnYmFcKFxzKihbMC05XSsoPzpcLlswLTld
Kyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlsw
LTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVxzKlwpLy5leGVjKGMpKXtyZXR1
cm4gZihwYXJzZUZsb2F0KGRbMV0pKjIuNTUscGFyc2VGbG9hdChkWzJdKSoyLjU1LHBhcnNlRmxv
YXQoZFszXSkqMi41NSxwYXJzZUZsb2F0KGRbNF0pKX1pZihkPS8jKFthLWZBLUYwLTldezJ9KShb
YS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pLy5leGVjKGMpKXtyZXR1cm4gZihwYXJzZUlu
dChkWzFdLDE2KSxwYXJzZUludChkWzJdLDE2KSxwYXJzZUludChkWzNdLDE2KSl9aWYoZD0vIyhb
YS1mQS1GMC05XSkoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKS8uZXhlYyhjKSl7cmV0dXJuIGYo
cGFyc2VJbnQoZFsxXStkWzFdLDE2KSxwYXJzZUludChkWzJdK2RbMl0sMTYpLHBhcnNlSW50KGRb
M10rZFszXSwxNikpfXZhciBlPWIudHJpbShjKS50b0xvd2VyQ2FzZSgpO2lmKGU9PSJ0cmFuc3Bh
cmVudCIpe3JldHVybiBmKDI1NSwyNTUsMjU1LDApfWVsc2V7ZD1hW2VdfHxbMCwwLDBdO3JldHVy
biBmKGRbMF0sZFsxXSxkWzJdKX19O3ZhciBhPXthcXVhOlswLDI1NSwyNTVdLGF6dXJlOlsyNDAs
MjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxibGFjazpbMCwwLDBdLGJsdWU6WzAsMCwyNTVd
LGJyb3duOlsxNjUsNDIsNDJdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRh
cmtjeWFuOlswLDEzOSwxMzldLGRhcmtncmV5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEw
MCwwXSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJr
b2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6
WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxk
YXJrdmlvbGV0OlsxNDgsMCwyMTFdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ29sZDpbMjU1LDIxNSww
XSxncmVlbjpbMCwxMjgsMF0saW5kaWdvOls3NSwwLDEzMF0sa2hha2k6WzI0MCwyMzAsMTQwXSxs
aWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGN5YW46WzIyNCwyNTUsMjU1XSxsaWdodGdyZWVu
OlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgy
LDE5M10sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxtYWdlbnRhOlsy
NTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbmF2eTpbMCwwLDEyOF0sb2xpdmU6WzEyOCwxMjgs
MF0sb3JhbmdlOlsyNTUsMTY1LDBdLHBpbms6WzI1NSwxOTIsMjAzXSxwdXJwbGU6WzEyOCwwLDEy
OF0sdmlvbGV0OlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0sc2lsdmVyOlsxOTIsMTkyLDE5Ml0s
d2hpdGU6WzI1NSwyNTUsMjU1XSx5ZWxsb3c6WzI1NSwyNTUsMF19fSkoalF1ZXJ5KTsoZnVuY3Rp
b24oYyl7ZnVuY3Rpb24gYihhdixhaSxKLGFmKXt2YXIgUT1bXSxPPXtjb2xvcnM6WyIjZWRjMjQw
IiwiI2FmZDhmOCIsIiNjYjRiNGIiLCIjNGRhNzRkIiwiIzk0NDBlZCJdLGxlZ2VuZDp7c2hvdzp0
cnVlLG5vQ29sdW1uczoxLGxhYmVsRm9ybWF0dGVyOm51bGwsbGFiZWxCb3hCb3JkZXJDb2xvcjoi
I2NjYyIsY29udGFpbmVyOm51bGwscG9zaXRpb246Im5lIixtYXJnaW46NSxiYWNrZ3JvdW5kQ29s
b3I6bnVsbCxiYWNrZ3JvdW5kT3BhY2l0eTowLjg1fSx4YXhpczp7c2hvdzpudWxsLHBvc2l0aW9u
OiJib3R0b20iLG1vZGU6bnVsbCxjb2xvcjpudWxsLHRpY2tDb2xvcjpudWxsLHRyYW5zZm9ybTpu
dWxsLGludmVyc2VUcmFuc2Zvcm06bnVsbCxtaW46bnVsbCxtYXg6bnVsbCxhdXRvc2NhbGVNYXJn
aW46bnVsbCx0aWNrczpudWxsLHRpY2tGb3JtYXR0ZXI6bnVsbCxsYWJlbFdpZHRoOm51bGwsbGFi
ZWxIZWlnaHQ6bnVsbCxyZXNlcnZlU3BhY2U6bnVsbCx0aWNrTGVuZ3RoOm51bGwsYWxpZ25UaWNr
c1dpdGhBeGlzOm51bGwsdGlja0RlY2ltYWxzOm51bGwsdGlja1NpemU6bnVsbCxtaW5UaWNrU2l6
ZTpudWxsLG1vbnRoTmFtZXM6bnVsbCx0aW1lZm9ybWF0Om51bGwsdHdlbHZlSG91ckNsb2NrOmZh
bHNlfSx5YXhpczp7YXV0b3NjYWxlTWFyZ2luOjAuMDIscG9zaXRpb246ImxlZnQifSx4YXhlczpb
XSx5YXhlczpbXSxzZXJpZXM6e3BvaW50czp7c2hvdzpmYWxzZSxyYWRpdXM6MyxsaW5lV2lkdGg6
MixmaWxsOnRydWUsZmlsbENvbG9yOiIjZmZmZmZmIixzeW1ib2w6ImNpcmNsZSJ9LGxpbmVzOnts
aW5lV2lkdGg6MixmaWxsOmZhbHNlLGZpbGxDb2xvcjpudWxsLHN0ZXBzOmZhbHNlfSxiYXJzOntz
aG93OmZhbHNlLGxpbmVXaWR0aDoyLGJhcldpZHRoOjEsZmlsbDp0cnVlLGZpbGxDb2xvcjpudWxs
LGFsaWduOiJsZWZ0Iixob3Jpem9udGFsOmZhbHNlfSxzaGFkb3dTaXplOjN9LGdyaWQ6e3Nob3c6
dHJ1ZSxhYm92ZURhdGE6ZmFsc2UsY29sb3I6IiM1NDU0NTQiLGJhY2tncm91bmRDb2xvcjpudWxs
LGJvcmRlckNvbG9yOm51bGwsdGlja0NvbG9yOm51bGwsbGFiZWxNYXJnaW46NSxheGlzTWFyZ2lu
OjgsYm9yZGVyV2lkdGg6MixtaW5Cb3JkZXJNYXJnaW46bnVsbCxtYXJraW5nczpudWxsLG1hcmtp
bmdzQ29sb3I6IiNmNGY0ZjQiLG1hcmtpbmdzTGluZVdpZHRoOjIsY2xpY2thYmxlOmZhbHNlLGhv
dmVyYWJsZTpmYWxzZSxhdXRvSGlnaGxpZ2h0OnRydWUsbW91c2VBY3RpdmVSYWRpdXM6MTB9LGhv
b2tzOnt9fSxhej1udWxsLGFkPW51bGwseT1udWxsLEg9bnVsbCxBPW51bGwscD1bXSxhdz1bXSxx
PXtsZWZ0OjAscmlnaHQ6MCx0b3A6MCxib3R0b206MH0sRz0wLEk9MCxoPTAsdz0wLGFrPXtwcm9j
ZXNzT3B0aW9uczpbXSxwcm9jZXNzUmF3RGF0YTpbXSxwcm9jZXNzRGF0YXBvaW50czpbXSxkcmF3
U2VyaWVzOltdLGRyYXc6W10sYmluZEV2ZW50czpbXSxkcmF3T3ZlcmxheTpbXSxzaHV0ZG93bjpb
XX0sYXE9dGhpczthcS5zZXREYXRhPWFqO2FxLnNldHVwR3JpZD10O2FxLmRyYXc9VzthcS5nZXRQ
bGFjZWhvbGRlcj1mdW5jdGlvbigpe3JldHVybiBhdn07YXEuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7
cmV0dXJuIGF6fTthcS5nZXRQbG90T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHF9O2FxLndpZHRo
PWZ1bmN0aW9uKCl7cmV0dXJuIGh9O2FxLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB3fTthcS5v
ZmZzZXQ9ZnVuY3Rpb24oKXt2YXIgYUI9eS5vZmZzZXQoKTthQi5sZWZ0Kz1xLmxlZnQ7YUIudG9w
Kz1xLnRvcDtyZXR1cm4gYUJ9O2FxLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gUX07YXEuZ2V0
QXhlcz1mdW5jdGlvbigpe3ZhciBhQz17fSxhQjtjLmVhY2gocC5jb25jYXQoYXcpLGZ1bmN0aW9u
KGFELGFFKXtpZihhRSl7YUNbYUUuZGlyZWN0aW9uKyhhRS5uIT0xP2FFLm46IiIpKyJheGlzIl09
YUV9fSk7cmV0dXJuIGFDfTthcS5nZXRYQXhlcz1mdW5jdGlvbigpe3JldHVybiBwfTthcS5nZXRZ
QXhlcz1mdW5jdGlvbigpe3JldHVybiBhd307YXEuYzJwPUM7YXEucDJjPWFyO2FxLmdldE9wdGlv
bnM9ZnVuY3Rpb24oKXtyZXR1cm4gT307YXEuaGlnaGxpZ2h0PXg7YXEudW5oaWdobGlnaHQ9VDth
cS50cmlnZ2VyUmVkcmF3T3ZlcmxheT1mO2FxLnBvaW50T2Zmc2V0PWZ1bmN0aW9uKGFCKXtyZXR1
cm57bGVmdDpwYXJzZUludChwW2FBKGFCLCJ4IiktMV0ucDJjKCthQi54KStxLmxlZnQpLHRvcDpw
YXJzZUludChhd1thQShhQiwieSIpLTFdLnAyYygrYUIueSkrcS50b3ApfX07YXEuc2h1dGRvd249
YWc7YXEucmVzaXplPWZ1bmN0aW9uKCl7QigpO2coYXopO2coYWQpfTthcS5ob29rcz1haztGKGFx
KTtaKEopO1goKTthaihhaSk7dCgpO1coKTthaCgpO2Z1bmN0aW9uIGFuKGFELGFCKXthQj1bYXFd
LmNvbmNhdChhQik7Zm9yKHZhciBhQz0wO2FDPGFELmxlbmd0aDsrK2FDKXthRFthQ10uYXBwbHko
dGhpcyxhQil9fWZ1bmN0aW9uIEYoKXtmb3IodmFyIGFCPTA7YUI8YWYubGVuZ3RoOysrYUIpe3Zh
ciBhQz1hZlthQl07YUMuaW5pdChhcSk7aWYoYUMub3B0aW9ucyl7Yy5leHRlbmQodHJ1ZSxPLGFD
Lm9wdGlvbnMpfX19ZnVuY3Rpb24gWihhQyl7dmFyIGFCO2MuZXh0ZW5kKHRydWUsTyxhQyk7aWYo
Ty54YXhpcy5jb2xvcj09bnVsbCl7Ty54YXhpcy5jb2xvcj1PLmdyaWQuY29sb3J9aWYoTy55YXhp
cy5jb2xvcj09bnVsbCl7Ty55YXhpcy5jb2xvcj1PLmdyaWQuY29sb3J9aWYoTy54YXhpcy50aWNr
Q29sb3I9PW51bGwpe08ueGF4aXMudGlja0NvbG9yPU8uZ3JpZC50aWNrQ29sb3J9aWYoTy55YXhp
cy50aWNrQ29sb3I9PW51bGwpe08ueWF4aXMudGlja0NvbG9yPU8uZ3JpZC50aWNrQ29sb3J9aWYo
Ty5ncmlkLmJvcmRlckNvbG9yPT1udWxsKXtPLmdyaWQuYm9yZGVyQ29sb3I9Ty5ncmlkLmNvbG9y
fWlmKE8uZ3JpZC50aWNrQ29sb3I9PW51bGwpe08uZ3JpZC50aWNrQ29sb3I9Yy5jb2xvci5wYXJz
ZShPLmdyaWQuY29sb3IpLnNjYWxlKCJhIiwwLjIyKS50b1N0cmluZygpfWZvcihhQj0wO2FCPE1h
dGgubWF4KDEsTy54YXhlcy5sZW5ndGgpOysrYUIpe08ueGF4ZXNbYUJdPWMuZXh0ZW5kKHRydWUs
e30sTy54YXhpcyxPLnhheGVzW2FCXSl9Zm9yKGFCPTA7YUI8TWF0aC5tYXgoMSxPLnlheGVzLmxl
bmd0aCk7KythQil7Ty55YXhlc1thQl09Yy5leHRlbmQodHJ1ZSx7fSxPLnlheGlzLE8ueWF4ZXNb
YUJdKX1pZihPLnhheGlzLm5vVGlja3MmJk8ueGF4aXMudGlja3M9PW51bGwpe08ueGF4aXMudGlj
a3M9Ty54YXhpcy5ub1RpY2tzfWlmKE8ueWF4aXMubm9UaWNrcyYmTy55YXhpcy50aWNrcz09bnVs
bCl7Ty55YXhpcy50aWNrcz1PLnlheGlzLm5vVGlja3N9aWYoTy54MmF4aXMpe08ueGF4ZXNbMV09
Yy5leHRlbmQodHJ1ZSx7fSxPLnhheGlzLE8ueDJheGlzKTtPLnhheGVzWzFdLnBvc2l0aW9uPSJ0
b3AifWlmKE8ueTJheGlzKXtPLnlheGVzWzFdPWMuZXh0ZW5kKHRydWUse30sTy55YXhpcyxPLnky
YXhpcyk7Ty55YXhlc1sxXS5wb3NpdGlvbj0icmlnaHQifWlmKE8uZ3JpZC5jb2xvcmVkQXJlYXMp
e08uZ3JpZC5tYXJraW5ncz1PLmdyaWQuY29sb3JlZEFyZWFzfWlmKE8uZ3JpZC5jb2xvcmVkQXJl
YXNDb2xvcil7Ty5ncmlkLm1hcmtpbmdzQ29sb3I9Ty5ncmlkLmNvbG9yZWRBcmVhc0NvbG9yfWlm
KE8ubGluZXMpe2MuZXh0ZW5kKHRydWUsTy5zZXJpZXMubGluZXMsTy5saW5lcyl9aWYoTy5wb2lu
dHMpe2MuZXh0ZW5kKHRydWUsTy5zZXJpZXMucG9pbnRzLE8ucG9pbnRzKX1pZihPLmJhcnMpe2Mu
ZXh0ZW5kKHRydWUsTy5zZXJpZXMuYmFycyxPLmJhcnMpfWlmKE8uc2hhZG93U2l6ZSE9bnVsbCl7
Ty5zZXJpZXMuc2hhZG93U2l6ZT1PLnNoYWRvd1NpemV9Zm9yKGFCPTA7YUI8Ty54YXhlcy5sZW5n
dGg7KythQil7VihwLGFCKzEpLm9wdGlvbnM9Ty54YXhlc1thQl19Zm9yKGFCPTA7YUI8Ty55YXhl
cy5sZW5ndGg7KythQil7VihhdyxhQisxKS5vcHRpb25zPU8ueWF4ZXNbYUJdfWZvcih2YXIgYUQg
aW4gYWspe2lmKE8uaG9va3NbYURdJiZPLmhvb2tzW2FEXS5sZW5ndGgpe2FrW2FEXT1ha1thRF0u
Y29uY2F0KE8uaG9va3NbYURdKX19YW4oYWsucHJvY2Vzc09wdGlvbnMsW09dKX1mdW5jdGlvbiBh
aihhQil7UT1ZKGFCKTtheCgpO3ooKX1mdW5jdGlvbiBZKGFFKXt2YXIgYUM9W107Zm9yKHZhciBh
Qj0wO2FCPGFFLmxlbmd0aDsrK2FCKXt2YXIgYUQ9Yy5leHRlbmQodHJ1ZSx7fSxPLnNlcmllcyk7
aWYoYUVbYUJdLmRhdGEhPW51bGwpe2FELmRhdGE9YUVbYUJdLmRhdGE7ZGVsZXRlIGFFW2FCXS5k
YXRhO2MuZXh0ZW5kKHRydWUsYUQsYUVbYUJdKTthRVthQl0uZGF0YT1hRC5kYXRhfWVsc2V7YUQu
ZGF0YT1hRVthQl19YUMucHVzaChhRCl9cmV0dXJuIGFDfWZ1bmN0aW9uIGFBKGFDLGFEKXt2YXIg
YUI9YUNbYUQrImF4aXMiXTtpZih0eXBlb2YgYUI9PSJvYmplY3QiKXthQj1hQi5ufWlmKHR5cGVv
ZiBhQiE9Im51bWJlciIpe2FCPTF9cmV0dXJuIGFCfWZ1bmN0aW9uIG0oKXtyZXR1cm4gYy5ncmVw
KHAuY29uY2F0KGF3KSxmdW5jdGlvbihhQil7cmV0dXJuIGFCfSl9ZnVuY3Rpb24gQyhhRSl7dmFy
IGFDPXt9LGFCLGFEO2ZvcihhQj0wO2FCPHAubGVuZ3RoOysrYUIpe2FEPXBbYUJdO2lmKGFEJiZh
RC51c2VkKXthQ1sieCIrYUQubl09YUQuYzJwKGFFLmxlZnQpfX1mb3IoYUI9MDthQjxhdy5sZW5n
dGg7KythQil7YUQ9YXdbYUJdO2lmKGFEJiZhRC51c2VkKXthQ1sieSIrYUQubl09YUQuYzJwKGFF
LnRvcCl9fWlmKGFDLngxIT09dW5kZWZpbmVkKXthQy54PWFDLngxfWlmKGFDLnkxIT09dW5kZWZp
bmVkKXthQy55PWFDLnkxfXJldHVybiBhQ31mdW5jdGlvbiBhcihhRil7dmFyIGFEPXt9LGFDLGFF
LGFCO2ZvcihhQz0wO2FDPHAubGVuZ3RoOysrYUMpe2FFPXBbYUNdO2lmKGFFJiZhRS51c2VkKXth
Qj0ieCIrYUUubjtpZihhRlthQl09PW51bGwmJmFFLm49PTEpe2FCPSJ4In1pZihhRlthQl0hPW51
bGwpe2FELmxlZnQ9YUUucDJjKGFGW2FCXSk7YnJlYWt9fX1mb3IoYUM9MDthQzxhdy5sZW5ndGg7
KythQyl7YUU9YXdbYUNdO2lmKGFFJiZhRS51c2VkKXthQj0ieSIrYUUubjtpZihhRlthQl09PW51
bGwmJmFFLm49PTEpe2FCPSJ5In1pZihhRlthQl0hPW51bGwpe2FELnRvcD1hRS5wMmMoYUZbYUJd
KTticmVha319fXJldHVybiBhRH1mdW5jdGlvbiBWKGFDLGFCKXtpZighYUNbYUItMV0pe2FDW2FC
LTFdPXtuOmFCLGRpcmVjdGlvbjphQz09cD8ieCI6InkiLG9wdGlvbnM6Yy5leHRlbmQodHJ1ZSx7
fSxhQz09cD9PLnhheGlzOk8ueWF4aXMpfX1yZXR1cm4gYUNbYUItMV19ZnVuY3Rpb24gYXgoKXt2
YXIgYUc7dmFyIGFNPVEubGVuZ3RoLGFCPVtdLGFFPVtdO2ZvcihhRz0wO2FHPFEubGVuZ3RoOysr
YUcpe3ZhciBhSj1RW2FHXS5jb2xvcjtpZihhSiE9bnVsbCl7LS1hTTtpZih0eXBlb2YgYUo9PSJu
dW1iZXIiKXthRS5wdXNoKGFKKX1lbHNle2FCLnB1c2goYy5jb2xvci5wYXJzZShRW2FHXS5jb2xv
cikpfX19Zm9yKGFHPTA7YUc8YUUubGVuZ3RoOysrYUcpe2FNPU1hdGgubWF4KGFNLGFFW2FHXSsx
KX12YXIgYUM9W10sYUY9MDthRz0wO3doaWxlKGFDLmxlbmd0aDxhTSl7dmFyIGFJO2lmKE8uY29s
b3JzLmxlbmd0aD09YUcpe2FJPWMuY29sb3IubWFrZSgxMDAsMTAwLDEwMCl9ZWxzZXthST1jLmNv
bG9yLnBhcnNlKE8uY29sb3JzW2FHXSl9dmFyIGFEPWFGJTI9PTE/LTE6MTthSS5zY2FsZSgicmdi
IiwxK2FEKk1hdGguY2VpbChhRi8yKSowLjIpO2FDLnB1c2goYUkpOysrYUc7aWYoYUc+PU8uY29s
b3JzLmxlbmd0aCl7YUc9MDsrK2FGfX12YXIgYUg9MCxhTjtmb3IoYUc9MDthRzxRLmxlbmd0aDsr
K2FHKXthTj1RW2FHXTtpZihhTi5jb2xvcj09bnVsbCl7YU4uY29sb3I9YUNbYUhdLnRvU3RyaW5n
KCk7KythSH1lbHNle2lmKHR5cGVvZiBhTi5jb2xvcj09Im51bWJlciIpe2FOLmNvbG9yPWFDW2FO
LmNvbG9yXS50b1N0cmluZygpfX1pZihhTi5saW5lcy5zaG93PT1udWxsKXt2YXIgYUwsYUs9dHJ1
ZTtmb3IoYUwgaW4gYU4pe2lmKGFOW2FMXSYmYU5bYUxdLnNob3cpe2FLPWZhbHNlO2JyZWFrfX1p
ZihhSyl7YU4ubGluZXMuc2hvdz10cnVlfX1hTi54YXhpcz1WKHAsYUEoYU4sIngiKSk7YU4ueWF4
aXM9VihhdyxhQShhTiwieSIpKX19ZnVuY3Rpb24geigpe3ZhciBhTz1OdW1iZXIuUE9TSVRJVkVf
SU5GSU5JVFksYUk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGFCPU51bWJlci5NQVhfVkFMVUUs
YVUsYVMsYVIsYU4sYUQsYUosYVQsYVAsYUgsYUcsYUMsYTAsYVgsYUw7ZnVuY3Rpb24gYUYoYTMs
YTIsYTEpe2lmKGEyPGEzLmRhdGFtaW4mJmEyIT0tYUIpe2EzLmRhdGFtaW49YTJ9aWYoYTE+YTMu
ZGF0YW1heCYmYTEhPWFCKXthMy5kYXRhbWF4PWExfX1jLmVhY2gobSgpLGZ1bmN0aW9uKGExLGEy
KXthMi5kYXRhbWluPWFPO2EyLmRhdGFtYXg9YUk7YTIudXNlZD1mYWxzZX0pO2ZvcihhVT0wO2FV
PFEubGVuZ3RoOysrYVUpe2FKPVFbYVVdO2FKLmRhdGFwb2ludHM9e3BvaW50czpbXX07YW4oYWsu
cHJvY2Vzc1Jhd0RhdGEsW2FKLGFKLmRhdGEsYUouZGF0YXBvaW50c10pfWZvcihhVT0wO2FVPFEu
bGVuZ3RoOysrYVUpe2FKPVFbYVVdO3ZhciBhWj1hSi5kYXRhLGFXPWFKLmRhdGFwb2ludHMuZm9y
bWF0O2lmKCFhVyl7YVc9W107YVcucHVzaCh7eDp0cnVlLG51bWJlcjp0cnVlLHJlcXVpcmVkOnRy
dWV9KTthVy5wdXNoKHt5OnRydWUsbnVtYmVyOnRydWUscmVxdWlyZWQ6dHJ1ZX0pO2lmKGFKLmJh
cnMuc2hvd3x8KGFKLmxpbmVzLnNob3cmJmFKLmxpbmVzLmZpbGwpKXthVy5wdXNoKHt5OnRydWUs
bnVtYmVyOnRydWUscmVxdWlyZWQ6ZmFsc2UsZGVmYXVsdFZhbHVlOjB9KTtpZihhSi5iYXJzLmhv
cml6b250YWwpe2RlbGV0ZSBhV1thVy5sZW5ndGgtMV0ueTthV1thVy5sZW5ndGgtMV0ueD10cnVl
fX1hSi5kYXRhcG9pbnRzLmZvcm1hdD1hV31pZihhSi5kYXRhcG9pbnRzLnBvaW50c2l6ZSE9bnVs
bCl7Y29udGludWV9YUouZGF0YXBvaW50cy5wb2ludHNpemU9YVcubGVuZ3RoO2FQPWFKLmRhdGFw
b2ludHMucG9pbnRzaXplO2FUPWFKLmRhdGFwb2ludHMucG9pbnRzO2luc2VydFN0ZXBzPWFKLmxp
bmVzLnNob3cmJmFKLmxpbmVzLnN0ZXBzO2FKLnhheGlzLnVzZWQ9YUoueWF4aXMudXNlZD10cnVl
O2ZvcihhUz1hUj0wO2FTPGFaLmxlbmd0aDsrK2FTLGFSKz1hUCl7YUw9YVpbYVNdO3ZhciBhRT1h
TD09bnVsbDtpZighYUUpe2ZvcihhTj0wO2FOPGFQOysrYU4pe2EwPWFMW2FOXTthWD1hV1thTl07
aWYoYVgpe2lmKGFYLm51bWJlciYmYTAhPW51bGwpe2EwPSthMDtpZihpc05hTihhMCkpe2EwPW51
bGx9ZWxzZXtpZihhMD09SW5maW5pdHkpe2EwPWFCfWVsc2V7aWYoYTA9PS1JbmZpbml0eSl7YTA9
LWFCfX19fWlmKGEwPT1udWxsKXtpZihhWC5yZXF1aXJlZCl7YUU9dHJ1ZX1pZihhWC5kZWZhdWx0
VmFsdWUhPW51bGwpe2EwPWFYLmRlZmF1bHRWYWx1ZX19fWFUW2FSK2FOXT1hMH19aWYoYUUpe2Zv
cihhTj0wO2FOPGFQOysrYU4pe2EwPWFUW2FSK2FOXTtpZihhMCE9bnVsbCl7YVg9YVdbYU5dO2lm
KGFYLngpe2FGKGFKLnhheGlzLGEwLGEwKX1pZihhWC55KXthRihhSi55YXhpcyxhMCxhMCl9fWFU
W2FSK2FOXT1udWxsfX1lbHNle2lmKGluc2VydFN0ZXBzJiZhUj4wJiZhVFthUi1hUF0hPW51bGwm
JmFUW2FSLWFQXSE9YVRbYVJdJiZhVFthUi1hUCsxXSE9YVRbYVIrMV0pe2ZvcihhTj0wO2FOPGFQ
OysrYU4pe2FUW2FSK2FQK2FOXT1hVFthUithTl19YVRbYVIrMV09YVRbYVItYVArMV07YVIrPWFQ
fX19fWZvcihhVT0wO2FVPFEubGVuZ3RoOysrYVUpe2FKPVFbYVVdO2FuKGFrLnByb2Nlc3NEYXRh
cG9pbnRzLFthSixhSi5kYXRhcG9pbnRzXSl9Zm9yKGFVPTA7YVU8US5sZW5ndGg7KythVSl7YUo9
UVthVV07YVQ9YUouZGF0YXBvaW50cy5wb2ludHMsYVA9YUouZGF0YXBvaW50cy5wb2ludHNpemU7
dmFyIGFLPWFPLGFRPWFPLGFNPWFJLGFWPWFJO2ZvcihhUz0wO2FTPGFULmxlbmd0aDthUys9YVAp
e2lmKGFUW2FTXT09bnVsbCl7Y29udGludWV9Zm9yKGFOPTA7YU48YVA7KythTil7YTA9YVRbYVMr
YU5dO2FYPWFXW2FOXTtpZighYVh8fGEwPT1hQnx8YTA9PS1hQil7Y29udGludWV9aWYoYVgueCl7
aWYoYTA8YUspe2FLPWEwfWlmKGEwPmFNKXthTT1hMH19aWYoYVgueSl7aWYoYTA8YVEpe2FRPWEw
fWlmKGEwPmFWKXthVj1hMH19fX1pZihhSi5iYXJzLnNob3cpe3ZhciBhWT1hSi5iYXJzLmFsaWdu
PT0ibGVmdCI/MDotYUouYmFycy5iYXJXaWR0aC8yO2lmKGFKLmJhcnMuaG9yaXpvbnRhbCl7YVEr
PWFZO2FWKz1hWSthSi5iYXJzLmJhcldpZHRofWVsc2V7YUsrPWFZO2FNKz1hWSthSi5iYXJzLmJh
cldpZHRofX1hRihhSi54YXhpcyxhSyxhTSk7YUYoYUoueWF4aXMsYVEsYVYpfWMuZWFjaChtKCks
ZnVuY3Rpb24oYTEsYTIpe2lmKGEyLmRhdGFtaW49PWFPKXthMi5kYXRhbWluPW51bGx9aWYoYTIu
ZGF0YW1heD09YUkpe2EyLmRhdGFtYXg9bnVsbH19KX1mdW5jdGlvbiBqKGFCLGFDKXt2YXIgYUQ9
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7YUQuY2xhc3NOYW1lPWFDO2FELndpZHRo
PUc7YUQuaGVpZ2h0PUk7aWYoIWFCKXtjKGFEKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVm
dDowLHRvcDowfSl9YyhhRCkuYXBwZW5kVG8oYXYpO2lmKCFhRC5nZXRDb250ZXh0KXthRD13aW5k
b3cuR192bWxDYW52YXNNYW5hZ2VyLmluaXRFbGVtZW50KGFEKX1hRC5nZXRDb250ZXh0KCIyZCIp
LnNhdmUoKTtyZXR1cm4gYUR9ZnVuY3Rpb24gQigpe0c9YXYud2lkdGgoKTtJPWF2LmhlaWdodCgp
O2lmKEc8PTB8fEk8PTApe3Rocm93IkludmFsaWQgZGltZW5zaW9ucyBmb3IgcGxvdCwgd2lkdGgg
PSAiK0crIiwgaGVpZ2h0ID0gIitJfX1mdW5jdGlvbiBnKGFDKXtpZihhQy53aWR0aCE9Ryl7YUMu
d2lkdGg9R31pZihhQy5oZWlnaHQhPUkpe2FDLmhlaWdodD1JfXZhciBhQj1hQy5nZXRDb250ZXh0
KCIyZCIpO2FCLnJlc3RvcmUoKTthQi5zYXZlKCl9ZnVuY3Rpb24gWCgpe3ZhciBhQyxhQj1hdi5j
aGlsZHJlbigiY2FudmFzLmJhc2UiKSxhRD1hdi5jaGlsZHJlbigiY2FudmFzLm92ZXJsYXkiKTtp
ZihhQi5sZW5ndGg9PTB8fGFEPT0wKXthdi5odG1sKCIiKTthdi5jc3Moe3BhZGRpbmc6MH0pO2lm
KGF2LmNzcygicG9zaXRpb24iKT09InN0YXRpYyIpe2F2LmNzcygicG9zaXRpb24iLCJyZWxhdGl2
ZSIpfUIoKTthej1qKHRydWUsImJhc2UiKTthZD1qKGZhbHNlLCJvdmVybGF5Iik7YUM9ZmFsc2V9
ZWxzZXthej1hQi5nZXQoMCk7YWQ9YUQuZ2V0KDApO2FDPXRydWV9SD1hei5nZXRDb250ZXh0KCIy
ZCIpO0E9YWQuZ2V0Q29udGV4dCgiMmQiKTt5PWMoW2FkLGF6XSk7aWYoYUMpe2F2LmRhdGEoInBs
b3QiKS5zaHV0ZG93bigpO2FxLnJlc2l6ZSgpO0EuY2xlYXJSZWN0KDAsMCxHLEkpO3kudW5iaW5k
KCk7YXYuY2hpbGRyZW4oKS5ub3QoW2F6LGFkXSkucmVtb3ZlKCl9YXYuZGF0YSgicGxvdCIsYXEp
fWZ1bmN0aW9uIGFoKCl7aWYoTy5ncmlkLmhvdmVyYWJsZSl7eS5tb3VzZW1vdmUoYWEpO3kubW91
c2VsZWF2ZShsKX1pZihPLmdyaWQuY2xpY2thYmxlKXt5LmNsaWNrKFIpfWFuKGFrLmJpbmRFdmVu
dHMsW3ldKX1mdW5jdGlvbiBhZygpe2lmKE0pe2NsZWFyVGltZW91dChNKX15LnVuYmluZCgibW91
c2Vtb3ZlIixhYSk7eS51bmJpbmQoIm1vdXNlbGVhdmUiLGwpO3kudW5iaW5kKCJjbGljayIsUik7
YW4oYWsuc2h1dGRvd24sW3ldKX1mdW5jdGlvbiByKGFHKXtmdW5jdGlvbiBhQyhhSCl7cmV0dXJu
IGFIfXZhciBhRixhQixhRD1hRy5vcHRpb25zLnRyYW5zZm9ybXx8YUMsYUU9YUcub3B0aW9ucy5p
bnZlcnNlVHJhbnNmb3JtO2lmKGFHLmRpcmVjdGlvbj09IngiKXthRj1hRy5zY2FsZT1oL01hdGgu
YWJzKGFEKGFHLm1heCktYUQoYUcubWluKSk7YUI9TWF0aC5taW4oYUQoYUcubWF4KSxhRChhRy5t
aW4pKX1lbHNle2FGPWFHLnNjYWxlPXcvTWF0aC5hYnMoYUQoYUcubWF4KS1hRChhRy5taW4pKTth
Rj0tYUY7YUI9TWF0aC5tYXgoYUQoYUcubWF4KSxhRChhRy5taW4pKX1pZihhRD09YUMpe2FHLnAy
Yz1mdW5jdGlvbihhSCl7cmV0dXJuKGFILWFCKSphRn19ZWxzZXthRy5wMmM9ZnVuY3Rpb24oYUgp
e3JldHVybihhRChhSCktYUIpKmFGfX1pZighYUUpe2FHLmMycD1mdW5jdGlvbihhSCl7cmV0dXJu
IGFCK2FIL2FGfX1lbHNle2FHLmMycD1mdW5jdGlvbihhSCl7cmV0dXJuIGFFKGFCK2FIL2FGKX19
fWZ1bmN0aW9uIEwoYUQpe3ZhciBhQj1hRC5vcHRpb25zLGFGLGFKPWFELnRpY2tzfHxbXSxhST1b
XSxhRSxhSz1hQi5sYWJlbFdpZHRoLGFHPWFCLmxhYmVsSGVpZ2h0LGFDO2Z1bmN0aW9uIGFIKGFN
LGFMKXtyZXR1cm4gYygnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDAwMHB4
OycrYUwrJ2ZvbnQtc2l6ZTpzbWFsbGVyIj48ZGl2IGNsYXNzPSInK2FELmRpcmVjdGlvbisiQXhp
cyAiK2FELmRpcmVjdGlvbithRC5uKydBeGlzIj4nK2FNLmpvaW4oIiIpKyI8L2Rpdj48L2Rpdj4i
KS5hcHBlbmRUbyhhdil9aWYoYUQuZGlyZWN0aW9uPT0ieCIpe2lmKGFLPT1udWxsKXthSz1NYXRo
LmZsb29yKEcvKGFKLmxlbmd0aD4wP2FKLmxlbmd0aDoxKSl9aWYoYUc9PW51bGwpe2FJPVtdO2Zv
cihhRj0wO2FGPGFKLmxlbmd0aDsrK2FGKXthRT1hSlthRl0ubGFiZWw7aWYoYUUpe2FJLnB1c2go
JzxkaXYgY2xhc3M9InRpY2tMYWJlbCIgc3R5bGU9ImZsb2F0OmxlZnQ7d2lkdGg6JythSysncHgi
PicrYUUrIjwvZGl2PiIpfX1pZihhSS5sZW5ndGg+MCl7YUkucHVzaCgnPGRpdiBzdHlsZT0iY2xl
YXI6bGVmdCI+PC9kaXY+Jyk7YUM9YUgoYUksIndpZHRoOjEwMDAwcHg7Iik7YUc9YUMuaGVpZ2h0
KCk7YUMucmVtb3ZlKCl9fX1lbHNle2lmKGFLPT1udWxsfHxhRz09bnVsbCl7Zm9yKGFGPTA7YUY8
YUoubGVuZ3RoOysrYUYpe2FFPWFKW2FGXS5sYWJlbDtpZihhRSl7YUkucHVzaCgnPGRpdiBjbGFz
cz0idGlja0xhYmVsIj4nK2FFKyI8L2Rpdj4iKX19aWYoYUkubGVuZ3RoPjApe2FDPWFIKGFJLCIi
KTtpZihhSz09bnVsbCl7YUs9YUMuY2hpbGRyZW4oKS53aWR0aCgpfWlmKGFHPT1udWxsKXthRz1h
Qy5maW5kKCJkaXYudGlja0xhYmVsIikuaGVpZ2h0KCl9YUMucmVtb3ZlKCl9fX1pZihhSz09bnVs
bCl7YUs9MH1pZihhRz09bnVsbCl7YUc9MH1hRC5sYWJlbFdpZHRoPWFLO2FELmxhYmVsSGVpZ2h0
PWFHfWZ1bmN0aW9uIGF1KGFEKXt2YXIgYUM9YUQubGFiZWxXaWR0aCxhTD1hRC5sYWJlbEhlaWdo
dCxhSD1hRC5vcHRpb25zLnBvc2l0aW9uLGFGPWFELm9wdGlvbnMudGlja0xlbmd0aCxhRz1PLmdy
aWQuYXhpc01hcmdpbixhSj1PLmdyaWQubGFiZWxNYXJnaW4sYUs9YUQuZGlyZWN0aW9uPT0ieCI/
cDphdyxhRTt2YXIgYUI9Yy5ncmVwKGFLLGZ1bmN0aW9uKGFOKXtyZXR1cm4gYU4mJmFOLm9wdGlv
bnMucG9zaXRpb249PWFIJiZhTi5yZXNlcnZlU3BhY2V9KTtpZihjLmluQXJyYXkoYUQsYUIpPT1h
Qi5sZW5ndGgtMSl7YUc9MH1pZihhRj09bnVsbCl7YUY9ImZ1bGwifXZhciBhST1jLmdyZXAoYUss
ZnVuY3Rpb24oYU4pe3JldHVybiBhTiYmYU4ucmVzZXJ2ZVNwYWNlfSk7dmFyIGFNPWMuaW5BcnJh
eShhRCxhSSk9PTA7aWYoIWFNJiZhRj09ImZ1bGwiKXthRj01fWlmKCFpc05hTigrYUYpKXthSis9
K2FGfWlmKGFELmRpcmVjdGlvbj09IngiKXthTCs9YUo7aWYoYUg9PSJib3R0b20iKXtxLmJvdHRv
bSs9YUwrYUc7YUQuYm94PXt0b3A6SS1xLmJvdHRvbSxoZWlnaHQ6YUx9fWVsc2V7YUQuYm94PXt0
b3A6cS50b3ArYUcsaGVpZ2h0OmFMfTtxLnRvcCs9YUwrYUd9fWVsc2V7YUMrPWFKO2lmKGFIPT0i
bGVmdCIpe2FELmJveD17bGVmdDpxLmxlZnQrYUcsd2lkdGg6YUN9O3EubGVmdCs9YUMrYUd9ZWxz
ZXtxLnJpZ2h0Kz1hQythRzthRC5ib3g9e2xlZnQ6Ry1xLnJpZ2h0LHdpZHRoOmFDfX19YUQucG9z
aXRpb249YUg7YUQudGlja0xlbmd0aD1hRjthRC5ib3gucGFkZGluZz1hSjthRC5pbm5lcm1vc3Q9
YU19ZnVuY3Rpb24gVShhQil7aWYoYUIuZGlyZWN0aW9uPT0ieCIpe2FCLmJveC5sZWZ0PXEubGVm
dDthQi5ib3gud2lkdGg9aH1lbHNle2FCLmJveC50b3A9cS50b3A7YUIuYm94LmhlaWdodD13fX1m
dW5jdGlvbiB0KCl7dmFyIGFDLGFFPW0oKTtjLmVhY2goYUUsZnVuY3Rpb24oYUYsYUcpe2FHLnNo
b3c9YUcub3B0aW9ucy5zaG93O2lmKGFHLnNob3c9PW51bGwpe2FHLnNob3c9YUcudXNlZH1hRy5y
ZXNlcnZlU3BhY2U9YUcuc2hvd3x8YUcub3B0aW9ucy5yZXNlcnZlU3BhY2U7bihhRyl9KTthbGxv
Y2F0ZWRBeGVzPWMuZ3JlcChhRSxmdW5jdGlvbihhRil7cmV0dXJuIGFGLnJlc2VydmVTcGFjZX0p
O3EubGVmdD1xLnJpZ2h0PXEudG9wPXEuYm90dG9tPTA7aWYoTy5ncmlkLnNob3cpe2MuZWFjaChh
bGxvY2F0ZWRBeGVzLGZ1bmN0aW9uKGFGLGFHKXtTKGFHKTtQKGFHKTthcChhRyxhRy50aWNrcyk7
TChhRyl9KTtmb3IoYUM9YWxsb2NhdGVkQXhlcy5sZW5ndGgtMTthQz49MDstLWFDKXthdShhbGxv
Y2F0ZWRBeGVzW2FDXSl9dmFyIGFEPU8uZ3JpZC5taW5Cb3JkZXJNYXJnaW47aWYoYUQ9PW51bGwp
e2FEPTA7Zm9yKGFDPTA7YUM8US5sZW5ndGg7KythQyl7YUQ9TWF0aC5tYXgoYUQsUVthQ10ucG9p
bnRzLnJhZGl1cytRW2FDXS5wb2ludHMubGluZVdpZHRoLzIpfX1mb3IodmFyIGFCIGluIHEpe3Fb
YUJdKz1PLmdyaWQuYm9yZGVyV2lkdGg7cVthQl09TWF0aC5tYXgoYUQscVthQl0pfX1oPUctcS5s
ZWZ0LXEucmlnaHQ7dz1JLXEuYm90dG9tLXEudG9wO2MuZWFjaChhRSxmdW5jdGlvbihhRixhRyl7
cihhRyl9KTtpZihPLmdyaWQuc2hvdyl7Yy5lYWNoKGFsbG9jYXRlZEF4ZXMsZnVuY3Rpb24oYUYs
YUcpe1UoYUcpfSk7aygpfW8oKX1mdW5jdGlvbiBuKGFFKXt2YXIgYUY9YUUub3B0aW9ucyxhRD0r
KGFGLm1pbiE9bnVsbD9hRi5taW46YUUuZGF0YW1pbiksYUI9KyhhRi5tYXghPW51bGw/YUYubWF4
OmFFLmRhdGFtYXgpLGFIPWFCLWFEO2lmKGFIPT0wKXt2YXIgYUM9YUI9PTA/MTowLjAxO2lmKGFG
Lm1pbj09bnVsbCl7YUQtPWFDfWlmKGFGLm1heD09bnVsbHx8YUYubWluIT1udWxsKXthQis9YUN9
fWVsc2V7dmFyIGFHPWFGLmF1dG9zY2FsZU1hcmdpbjtpZihhRyE9bnVsbCl7aWYoYUYubWluPT1u
dWxsKXthRC09YUgqYUc7aWYoYUQ8MCYmYUUuZGF0YW1pbiE9bnVsbCYmYUUuZGF0YW1pbj49MCl7
YUQ9MH19aWYoYUYubWF4PT1udWxsKXthQis9YUgqYUc7aWYoYUI+MCYmYUUuZGF0YW1heCE9bnVs
bCYmYUUuZGF0YW1heDw9MCl7YUI9MH19fX1hRS5taW49YUQ7YUUubWF4PWFCfWZ1bmN0aW9uIFMo
YUcpe3ZhciBhTT1hRy5vcHRpb25zO3ZhciBhSDtpZih0eXBlb2YgYU0udGlja3M9PSJudW1iZXIi
JiZhTS50aWNrcz4wKXthSD1hTS50aWNrc31lbHNle2FIPTAuMypNYXRoLnNxcnQoYUcuZGlyZWN0
aW9uPT0ieCI/RzpJKX12YXIgYVQ9KGFHLm1heC1hRy5taW4pL2FILGFPLGFCLGFOLGFSLGFTLGFR
LGFJO2lmKGFNLm1vZGU9PSJ0aW1lIil7dmFyIGFKPXtzZWNvbmQ6MTAwMCxtaW51dGU6NjAqMTAw
MCxob3VyOjYwKjYwKjEwMDAsZGF5OjI0KjYwKjYwKjEwMDAsbW9udGg6MzAqMjQqNjAqNjAqMTAw
MCx5ZWFyOjM2NS4yNDI1KjI0KjYwKjYwKjEwMDB9O3ZhciBhSz1bWzEsInNlY29uZCJdLFsyLCJz
ZWNvbmQiXSxbNSwic2Vjb25kIl0sWzEwLCJzZWNvbmQiXSxbMzAsInNlY29uZCJdLFsxLCJtaW51
dGUiXSxbMiwibWludXRlIl0sWzUsIm1pbnV0ZSJdLFsxMCwibWludXRlIl0sWzMwLCJtaW51dGUi
XSxbMSwiaG91ciJdLFsyLCJob3VyIl0sWzQsImhvdXIiXSxbOCwiaG91ciJdLFsxMiwiaG91ciJd
LFsxLCJkYXkiXSxbMiwiZGF5Il0sWzMsImRheSJdLFswLjI1LCJtb250aCJdLFswLjUsIm1vbnRo
Il0sWzEsIm1vbnRoIl0sWzIsIm1vbnRoIl0sWzMsIm1vbnRoIl0sWzYsIm1vbnRoIl0sWzEsInll
YXIiXV07dmFyIGFDPTA7aWYoYU0ubWluVGlja1NpemUhPW51bGwpe2lmKHR5cGVvZiBhTS50aWNr
U2l6ZT09Im51bWJlciIpe2FDPWFNLnRpY2tTaXplfWVsc2V7YUM9YU0ubWluVGlja1NpemVbMF0q
YUpbYU0ubWluVGlja1NpemVbMV1dfX1mb3IodmFyIGFTPTA7YVM8YUsubGVuZ3RoLTE7KythUyl7
aWYoYVQ8KGFLW2FTXVswXSphSlthS1thU11bMV1dK2FLW2FTKzFdWzBdKmFKW2FLW2FTKzFdWzFd
XSkvMiYmYUtbYVNdWzBdKmFKW2FLW2FTXVsxXV0+PWFDKXticmVha319YU89YUtbYVNdWzBdO2FO
PWFLW2FTXVsxXTtpZihhTj09InllYXIiKXthUT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgu
bG9nKGFUL2FKLnllYXIpL01hdGguTE4xMCkpO2FJPShhVC9hSi55ZWFyKS9hUTtpZihhSTwxLjUp
e2FPPTF9ZWxzZXtpZihhSTwzKXthTz0yfWVsc2V7aWYoYUk8Ny41KXthTz01fWVsc2V7YU89MTB9
fX1hTyo9YVF9YUcudGlja1NpemU9YU0udGlja1NpemV8fFthTyxhTl07YUI9ZnVuY3Rpb24oYVgp
e3ZhciBhMj1bXSxhMD1hWC50aWNrU2l6ZVswXSxhMz1hWC50aWNrU2l6ZVsxXSxhMT1uZXcgRGF0
ZShhWC5taW4pO3ZhciBhVz1hMCphSlthM107aWYoYTM9PSJzZWNvbmQiKXthMS5zZXRVVENTZWNv
bmRzKGEoYTEuZ2V0VVRDU2Vjb25kcygpLGEwKSl9aWYoYTM9PSJtaW51dGUiKXthMS5zZXRVVENN
aW51dGVzKGEoYTEuZ2V0VVRDTWludXRlcygpLGEwKSl9aWYoYTM9PSJob3VyIil7YTEuc2V0VVRD
SG91cnMoYShhMS5nZXRVVENIb3VycygpLGEwKSl9aWYoYTM9PSJtb250aCIpe2ExLnNldFVUQ01v
bnRoKGEoYTEuZ2V0VVRDTW9udGgoKSxhMCkpfWlmKGEzPT0ieWVhciIpe2ExLnNldFVUQ0Z1bGxZ
ZWFyKGEoYTEuZ2V0VVRDRnVsbFllYXIoKSxhMCkpfWExLnNldFVUQ01pbGxpc2Vjb25kcygwKTtp
ZihhVz49YUoubWludXRlKXthMS5zZXRVVENTZWNvbmRzKDApfWlmKGFXPj1hSi5ob3VyKXthMS5z
ZXRVVENNaW51dGVzKDApfWlmKGFXPj1hSi5kYXkpe2ExLnNldFVUQ0hvdXJzKDApfWlmKGFXPj1h
Si5kYXkqNCl7YTEuc2V0VVRDRGF0ZSgxKX1pZihhVz49YUoueWVhcil7YTEuc2V0VVRDTW9udGgo
MCl9dmFyIGE1PTAsYTQ9TnVtYmVyLk5hTixhWTtkb3thWT1hNDthND1hMS5nZXRUaW1lKCk7YTIu
cHVzaChhNCk7aWYoYTM9PSJtb250aCIpe2lmKGEwPDEpe2ExLnNldFVUQ0RhdGUoMSk7dmFyIGFW
PWExLmdldFRpbWUoKTthMS5zZXRVVENNb250aChhMS5nZXRVVENNb250aCgpKzEpO3ZhciBhWj1h
MS5nZXRUaW1lKCk7YTEuc2V0VGltZShhNCthNSphSi5ob3VyKyhhWi1hVikqYTApO2E1PWExLmdl
dFVUQ0hvdXJzKCk7YTEuc2V0VVRDSG91cnMoMCl9ZWxzZXthMS5zZXRVVENNb250aChhMS5nZXRV
VENNb250aCgpK2EwKX19ZWxzZXtpZihhMz09InllYXIiKXthMS5zZXRVVENGdWxsWWVhcihhMS5n
ZXRVVENGdWxsWWVhcigpK2EwKX1lbHNle2ExLnNldFRpbWUoYTQrYVcpfX19d2hpbGUoYTQ8YVgu
bWF4JiZhNCE9YVkpO3JldHVybiBhMn07YVI9ZnVuY3Rpb24oYVYsYVkpe3ZhciBhMD1uZXcgRGF0
ZShhVik7aWYoYU0udGltZWZvcm1hdCE9bnVsbCl7cmV0dXJuIGMucGxvdC5mb3JtYXREYXRlKGEw
LGFNLnRpbWVmb3JtYXQsYU0ubW9udGhOYW1lcyl9dmFyIGFXPWFZLnRpY2tTaXplWzBdKmFKW2FZ
LnRpY2tTaXplWzFdXTt2YXIgYVg9YVkubWF4LWFZLm1pbjt2YXIgYVo9KGFNLnR3ZWx2ZUhvdXJD
bG9jayk/IiAlcCI6IiI7aWYoYVc8YUoubWludXRlKXtmbXQ9IiVoOiVNOiVTIithWn1lbHNle2lm
KGFXPGFKLmRheSl7aWYoYVg8MiphSi5kYXkpe2ZtdD0iJWg6JU0iK2FafWVsc2V7Zm10PSIlYiAl
ZCAlaDolTSIrYVp9fWVsc2V7aWYoYVc8YUoubW9udGgpe2ZtdD0iJWIgJWQifWVsc2V7aWYoYVc8
YUoueWVhcil7aWYoYVg8YUoueWVhcil7Zm10PSIlYiJ9ZWxzZXtmbXQ9IiViICV5In19ZWxzZXtm
bXQ9IiV5In19fX1yZXR1cm4gYy5wbG90LmZvcm1hdERhdGUoYTAsZm10LGFNLm1vbnRoTmFtZXMp
fX1lbHNle3ZhciBhVT1hTS50aWNrRGVjaW1hbHM7dmFyIGFQPS1NYXRoLmZsb29yKE1hdGgubG9n
KGFUKS9NYXRoLkxOMTApO2lmKGFVIT1udWxsJiZhUD5hVSl7YVA9YVV9YVE9TWF0aC5wb3coMTAs
LWFQKTthST1hVC9hUTtpZihhSTwxLjUpe2FPPTF9ZWxzZXtpZihhSTwzKXthTz0yO2lmKGFJPjIu
MjUmJihhVT09bnVsbHx8YVArMTw9YVUpKXthTz0yLjU7KythUH19ZWxzZXtpZihhSTw3LjUpe2FP
PTV9ZWxzZXthTz0xMH19fWFPKj1hUTtpZihhTS5taW5UaWNrU2l6ZSE9bnVsbCYmYU88YU0ubWlu
VGlja1NpemUpe2FPPWFNLm1pblRpY2tTaXplfWFHLnRpY2tEZWNpbWFscz1NYXRoLm1heCgwLGFV
IT1udWxsP2FVOmFQKTthRy50aWNrU2l6ZT1hTS50aWNrU2l6ZXx8YU87YUI9ZnVuY3Rpb24oYVgp
e3ZhciBhWj1bXTt2YXIgYTA9YShhWC5taW4sYVgudGlja1NpemUpLGFXPTAsYVY9TnVtYmVyLk5h
TixhWTtkb3thWT1hVjthVj1hMCthVyphWC50aWNrU2l6ZTthWi5wdXNoKGFWKTsrK2FXfXdoaWxl
KGFWPGFYLm1heCYmYVYhPWFZKTtyZXR1cm4gYVp9O2FSPWZ1bmN0aW9uKGFWLGFXKXtyZXR1cm4g
YVYudG9GaXhlZChhVy50aWNrRGVjaW1hbHMpfX1pZihhTS5hbGlnblRpY2tzV2l0aEF4aXMhPW51
bGwpe3ZhciBhRj0oYUcuZGlyZWN0aW9uPT0ieCI/cDphdylbYU0uYWxpZ25UaWNrc1dpdGhBeGlz
LTFdO2lmKGFGJiZhRi51c2VkJiZhRiE9YUcpe3ZhciBhTD1hQihhRyk7aWYoYUwubGVuZ3RoPjAp
e2lmKGFNLm1pbj09bnVsbCl7YUcubWluPU1hdGgubWluKGFHLm1pbixhTFswXSl9aWYoYU0ubWF4
PT1udWxsJiZhTC5sZW5ndGg+MSl7YUcubWF4PU1hdGgubWF4KGFHLm1heCxhTFthTC5sZW5ndGgt
MV0pfX1hQj1mdW5jdGlvbihhWCl7dmFyIGFZPVtdLGFWLGFXO2ZvcihhVz0wO2FXPGFGLnRpY2tz
Lmxlbmd0aDsrK2FXKXthVj0oYUYudGlja3NbYVddLnYtYUYubWluKS8oYUYubWF4LWFGLm1pbik7
YVY9YVgubWluK2FWKihhWC5tYXgtYVgubWluKTthWS5wdXNoKGFWKX1yZXR1cm4gYVl9O2lmKGFH
Lm1vZGUhPSJ0aW1lIiYmYU0udGlja0RlY2ltYWxzPT1udWxsKXt2YXIgYUU9TWF0aC5tYXgoMCwt
TWF0aC5mbG9vcihNYXRoLmxvZyhhVCkvTWF0aC5MTjEwKSsxKSxhRD1hQihhRyk7aWYoIShhRC5s
ZW5ndGg+MSYmL1wuLiowJC8udGVzdCgoYURbMV0tYURbMF0pLnRvRml4ZWQoYUUpKSkpe2FHLnRp
Y2tEZWNpbWFscz1hRX19fX1hRy50aWNrR2VuZXJhdG9yPWFCO2lmKGMuaXNGdW5jdGlvbihhTS50
aWNrRm9ybWF0dGVyKSl7YUcudGlja0Zvcm1hdHRlcj1mdW5jdGlvbihhVixhVyl7cmV0dXJuIiIr
YU0udGlja0Zvcm1hdHRlcihhVixhVyl9fWVsc2V7YUcudGlja0Zvcm1hdHRlcj1hUn19ZnVuY3Rp
b24gUChhRil7dmFyIGFIPWFGLm9wdGlvbnMudGlja3MsYUc9W107aWYoYUg9PW51bGx8fCh0eXBl
b2YgYUg9PSJudW1iZXIiJiZhSD4wKSl7YUc9YUYudGlja0dlbmVyYXRvcihhRil9ZWxzZXtpZihh
SCl7aWYoYy5pc0Z1bmN0aW9uKGFIKSl7YUc9YUgoe21pbjphRi5taW4sbWF4OmFGLm1heH0pfWVs
c2V7YUc9YUh9fX12YXIgYUUsYUI7YUYudGlja3M9W107Zm9yKGFFPTA7YUU8YUcubGVuZ3RoOysr
YUUpe3ZhciBhQz1udWxsO3ZhciBhRD1hR1thRV07aWYodHlwZW9mIGFEPT0ib2JqZWN0Iil7YUI9
K2FEWzBdO2lmKGFELmxlbmd0aD4xKXthQz1hRFsxXX19ZWxzZXthQj0rYUR9aWYoYUM9PW51bGwp
e2FDPWFGLnRpY2tGb3JtYXR0ZXIoYUIsYUYpfWlmKCFpc05hTihhQikpe2FGLnRpY2tzLnB1c2go
e3Y6YUIsbGFiZWw6YUN9KX19fWZ1bmN0aW9uIGFwKGFCLGFDKXtpZihhQi5vcHRpb25zLmF1dG9z
Y2FsZU1hcmdpbiYmYUMubGVuZ3RoPjApe2lmKGFCLm9wdGlvbnMubWluPT1udWxsKXthQi5taW49
TWF0aC5taW4oYUIubWluLGFDWzBdLnYpfWlmKGFCLm9wdGlvbnMubWF4PT1udWxsJiZhQy5sZW5n
dGg+MSl7YUIubWF4PU1hdGgubWF4KGFCLm1heCxhQ1thQy5sZW5ndGgtMV0udil9fX1mdW5jdGlv
biBXKCl7SC5jbGVhclJlY3QoMCwwLEcsSSk7dmFyIGFDPU8uZ3JpZDtpZihhQy5zaG93JiZhQy5i
YWNrZ3JvdW5kQ29sb3Ipe04oKX1pZihhQy5zaG93JiYhYUMuYWJvdmVEYXRhKXthYygpfWZvcih2
YXIgYUI9MDthQjxRLmxlbmd0aDsrK2FCKXthbihhay5kcmF3U2VyaWVzLFtILFFbYUJdXSk7ZChR
W2FCXSl9YW4oYWsuZHJhdyxbSF0pO2lmKGFDLnNob3cmJmFDLmFib3ZlRGF0YSl7YWMoKX19ZnVu
Y3Rpb24gRChhQixhSSl7dmFyIGFFLGFILGFHLGFELGFGPW0oKTtmb3IoaT0wO2k8YUYubGVuZ3Ro
OysraSl7YUU9YUZbaV07aWYoYUUuZGlyZWN0aW9uPT1hSSl7YUQ9YUkrYUUubisiYXhpcyI7aWYo
IWFCW2FEXSYmYUUubj09MSl7YUQ9YUkrImF4aXMifWlmKGFCW2FEXSl7YUg9YUJbYURdLmZyb207
YUc9YUJbYURdLnRvO2JyZWFrfX19aWYoIWFCW2FEXSl7YUU9YUk9PSJ4Ij9wWzBdOmF3WzBdO2FI
PWFCW2FJKyIxIl07YUc9YUJbYUkrIjIiXX1pZihhSCE9bnVsbCYmYUchPW51bGwmJmFIPmFHKXt2
YXIgYUM9YUg7YUg9YUc7YUc9YUN9cmV0dXJue2Zyb206YUgsdG86YUcsYXhpczphRX19ZnVuY3Rp
b24gTigpe0guc2F2ZSgpO0gudHJhbnNsYXRlKHEubGVmdCxxLnRvcCk7SC5maWxsU3R5bGU9YW0o
Ty5ncmlkLmJhY2tncm91bmRDb2xvcix3LDAsInJnYmEoMjU1LCAyNTUsIDI1NSwgMCkiKTtILmZp
bGxSZWN0KDAsMCxoLHcpO0gucmVzdG9yZSgpfWZ1bmN0aW9uIGFjKCl7dmFyIGFGO0guc2F2ZSgp
O0gudHJhbnNsYXRlKHEubGVmdCxxLnRvcCk7dmFyIGFIPU8uZ3JpZC5tYXJraW5ncztpZihhSCl7
aWYoYy5pc0Z1bmN0aW9uKGFIKSl7dmFyIGFLPWFxLmdldEF4ZXMoKTthSy54bWluPWFLLnhheGlz
Lm1pbjthSy54bWF4PWFLLnhheGlzLm1heDthSy55bWluPWFLLnlheGlzLm1pbjthSy55bWF4PWFL
LnlheGlzLm1heDthSD1hSChhSyl9Zm9yKGFGPTA7YUY8YUgubGVuZ3RoOysrYUYpe3ZhciBhRD1h
SFthRl0sYUM9RChhRCwieCIpLGFJPUQoYUQsInkiKTtpZihhQy5mcm9tPT1udWxsKXthQy5mcm9t
PWFDLmF4aXMubWlufWlmKGFDLnRvPT1udWxsKXthQy50bz1hQy5heGlzLm1heH1pZihhSS5mcm9t
PT1udWxsKXthSS5mcm9tPWFJLmF4aXMubWlufWlmKGFJLnRvPT1udWxsKXthSS50bz1hSS5heGlz
Lm1heH1pZihhQy50bzxhQy5heGlzLm1pbnx8YUMuZnJvbT5hQy5heGlzLm1heHx8YUkudG88YUku
YXhpcy5taW58fGFJLmZyb20+YUkuYXhpcy5tYXgpe2NvbnRpbnVlfWFDLmZyb209TWF0aC5tYXgo
YUMuZnJvbSxhQy5heGlzLm1pbik7YUMudG89TWF0aC5taW4oYUMudG8sYUMuYXhpcy5tYXgpO2FJ
LmZyb209TWF0aC5tYXgoYUkuZnJvbSxhSS5heGlzLm1pbik7YUkudG89TWF0aC5taW4oYUkudG8s
YUkuYXhpcy5tYXgpO2lmKGFDLmZyb209PWFDLnRvJiZhSS5mcm9tPT1hSS50byl7Y29udGludWV9
YUMuZnJvbT1hQy5heGlzLnAyYyhhQy5mcm9tKTthQy50bz1hQy5heGlzLnAyYyhhQy50byk7YUku
ZnJvbT1hSS5heGlzLnAyYyhhSS5mcm9tKTthSS50bz1hSS5heGlzLnAyYyhhSS50byk7aWYoYUMu
ZnJvbT09YUMudG98fGFJLmZyb209PWFJLnRvKXtILmJlZ2luUGF0aCgpO0guc3Ryb2tlU3R5bGU9
YUQuY29sb3J8fE8uZ3JpZC5tYXJraW5nc0NvbG9yO0gubGluZVdpZHRoPWFELmxpbmVXaWR0aHx8
Ty5ncmlkLm1hcmtpbmdzTGluZVdpZHRoO0gubW92ZVRvKGFDLmZyb20sYUkuZnJvbSk7SC5saW5l
VG8oYUMudG8sYUkudG8pO0guc3Ryb2tlKCl9ZWxzZXtILmZpbGxTdHlsZT1hRC5jb2xvcnx8Ty5n
cmlkLm1hcmtpbmdzQ29sb3I7SC5maWxsUmVjdChhQy5mcm9tLGFJLnRvLGFDLnRvLWFDLmZyb20s
YUkuZnJvbS1hSS50byl9fX12YXIgYUs9bSgpLGFNPU8uZ3JpZC5ib3JkZXJXaWR0aDtmb3IodmFy
IGFFPTA7YUU8YUsubGVuZ3RoOysrYUUpe3ZhciBhQj1hS1thRV0sYUc9YUIuYm94LGFRPWFCLnRp
Y2tMZW5ndGgsYU4sYUwsYVAsYUo7aWYoIWFCLnNob3d8fGFCLnRpY2tzLmxlbmd0aD09MCl7Y29u
dGludWV9SC5zdHJva2VTdHlsZT1hQi5vcHRpb25zLnRpY2tDb2xvcnx8Yy5jb2xvci5wYXJzZShh
Qi5vcHRpb25zLmNvbG9yKS5zY2FsZSgiYSIsMC4yMikudG9TdHJpbmcoKTtILmxpbmVXaWR0aD0x
O2lmKGFCLmRpcmVjdGlvbj09IngiKXthTj0wO2lmKGFRPT0iZnVsbCIpe2FMPShhQi5wb3NpdGlv
bj09InRvcCI/MDp3KX1lbHNle2FMPWFHLnRvcC1xLnRvcCsoYUIucG9zaXRpb249PSJ0b3AiP2FH
LmhlaWdodDowKX19ZWxzZXthTD0wO2lmKGFRPT0iZnVsbCIpe2FOPShhQi5wb3NpdGlvbj09Imxl
ZnQiPzA6aCl9ZWxzZXthTj1hRy5sZWZ0LXEubGVmdCsoYUIucG9zaXRpb249PSJsZWZ0Ij9hRy53
aWR0aDowKX19aWYoIWFCLmlubmVybW9zdCl7SC5iZWdpblBhdGgoKTthUD1hSj0wO2lmKGFCLmRp
cmVjdGlvbj09IngiKXthUD1ofWVsc2V7YUo9d31pZihILmxpbmVXaWR0aD09MSl7YU49TWF0aC5m
bG9vcihhTikrMC41O2FMPU1hdGguZmxvb3IoYUwpKzAuNX1ILm1vdmVUbyhhTixhTCk7SC5saW5l
VG8oYU4rYVAsYUwrYUopO0guc3Ryb2tlKCl9SC5iZWdpblBhdGgoKTtmb3IoYUY9MDthRjxhQi50
aWNrcy5sZW5ndGg7KythRil7dmFyIGFPPWFCLnRpY2tzW2FGXS52O2FQPWFKPTA7aWYoYU88YUIu
bWlufHxhTz5hQi5tYXh8fChhUT09ImZ1bGwiJiZhTT4wJiYoYU89PWFCLm1pbnx8YU89PWFCLm1h
eCkpKXtjb250aW51ZX1pZihhQi5kaXJlY3Rpb249PSJ4Iil7YU49YUIucDJjKGFPKTthSj1hUT09
ImZ1bGwiPy13OmFRO2lmKGFCLnBvc2l0aW9uPT0idG9wIil7YUo9LWFKfX1lbHNle2FMPWFCLnAy
YyhhTyk7YVA9YVE9PSJmdWxsIj8taDphUTtpZihhQi5wb3NpdGlvbj09ImxlZnQiKXthUD0tYVB9
fWlmKEgubGluZVdpZHRoPT0xKXtpZihhQi5kaXJlY3Rpb249PSJ4Iil7YU49TWF0aC5mbG9vcihh
TikrMC41fWVsc2V7YUw9TWF0aC5mbG9vcihhTCkrMC41fX1ILm1vdmVUbyhhTixhTCk7SC5saW5l
VG8oYU4rYVAsYUwrYUopfUguc3Ryb2tlKCl9aWYoYU0pe0gubGluZVdpZHRoPWFNO0guc3Ryb2tl
U3R5bGU9Ty5ncmlkLmJvcmRlckNvbG9yO0guc3Ryb2tlUmVjdCgtYU0vMiwtYU0vMixoK2FNLHcr
YU0pfUgucmVzdG9yZSgpfWZ1bmN0aW9uIGsoKXthdi5maW5kKCIudGlja0xhYmVscyIpLnJlbW92
ZSgpO3ZhciBhRz1bJzxkaXYgY2xhc3M9InRpY2tMYWJlbHMiIHN0eWxlPSJmb250LXNpemU6c21h
bGxlciI+J107dmFyIGFKPW0oKTtmb3IodmFyIGFEPTA7YUQ8YUoubGVuZ3RoOysrYUQpe3ZhciBh
Qz1hSlthRF0sYUY9YUMuYm94O2lmKCFhQy5zaG93KXtjb250aW51ZX1hRy5wdXNoKCc8ZGl2IGNs
YXNzPSInK2FDLmRpcmVjdGlvbisiQXhpcyAiK2FDLmRpcmVjdGlvbithQy5uKydBeGlzIiBzdHls
ZT0iY29sb3I6JythQy5vcHRpb25zLmNvbG9yKyciPicpO2Zvcih2YXIgYUU9MDthRTxhQy50aWNr
cy5sZW5ndGg7KythRSl7dmFyIGFIPWFDLnRpY2tzW2FFXTtpZighYUgubGFiZWx8fGFILnY8YUMu
bWlufHxhSC52PmFDLm1heCl7Y29udGludWV9dmFyIGFLPXt9LGFJO2lmKGFDLmRpcmVjdGlvbj09
IngiKXthST0iY2VudGVyIjthSy5sZWZ0PU1hdGgucm91bmQocS5sZWZ0K2FDLnAyYyhhSC52KS1h
Qy5sYWJlbFdpZHRoLzIpO2lmKGFDLnBvc2l0aW9uPT0iYm90dG9tIil7YUsudG9wPWFGLnRvcCth
Ri5wYWRkaW5nfWVsc2V7YUsuYm90dG9tPUktKGFGLnRvcCthRi5oZWlnaHQtYUYucGFkZGluZyl9
fWVsc2V7YUsudG9wPU1hdGgucm91bmQocS50b3ArYUMucDJjKGFILnYpLWFDLmxhYmVsSGVpZ2h0
LzIpO2lmKGFDLnBvc2l0aW9uPT0ibGVmdCIpe2FLLnJpZ2h0PUctKGFGLmxlZnQrYUYud2lkdGgt
YUYucGFkZGluZyk7YUk9InJpZ2h0In1lbHNle2FLLmxlZnQ9YUYubGVmdCthRi5wYWRkaW5nO2FJ
PSJsZWZ0In19YUsud2lkdGg9YUMubGFiZWxXaWR0aDt2YXIgYUI9WyJwb3NpdGlvbjphYnNvbHV0
ZSIsInRleHQtYWxpZ246IithSV07Zm9yKHZhciBhTCBpbiBhSyl7YUIucHVzaChhTCsiOiIrYUtb
YUxdKyJweCIpfWFHLnB1c2goJzxkaXYgY2xhc3M9InRpY2tMYWJlbCIgc3R5bGU9IicrYUIuam9p
bigiOyIpKyciPicrYUgubGFiZWwrIjwvZGl2PiIpfWFHLnB1c2goIjwvZGl2PiIpfWFHLnB1c2go
IjwvZGl2PiIpO2F2LmFwcGVuZChhRy5qb2luKCIiKSl9ZnVuY3Rpb24gZChhQil7aWYoYUIubGlu
ZXMuc2hvdyl7YXQoYUIpfWlmKGFCLmJhcnMuc2hvdyl7ZShhQil9aWYoYUIucG9pbnRzLnNob3cp
e2FvKGFCKX19ZnVuY3Rpb24gYXQoYUUpe2Z1bmN0aW9uIGFEKGFQLGFRLGFJLGFVLGFUKXt2YXIg
YVY9YVAucG9pbnRzLGFKPWFQLnBvaW50c2l6ZSxhTj1udWxsLGFNPW51bGw7SC5iZWdpblBhdGgo
KTtmb3IodmFyIGFPPWFKO2FPPGFWLmxlbmd0aDthTys9YUope3ZhciBhTD1hVlthTy1hSl0sYVM9
YVZbYU8tYUorMV0sYUs9YVZbYU9dLGFSPWFWW2FPKzFdO2lmKGFMPT1udWxsfHxhSz09bnVsbCl7
Y29udGludWV9aWYoYVM8PWFSJiZhUzxhVC5taW4pe2lmKGFSPGFULm1pbil7Y29udGludWV9YUw9
KGFULm1pbi1hUykvKGFSLWFTKSooYUstYUwpK2FMO2FTPWFULm1pbn1lbHNle2lmKGFSPD1hUyYm
YVI8YVQubWluKXtpZihhUzxhVC5taW4pe2NvbnRpbnVlfWFLPShhVC5taW4tYVMpLyhhUi1hUykq
KGFLLWFMKSthTDthUj1hVC5taW59fWlmKGFTPj1hUiYmYVM+YVQubWF4KXtpZihhUj5hVC5tYXgp
e2NvbnRpbnVlfWFMPShhVC5tYXgtYVMpLyhhUi1hUykqKGFLLWFMKSthTDthUz1hVC5tYXh9ZWxz
ZXtpZihhUj49YVMmJmFSPmFULm1heCl7aWYoYVM+YVQubWF4KXtjb250aW51ZX1hSz0oYVQubWF4
LWFTKS8oYVItYVMpKihhSy1hTCkrYUw7YVI9YVQubWF4fX1pZihhTDw9YUsmJmFMPGFVLm1pbil7
aWYoYUs8YVUubWluKXtjb250aW51ZX1hUz0oYVUubWluLWFMKS8oYUstYUwpKihhUi1hUykrYVM7
YUw9YVUubWlufWVsc2V7aWYoYUs8PWFMJiZhSzxhVS5taW4pe2lmKGFMPGFVLm1pbil7Y29udGlu
dWV9YVI9KGFVLm1pbi1hTCkvKGFLLWFMKSooYVItYVMpK2FTO2FLPWFVLm1pbn19aWYoYUw+PWFL
JiZhTD5hVS5tYXgpe2lmKGFLPmFVLm1heCl7Y29udGludWV9YVM9KGFVLm1heC1hTCkvKGFLLWFM
KSooYVItYVMpK2FTO2FMPWFVLm1heH1lbHNle2lmKGFLPj1hTCYmYUs+YVUubWF4KXtpZihhTD5h
VS5tYXgpe2NvbnRpbnVlfWFSPShhVS5tYXgtYUwpLyhhSy1hTCkqKGFSLWFTKSthUzthSz1hVS5t
YXh9fWlmKGFMIT1hTnx8YVMhPWFNKXtILm1vdmVUbyhhVS5wMmMoYUwpK2FRLGFULnAyYyhhUykr
YUkpfWFOPWFLO2FNPWFSO0gubGluZVRvKGFVLnAyYyhhSykrYVEsYVQucDJjKGFSKSthSSl9SC5z
dHJva2UoKX1mdW5jdGlvbiBhRihhSSxhUSxhUCl7dmFyIGFXPWFJLnBvaW50cyxhVj1hSS5wb2lu
dHNpemUsYU49TWF0aC5taW4oTWF0aC5tYXgoMCxhUC5taW4pLGFQLm1heCksYVg9MCxhVSxhVD1m
YWxzZSxhTT0xLGFMPTAsYVI9MDt3aGlsZSh0cnVlKXtpZihhVj4wJiZhWD5hVy5sZW5ndGgrYVYp
e2JyZWFrfWFYKz1hVjt2YXIgYVo9YVdbYVgtYVZdLGFLPWFXW2FYLWFWK2FNXSxhWT1hV1thWF0s
YUo9YVdbYVgrYU1dO2lmKGFUKXtpZihhVj4wJiZhWiE9bnVsbCYmYVk9PW51bGwpe2FSPWFYO2FW
PS1hVjthTT0yO2NvbnRpbnVlfWlmKGFWPDAmJmFYPT1hTCthVil7SC5maWxsKCk7YVQ9ZmFsc2U7
YVY9LWFWO2FNPTE7YVg9YUw9YVIrYVY7Y29udGludWV9fWlmKGFaPT1udWxsfHxhWT09bnVsbCl7
Y29udGludWV9aWYoYVo8PWFZJiZhWjxhUS5taW4pe2lmKGFZPGFRLm1pbil7Y29udGludWV9YUs9
KGFRLm1pbi1hWikvKGFZLWFaKSooYUotYUspK2FLO2FaPWFRLm1pbn1lbHNle2lmKGFZPD1hWiYm
YVk8YVEubWluKXtpZihhWjxhUS5taW4pe2NvbnRpbnVlfWFKPShhUS5taW4tYVopLyhhWS1hWikq
KGFKLWFLKSthSzthWT1hUS5taW59fWlmKGFaPj1hWSYmYVo+YVEubWF4KXtpZihhWT5hUS5tYXgp
e2NvbnRpbnVlfWFLPShhUS5tYXgtYVopLyhhWS1hWikqKGFKLWFLKSthSzthWj1hUS5tYXh9ZWxz
ZXtpZihhWT49YVomJmFZPmFRLm1heCl7aWYoYVo+YVEubWF4KXtjb250aW51ZX1hSj0oYVEubWF4
LWFaKS8oYVktYVopKihhSi1hSykrYUs7YVk9YVEubWF4fX1pZighYVQpe0guYmVnaW5QYXRoKCk7
SC5tb3ZlVG8oYVEucDJjKGFaKSxhUC5wMmMoYU4pKTthVD10cnVlfWlmKGFLPj1hUC5tYXgmJmFK
Pj1hUC5tYXgpe0gubGluZVRvKGFRLnAyYyhhWiksYVAucDJjKGFQLm1heCkpO0gubGluZVRvKGFR
LnAyYyhhWSksYVAucDJjKGFQLm1heCkpO2NvbnRpbnVlfWVsc2V7aWYoYUs8PWFQLm1pbiYmYUo8
PWFQLm1pbil7SC5saW5lVG8oYVEucDJjKGFaKSxhUC5wMmMoYVAubWluKSk7SC5saW5lVG8oYVEu
cDJjKGFZKSxhUC5wMmMoYVAubWluKSk7Y29udGludWV9fXZhciBhTz1hWixhUz1hWTtpZihhSzw9
YUomJmFLPGFQLm1pbiYmYUo+PWFQLm1pbil7YVo9KGFQLm1pbi1hSykvKGFKLWFLKSooYVktYVop
K2FaO2FLPWFQLm1pbn1lbHNle2lmKGFKPD1hSyYmYUo8YVAubWluJiZhSz49YVAubWluKXthWT0o
YVAubWluLWFLKS8oYUotYUspKihhWS1hWikrYVo7YUo9YVAubWlufX1pZihhSz49YUomJmFLPmFQ
Lm1heCYmYUo8PWFQLm1heCl7YVo9KGFQLm1heC1hSykvKGFKLWFLKSooYVktYVopK2FaO2FLPWFQ
Lm1heH1lbHNle2lmKGFKPj1hSyYmYUo+YVAubWF4JiZhSzw9YVAubWF4KXthWT0oYVAubWF4LWFL
KS8oYUotYUspKihhWS1hWikrYVo7YUo9YVAubWF4fX1pZihhWiE9YU8pe0gubGluZVRvKGFRLnAy
YyhhTyksYVAucDJjKGFLKSl9SC5saW5lVG8oYVEucDJjKGFaKSxhUC5wMmMoYUspKTtILmxpbmVU
byhhUS5wMmMoYVkpLGFQLnAyYyhhSikpO2lmKGFZIT1hUyl7SC5saW5lVG8oYVEucDJjKGFZKSxh
UC5wMmMoYUopKTtILmxpbmVUbyhhUS5wMmMoYVMpLGFQLnAyYyhhSikpfX19SC5zYXZlKCk7SC50
cmFuc2xhdGUocS5sZWZ0LHEudG9wKTtILmxpbmVKb2luPSJyb3VuZCI7dmFyIGFHPWFFLmxpbmVz
LmxpbmVXaWR0aCxhQj1hRS5zaGFkb3dTaXplO2lmKGFHPjAmJmFCPjApe0gubGluZVdpZHRoPWFC
O0guc3Ryb2tlU3R5bGU9InJnYmEoMCwwLDAsMC4xKSI7dmFyIGFIPU1hdGguUEkvMTg7YUQoYUUu
ZGF0YXBvaW50cyxNYXRoLnNpbihhSCkqKGFHLzIrYUIvMiksTWF0aC5jb3MoYUgpKihhRy8yK2FC
LzIpLGFFLnhheGlzLGFFLnlheGlzKTtILmxpbmVXaWR0aD1hQi8yO2FEKGFFLmRhdGFwb2ludHMs
TWF0aC5zaW4oYUgpKihhRy8yK2FCLzQpLE1hdGguY29zKGFIKSooYUcvMithQi80KSxhRS54YXhp
cyxhRS55YXhpcyl9SC5saW5lV2lkdGg9YUc7SC5zdHJva2VTdHlsZT1hRS5jb2xvcjt2YXIgYUM9
YWUoYUUubGluZXMsYUUuY29sb3IsMCx3KTtpZihhQyl7SC5maWxsU3R5bGU9YUM7YUYoYUUuZGF0
YXBvaW50cyxhRS54YXhpcyxhRS55YXhpcyl9aWYoYUc+MCl7YUQoYUUuZGF0YXBvaW50cywwLDAs
YUUueGF4aXMsYUUueWF4aXMpfUgucmVzdG9yZSgpfWZ1bmN0aW9uIGFvKGFFKXtmdW5jdGlvbiBh
SChhTixhTSxhVSxhSyxhUyxhVCxhUSxhSil7dmFyIGFSPWFOLnBvaW50cyxhST1hTi5wb2ludHNp
emU7Zm9yKHZhciBhTD0wO2FMPGFSLmxlbmd0aDthTCs9YUkpe3ZhciBhUD1hUlthTF0sYU89YVJb
YUwrMV07aWYoYVA9PW51bGx8fGFQPGFULm1pbnx8YVA+YVQubWF4fHxhTzxhUS5taW58fGFPPmFR
Lm1heCl7Y29udGludWV9SC5iZWdpblBhdGgoKTthUD1hVC5wMmMoYVApO2FPPWFRLnAyYyhhTykr
YUs7aWYoYUo9PSJjaXJjbGUiKXtILmFyYyhhUCxhTyxhTSwwLGFTP01hdGguUEk6TWF0aC5QSSoy
LGZhbHNlKX1lbHNle2FKKEgsYVAsYU8sYU0sYVMpfUguY2xvc2VQYXRoKCk7aWYoYVUpe0guZmls
bFN0eWxlPWFVO0guZmlsbCgpfUguc3Ryb2tlKCl9fUguc2F2ZSgpO0gudHJhbnNsYXRlKHEubGVm
dCxxLnRvcCk7dmFyIGFHPWFFLnBvaW50cy5saW5lV2lkdGgsYUM9YUUuc2hhZG93U2l6ZSxhQj1h
RS5wb2ludHMucmFkaXVzLGFGPWFFLnBvaW50cy5zeW1ib2w7aWYoYUc+MCYmYUM+MCl7dmFyIGFE
PWFDLzI7SC5saW5lV2lkdGg9YUQ7SC5zdHJva2VTdHlsZT0icmdiYSgwLDAsMCwwLjEpIjthSChh
RS5kYXRhcG9pbnRzLGFCLG51bGwsYUQrYUQvMix0cnVlLGFFLnhheGlzLGFFLnlheGlzLGFGKTtI
LnN0cm9rZVN0eWxlPSJyZ2JhKDAsMCwwLDAuMikiO2FIKGFFLmRhdGFwb2ludHMsYUIsbnVsbCxh
RC8yLHRydWUsYUUueGF4aXMsYUUueWF4aXMsYUYpfUgubGluZVdpZHRoPWFHO0guc3Ryb2tlU3R5
bGU9YUUuY29sb3I7YUgoYUUuZGF0YXBvaW50cyxhQixhZShhRS5wb2ludHMsYUUuY29sb3IpLDAs
ZmFsc2UsYUUueGF4aXMsYUUueWF4aXMsYUYpO0gucmVzdG9yZSgpfWZ1bmN0aW9uIEUoYU4sYU0s
YVYsYUksYVEsYUYsYUQsYUwsYUssYVUsYVIsYUMpe3ZhciBhRSxhVCxhSixhUCxhRyxhQixhTyxh
SCxhUztpZihhUil7YUg9YUI9YU89dHJ1ZTthRz1mYWxzZTthRT1hVjthVD1hTjthUD1hTSthSTth
Sj1hTSthUTtpZihhVDxhRSl7YVM9YVQ7YVQ9YUU7YUU9YVM7YUc9dHJ1ZTthQj1mYWxzZX19ZWxz
ZXthRz1hQj1hTz10cnVlO2FIPWZhbHNlO2FFPWFOK2FJO2FUPWFOK2FRO2FKPWFWO2FQPWFNO2lm
KGFQPGFKKXthUz1hUDthUD1hSjthSj1hUzthSD10cnVlO2FPPWZhbHNlfX1pZihhVDxhTC5taW58
fGFFPmFMLm1heHx8YVA8YUsubWlufHxhSj5hSy5tYXgpe3JldHVybn1pZihhRTxhTC5taW4pe2FF
PWFMLm1pbjthRz1mYWxzZX1pZihhVD5hTC5tYXgpe2FUPWFMLm1heDthQj1mYWxzZX1pZihhSjxh
Sy5taW4pe2FKPWFLLm1pbjthSD1mYWxzZX1pZihhUD5hSy5tYXgpe2FQPWFLLm1heDthTz1mYWxz
ZX1hRT1hTC5wMmMoYUUpO2FKPWFLLnAyYyhhSik7YVQ9YUwucDJjKGFUKTthUD1hSy5wMmMoYVAp
O2lmKGFEKXthVS5iZWdpblBhdGgoKTthVS5tb3ZlVG8oYUUsYUopO2FVLmxpbmVUbyhhRSxhUCk7
YVUubGluZVRvKGFULGFQKTthVS5saW5lVG8oYVQsYUopO2FVLmZpbGxTdHlsZT1hRChhSixhUCk7
YVUuZmlsbCgpfWlmKGFDPjAmJihhR3x8YUJ8fGFPfHxhSCkpe2FVLmJlZ2luUGF0aCgpO2FVLm1v
dmVUbyhhRSxhSithRik7aWYoYUcpe2FVLmxpbmVUbyhhRSxhUCthRil9ZWxzZXthVS5tb3ZlVG8o
YUUsYVArYUYpfWlmKGFPKXthVS5saW5lVG8oYVQsYVArYUYpfWVsc2V7YVUubW92ZVRvKGFULGFQ
K2FGKX1pZihhQil7YVUubGluZVRvKGFULGFKK2FGKX1lbHNle2FVLm1vdmVUbyhhVCxhSithRil9
aWYoYUgpe2FVLmxpbmVUbyhhRSxhSithRil9ZWxzZXthVS5tb3ZlVG8oYUUsYUorYUYpfWFVLnN0
cm9rZSgpfX1mdW5jdGlvbiBlKGFEKXtmdW5jdGlvbiBhQyhhSixhSSxhTCxhRyxhSyxhTixhTSl7
dmFyIGFPPWFKLnBvaW50cyxhRj1hSi5wb2ludHNpemU7Zm9yKHZhciBhSD0wO2FIPGFPLmxlbmd0
aDthSCs9YUYpe2lmKGFPW2FIXT09bnVsbCl7Y29udGludWV9RShhT1thSF0sYU9bYUgrMV0sYU9b
YUgrMl0sYUksYUwsYUcsYUssYU4sYU0sSCxhRC5iYXJzLmhvcml6b250YWwsYUQuYmFycy5saW5l
V2lkdGgpfX1ILnNhdmUoKTtILnRyYW5zbGF0ZShxLmxlZnQscS50b3ApO0gubGluZVdpZHRoPWFE
LmJhcnMubGluZVdpZHRoO0guc3Ryb2tlU3R5bGU9YUQuY29sb3I7dmFyIGFCPWFELmJhcnMuYWxp
Z249PSJsZWZ0Ij8wOi1hRC5iYXJzLmJhcldpZHRoLzI7dmFyIGFFPWFELmJhcnMuZmlsbD9mdW5j
dGlvbihhRixhRyl7cmV0dXJuIGFlKGFELmJhcnMsYUQuY29sb3IsYUYsYUcpfTpudWxsO2FDKGFE
LmRhdGFwb2ludHMsYUIsYUIrYUQuYmFycy5iYXJXaWR0aCwwLGFFLGFELnhheGlzLGFELnlheGlz
KTtILnJlc3RvcmUoKX1mdW5jdGlvbiBhZShhRCxhQixhQyxhRil7dmFyIGFFPWFELmZpbGw7aWYo
IWFFKXtyZXR1cm4gbnVsbH1pZihhRC5maWxsQ29sb3Ipe3JldHVybiBhbShhRC5maWxsQ29sb3Is
YUMsYUYsYUIpfXZhciBhRz1jLmNvbG9yLnBhcnNlKGFCKTthRy5hPXR5cGVvZiBhRT09Im51bWJl
ciI/YUU6MC40O2FHLm5vcm1hbGl6ZSgpO3JldHVybiBhRy50b1N0cmluZygpfWZ1bmN0aW9uIG8o
KXthdi5maW5kKCIubGVnZW5kIikucmVtb3ZlKCk7aWYoIU8ubGVnZW5kLnNob3cpe3JldHVybn12
YXIgYUg9W10sYUY9ZmFsc2UsYU49Ty5sZWdlbmQubGFiZWxGb3JtYXR0ZXIsYU0sYUo7Zm9yKHZh
ciBhRT0wO2FFPFEubGVuZ3RoOysrYUUpe2FNPVFbYUVdO2FKPWFNLmxhYmVsO2lmKCFhSil7Y29u
dGludWV9aWYoYUUlTy5sZWdlbmQubm9Db2x1bW5zPT0wKXtpZihhRil7YUgucHVzaCgiPC90cj4i
KX1hSC5wdXNoKCI8dHI+Iik7YUY9dHJ1ZX1pZihhTil7YUo9YU4oYUosYU0pfWFILnB1c2goJzx0
ZCBjbGFzcz0ibGVnZW5kQ29sb3JCb3giPjxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgJytP
LmxlZ2VuZC5sYWJlbEJveEJvcmRlckNvbG9yKyc7cGFkZGluZzoxcHgiPjxkaXYgc3R5bGU9Indp
ZHRoOjRweDtoZWlnaHQ6MDtib3JkZXI6NXB4IHNvbGlkICcrYU0uY29sb3IrJztvdmVyZmxvdzpo
aWRkZW4iPjwvZGl2PjwvZGl2PjwvdGQ+PHRkIGNsYXNzPSJsZWdlbmRMYWJlbCI+JythSisiPC90
ZD4iKX1pZihhRil7YUgucHVzaCgiPC90cj4iKX1pZihhSC5sZW5ndGg9PTApe3JldHVybn12YXIg
YUw9Jzx0YWJsZSBzdHlsZT0iZm9udC1zaXplOnNtYWxsZXI7Y29sb3I6JytPLmdyaWQuY29sb3Ir
JyI+JythSC5qb2luKCIiKSsiPC90YWJsZT4iO2lmKE8ubGVnZW5kLmNvbnRhaW5lciE9bnVsbCl7
YyhPLmxlZ2VuZC5jb250YWluZXIpLmh0bWwoYUwpfWVsc2V7dmFyIGFJPSIiLGFDPU8ubGVnZW5k
LnBvc2l0aW9uLGFEPU8ubGVnZW5kLm1hcmdpbjtpZihhRFswXT09bnVsbCl7YUQ9W2FELGFEXX1p
ZihhQy5jaGFyQXQoMCk9PSJuIil7YUkrPSJ0b3A6IisoYURbMV0rcS50b3ApKyJweDsifWVsc2V7
aWYoYUMuY2hhckF0KDApPT0icyIpe2FJKz0iYm90dG9tOiIrKGFEWzFdK3EuYm90dG9tKSsicHg7
In19aWYoYUMuY2hhckF0KDEpPT0iZSIpe2FJKz0icmlnaHQ6IisoYURbMF0rcS5yaWdodCkrInB4
OyJ9ZWxzZXtpZihhQy5jaGFyQXQoMSk9PSJ3Iil7YUkrPSJsZWZ0OiIrKGFEWzBdK3EubGVmdCkr
InB4OyJ9fXZhciBhSz1jKCc8ZGl2IGNsYXNzPSJsZWdlbmQiPicrYUwucmVwbGFjZSgnc3R5bGU9
IicsJ3N0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsnK2FJKyI7IikrIjwvZGl2PiIpLmFwcGVuZFRv
KGF2KTtpZihPLmxlZ2VuZC5iYWNrZ3JvdW5kT3BhY2l0eSE9MCl7dmFyIGFHPU8ubGVnZW5kLmJh
Y2tncm91bmRDb2xvcjtpZihhRz09bnVsbCl7YUc9Ty5ncmlkLmJhY2tncm91bmRDb2xvcjtpZihh
RyYmdHlwZW9mIGFHPT0ic3RyaW5nIil7YUc9Yy5jb2xvci5wYXJzZShhRyl9ZWxzZXthRz1jLmNv
bG9yLmV4dHJhY3QoYUssImJhY2tncm91bmQtY29sb3IiKX1hRy5hPTE7YUc9YUcudG9TdHJpbmco
KX12YXIgYUI9YUsuY2hpbGRyZW4oKTtjKCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3
aWR0aDonK2FCLndpZHRoKCkrInB4O2hlaWdodDoiK2FCLmhlaWdodCgpKyJweDsiK2FJKyJiYWNr
Z3JvdW5kLWNvbG9yOiIrYUcrJzsiPiA8L2Rpdj4nKS5wcmVwZW5kVG8oYUspLmNzcygib3BhY2l0
eSIsTy5sZWdlbmQuYmFja2dyb3VuZE9wYWNpdHkpfX19dmFyIGFiPVtdLE09bnVsbDtmdW5jdGlv
biBLKGFJLGFHLGFEKXt2YXIgYU89Ty5ncmlkLm1vdXNlQWN0aXZlUmFkaXVzLGEwPWFPKmFPKzEs
YVk9bnVsbCxhUj1mYWxzZSxhVyxhVTtmb3IoYVc9US5sZW5ndGgtMTthVz49MDstLWFXKXtpZigh
YUQoUVthV10pKXtjb250aW51ZX12YXIgYVA9UVthV10sYUg9YVAueGF4aXMsYUY9YVAueWF4aXMs
YVY9YVAuZGF0YXBvaW50cy5wb2ludHMsYVQ9YVAuZGF0YXBvaW50cy5wb2ludHNpemUsYVE9YUgu
YzJwKGFJKSxhTj1hRi5jMnAoYUcpLGFDPWFPL2FILnNjYWxlLGFCPWFPL2FGLnNjYWxlO2lmKGFI
Lm9wdGlvbnMuaW52ZXJzZVRyYW5zZm9ybSl7YUM9TnVtYmVyLk1BWF9WQUxVRX1pZihhRi5vcHRp
b25zLmludmVyc2VUcmFuc2Zvcm0pe2FCPU51bWJlci5NQVhfVkFMVUV9aWYoYVAubGluZXMuc2hv
d3x8YVAucG9pbnRzLnNob3cpe2ZvcihhVT0wO2FVPGFWLmxlbmd0aDthVSs9YVQpe3ZhciBhSz1h
VlthVV0sYUo9YVZbYVUrMV07aWYoYUs9PW51bGwpe2NvbnRpbnVlfWlmKGFLLWFRPmFDfHxhSy1h
UTwtYUN8fGFKLWFOPmFCfHxhSi1hTjwtYUIpe2NvbnRpbnVlfXZhciBhTT1NYXRoLmFicyhhSC5w
MmMoYUspLWFJKSxhTD1NYXRoLmFicyhhRi5wMmMoYUopLWFHKSxhUz1hTSphTSthTCphTDtpZihh
UzxhMCl7YTA9YVM7YVk9W2FXLGFVL2FUXX19fWlmKGFQLmJhcnMuc2hvdyYmIWFZKXt2YXIgYUU9
YVAuYmFycy5hbGlnbj09ImxlZnQiPzA6LWFQLmJhcnMuYmFyV2lkdGgvMixhWD1hRSthUC5iYXJz
LmJhcldpZHRoO2ZvcihhVT0wO2FVPGFWLmxlbmd0aDthVSs9YVQpe3ZhciBhSz1hVlthVV0sYUo9
YVZbYVUrMV0sYVo9YVZbYVUrMl07aWYoYUs9PW51bGwpe2NvbnRpbnVlfWlmKFFbYVddLmJhcnMu
aG9yaXpvbnRhbD8oYVE8PU1hdGgubWF4KGFaLGFLKSYmYVE+PU1hdGgubWluKGFaLGFLKSYmYU4+
PWFKK2FFJiZhTjw9YUorYVgpOihhUT49YUsrYUUmJmFRPD1hSythWCYmYU4+PU1hdGgubWluKGFa
LGFKKSYmYU48PU1hdGgubWF4KGFaLGFKKSkpe2FZPVthVyxhVS9hVF19fX19aWYoYVkpe2FXPWFZ
WzBdO2FVPWFZWzFdO2FUPVFbYVddLmRhdGFwb2ludHMucG9pbnRzaXplO3JldHVybntkYXRhcG9p
bnQ6UVthV10uZGF0YXBvaW50cy5wb2ludHMuc2xpY2UoYVUqYVQsKGFVKzEpKmFUKSxkYXRhSW5k
ZXg6YVUsc2VyaWVzOlFbYVddLHNlcmllc0luZGV4OmFXfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBh
YShhQil7aWYoTy5ncmlkLmhvdmVyYWJsZSl7dSgicGxvdGhvdmVyIixhQixmdW5jdGlvbihhQyl7
cmV0dXJuIGFDLmhvdmVyYWJsZSE9ZmFsc2V9KX19ZnVuY3Rpb24gbChhQil7aWYoTy5ncmlkLmhv
dmVyYWJsZSl7dSgicGxvdGhvdmVyIixhQixmdW5jdGlvbihhQyl7cmV0dXJuIGZhbHNlfSl9fWZ1
bmN0aW9uIFIoYUIpe3UoInBsb3RjbGljayIsYUIsZnVuY3Rpb24oYUMpe3JldHVybiBhQy5jbGlj
a2FibGUhPWZhbHNlfSl9ZnVuY3Rpb24gdShhQyxhQixhRCl7dmFyIGFFPXkub2Zmc2V0KCksYUg9
YUIucGFnZVgtYUUubGVmdC1xLmxlZnQsYUY9YUIucGFnZVktYUUudG9wLXEudG9wLGFKPUMoe2xl
ZnQ6YUgsdG9wOmFGfSk7YUoucGFnZVg9YUIucGFnZVg7YUoucGFnZVk9YUIucGFnZVk7dmFyIGFL
PUsoYUgsYUYsYUQpO2lmKGFLKXthSy5wYWdlWD1wYXJzZUludChhSy5zZXJpZXMueGF4aXMucDJj
KGFLLmRhdGFwb2ludFswXSkrYUUubGVmdCtxLmxlZnQpO2FLLnBhZ2VZPXBhcnNlSW50KGFLLnNl
cmllcy55YXhpcy5wMmMoYUsuZGF0YXBvaW50WzFdKSthRS50b3ArcS50b3ApfWlmKE8uZ3JpZC5h
dXRvSGlnaGxpZ2h0KXtmb3IodmFyIGFHPTA7YUc8YWIubGVuZ3RoOysrYUcpe3ZhciBhST1hYlth
R107aWYoYUkuYXV0bz09YUMmJiEoYUsmJmFJLnNlcmllcz09YUsuc2VyaWVzJiZhSS5wb2ludFsw
XT09YUsuZGF0YXBvaW50WzBdJiZhSS5wb2ludFsxXT09YUsuZGF0YXBvaW50WzFdKSl7VChhSS5z
ZXJpZXMsYUkucG9pbnQpfX1pZihhSyl7eChhSy5zZXJpZXMsYUsuZGF0YXBvaW50LGFDKX19YXYu
dHJpZ2dlcihhQyxbYUosYUtdKX1mdW5jdGlvbiBmKCl7aWYoIU0pe009c2V0VGltZW91dChzLDMw
KX19ZnVuY3Rpb24gcygpe009bnVsbDtBLnNhdmUoKTtBLmNsZWFyUmVjdCgwLDAsRyxJKTtBLnRy
YW5zbGF0ZShxLmxlZnQscS50b3ApO3ZhciBhQyxhQjtmb3IoYUM9MDthQzxhYi5sZW5ndGg7Kyth
Qyl7YUI9YWJbYUNdO2lmKGFCLnNlcmllcy5iYXJzLnNob3cpe3YoYUIuc2VyaWVzLGFCLnBvaW50
KX1lbHNle2F5KGFCLnNlcmllcyxhQi5wb2ludCl9fUEucmVzdG9yZSgpO2FuKGFrLmRyYXdPdmVy
bGF5LFtBXSl9ZnVuY3Rpb24geChhRCxhQixhRil7aWYodHlwZW9mIGFEPT0ibnVtYmVyIil7YUQ9
UVthRF19aWYodHlwZW9mIGFCPT0ibnVtYmVyIil7dmFyIGFFPWFELmRhdGFwb2ludHMucG9pbnRz
aXplO2FCPWFELmRhdGFwb2ludHMucG9pbnRzLnNsaWNlKGFFKmFCLGFFKihhQisxKSl9dmFyIGFD
PWFsKGFELGFCKTtpZihhQz09LTEpe2FiLnB1c2goe3NlcmllczphRCxwb2ludDphQixhdXRvOmFG
fSk7ZigpfWVsc2V7aWYoIWFGKXthYlthQ10uYXV0bz1mYWxzZX19fWZ1bmN0aW9uIFQoYUQsYUIp
e2lmKGFEPT1udWxsJiZhQj09bnVsbCl7YWI9W107ZigpfWlmKHR5cGVvZiBhRD09Im51bWJlciIp
e2FEPVFbYURdfWlmKHR5cGVvZiBhQj09Im51bWJlciIpe2FCPWFELmRhdGFbYUJdfXZhciBhQz1h
bChhRCxhQik7aWYoYUMhPS0xKXthYi5zcGxpY2UoYUMsMSk7ZigpfX1mdW5jdGlvbiBhbChhRCxh
RSl7Zm9yKHZhciBhQj0wO2FCPGFiLmxlbmd0aDsrK2FCKXt2YXIgYUM9YWJbYUJdO2lmKGFDLnNl
cmllcz09YUQmJmFDLnBvaW50WzBdPT1hRVswXSYmYUMucG9pbnRbMV09PWFFWzFdKXtyZXR1cm4g
YUJ9fXJldHVybiAtMX1mdW5jdGlvbiBheShhRSxhRCl7dmFyIGFDPWFEWzBdLGFJPWFEWzFdLGFI
PWFFLnhheGlzLGFHPWFFLnlheGlzO2lmKGFDPGFILm1pbnx8YUM+YUgubWF4fHxhSTxhRy5taW58
fGFJPmFHLm1heCl7cmV0dXJufXZhciBhRj1hRS5wb2ludHMucmFkaXVzK2FFLnBvaW50cy5saW5l
V2lkdGgvMjtBLmxpbmVXaWR0aD1hRjtBLnN0cm9rZVN0eWxlPWMuY29sb3IucGFyc2UoYUUuY29s
b3IpLnNjYWxlKCJhIiwwLjUpLnRvU3RyaW5nKCk7dmFyIGFCPTEuNSphRixhQz1hSC5wMmMoYUMp
LGFJPWFHLnAyYyhhSSk7QS5iZWdpblBhdGgoKTtpZihhRS5wb2ludHMuc3ltYm9sPT0iY2lyY2xl
Iil7QS5hcmMoYUMsYUksYUIsMCwyKk1hdGguUEksZmFsc2UpfWVsc2V7YUUucG9pbnRzLnN5bWJv
bChBLGFDLGFJLGFCLGZhbHNlKX1BLmNsb3NlUGF0aCgpO0Euc3Ryb2tlKCl9ZnVuY3Rpb24gdihh
RSxhQil7QS5saW5lV2lkdGg9YUUuYmFycy5saW5lV2lkdGg7QS5zdHJva2VTdHlsZT1jLmNvbG9y
LnBhcnNlKGFFLmNvbG9yKS5zY2FsZSgiYSIsMC41KS50b1N0cmluZygpO3ZhciBhRD1jLmNvbG9y
LnBhcnNlKGFFLmNvbG9yKS5zY2FsZSgiYSIsMC41KS50b1N0cmluZygpO3ZhciBhQz1hRS5iYXJz
LmFsaWduPT0ibGVmdCI/MDotYUUuYmFycy5iYXJXaWR0aC8yO0UoYUJbMF0sYUJbMV0sYUJbMl18
fDAsYUMsYUMrYUUuYmFycy5iYXJXaWR0aCwwLGZ1bmN0aW9uKCl7cmV0dXJuIGFEfSxhRS54YXhp
cyxhRS55YXhpcyxBLGFFLmJhcnMuaG9yaXpvbnRhbCxhRS5iYXJzLmxpbmVXaWR0aCl9ZnVuY3Rp
b24gYW0oYUosYUIsYUgsYUMpe2lmKHR5cGVvZiBhSj09InN0cmluZyIpe3JldHVybiBhSn1lbHNl
e3ZhciBhST1ILmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsYUgsMCxhQik7Zm9yKHZhciBhRT0wLGFE
PWFKLmNvbG9ycy5sZW5ndGg7YUU8YUQ7KythRSl7dmFyIGFGPWFKLmNvbG9yc1thRV07aWYodHlw
ZW9mIGFGIT0ic3RyaW5nIil7dmFyIGFHPWMuY29sb3IucGFyc2UoYUMpO2lmKGFGLmJyaWdodG5l
c3MhPW51bGwpe2FHPWFHLnNjYWxlKCJyZ2IiLGFGLmJyaWdodG5lc3MpfWlmKGFGLm9wYWNpdHkh
PW51bGwpe2FHLmEqPWFGLm9wYWNpdHl9YUY9YUcudG9TdHJpbmcoKX1hSS5hZGRDb2xvclN0b3Ao
YUUvKGFELTEpLGFGKX1yZXR1cm4gYUl9fX1jLnBsb3Q9ZnVuY3Rpb24oZyxlLGQpe3ZhciBmPW5l
dyBiKGMoZyksZSxkLGMucGxvdC5wbHVnaW5zKTtyZXR1cm4gZn07Yy5wbG90LnZlcnNpb249IjAu
NyI7Yy5wbG90LnBsdWdpbnM9W107Yy5wbG90LmZvcm1hdERhdGU9ZnVuY3Rpb24obCxmLGgpe3Zh
ciBvPWZ1bmN0aW9uKGQpe2Q9IiIrZDtyZXR1cm4gZC5sZW5ndGg9PTE/IjAiK2Q6ZH07dmFyIGU9
W107dmFyIHA9ZmFsc2Usaj1mYWxzZTt2YXIgbj1sLmdldFVUQ0hvdXJzKCk7dmFyIGs9bjwxMjtp
ZihoPT1udWxsKXtoPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwi
QXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19aWYoZi5zZWFyY2goLyVwfCVQLykhPS0xKXtp
ZihuPjEyKXtuPW4tMTJ9ZWxzZXtpZihuPT0wKXtuPTEyfX19Zm9yKHZhciBnPTA7ZzxmLmxlbmd0
aDsrK2cpe3ZhciBtPWYuY2hhckF0KGcpO2lmKHApe3N3aXRjaChtKXtjYXNlImgiOm09IiIrbjti
cmVhaztjYXNlIkgiOm09byhuKTticmVhaztjYXNlIk0iOm09byhsLmdldFVUQ01pbnV0ZXMoKSk7
YnJlYWs7Y2FzZSJTIjptPW8obC5nZXRVVENTZWNvbmRzKCkpO2JyZWFrO2Nhc2UiZCI6bT0iIits
LmdldFVUQ0RhdGUoKTticmVhaztjYXNlIm0iOm09IiIrKGwuZ2V0VVRDTW9udGgoKSsxKTticmVh
aztjYXNlInkiOm09IiIrbC5nZXRVVENGdWxsWWVhcigpO2JyZWFrO2Nhc2UiYiI6bT0iIitoW2wu
Z2V0VVRDTW9udGgoKV07YnJlYWs7Y2FzZSJwIjptPShrKT8oImFtIik6KCJwbSIpO2JyZWFrO2Nh
c2UiUCI6bT0oayk/KCJBTSIpOigiUE0iKTticmVhaztjYXNlIjAiOm09IiI7aj10cnVlO2JyZWFr
fWlmKG0mJmope209byhtKTtqPWZhbHNlfWUucHVzaChtKTtpZighail7cD1mYWxzZX19ZWxzZXtp
ZihtPT0iJSIpe3A9dHJ1ZX1lbHNle2UucHVzaChtKX19fXJldHVybiBlLmpvaW4oIiIpfTtmdW5j
dGlvbiBhKGUsZCl7cmV0dXJuIGQqTWF0aC5mbG9vcihlL2QpfX0pKGpRdWVyeSk7Cl8QD3RleHQv
amF2YXNjcmlwdF8QVGZpbGU6Ly8vVm9sdW1lcy9IREQvTm9uUGVyZm9yY2UvV2ViS2l0L1BlcmZv
cm1hbmNlVGVzdHMvcmVzb3VyY2VzL2pxdWVyeS5mbG90Lm1pbi5qc9QFBgcIExQVFk8RAllicGxp
c3QwMNQBAgMEBQY2N1gkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagqwcIHyUm
LS4vMDEyVSRudWxs2wkKCwwNDg8QERITFBUWFxgZGhscHR5SJDNWJGNsYXNzUiQ2UiQxUiQ5UiQ0
UiQ3UiQyUiQ1UiQwUiQ4gAKACoAHEACACYAFgAAQB4AGEAiACNMgCiEaIyRXTlMuYmFzZVtOUy5y
ZWxhdGl2ZYAAgASAA18QW2ZpbGU6Ly8vVm9sdW1lcy9IREQvTm9uUGVyZm9yY2UvV2ViS2l0L1Bl
cmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4uanPSJygpKlok
Y2xhc3NuYW1lWCRjbGFzc2VzVU5TVVJMoissVU5TVVJMWE5TT2JqZWN0I0G3IETeOKE4EAJfEA90
ZXh0L2phdmFzY3JpcHQRQIgjf+/////////SJygzNF1OU1VSTFJlc3BvbnNlojUsXU5TVVJMUmVz
cG9uc2VfEA9OU0tleWVkQXJjaGl2ZXLRODlfEBNXZWJSZXNvdXJjZVJlc3BvbnNlgAEACAARABoA
IwAtADIANwBDAEkAYABjAGoAbQBwAHMAdgB5AHwAfwCCAIUAhwCJAIsAjQCPAJEAkwCVAJcAmQCb
AKIAqgC2ALgAugC8ARoBHwEqATMBOQE8AUIBSwFUAVYBaAFrAXQBeQGHAYoBmAGqAa0BwwAAAAAA
AAIBAAAAAAAAADoAAAAAAAAAAAAAAAAAAAHFTxFAiAooZnVuY3Rpb24oJCl7JC5leHRlbmQoe3Rh
Ymxlc29ydGVyOm5ldwpmdW5jdGlvbigpe3ZhciBwYXJzZXJzPVtdLHdpZGdldHM9W107dGhpcy5k
ZWZhdWx0cz17Y3NzSGVhZGVyOiJoZWFkZXIiLGNzc0FzYzoiaGVhZGVyU29ydFVwIixjc3NEZXNj
OiJoZWFkZXJTb3J0RG93biIsY3NzQ2hpbGRSb3c6ImV4cGFuZC1jaGlsZCIsc29ydEluaXRpYWxP
cmRlcjoiYXNjIixzb3J0TXVsdGlTb3J0S2V5OiJzaGlmdEtleSIsc29ydEZvcmNlOm51bGwsc29y
dEFwcGVuZDpudWxsLHNvcnRMb2NhbGVDb21wYXJlOnRydWUsdGV4dEV4dHJhY3Rpb246InNpbXBs
ZSIscGFyc2Vyczp7fSx3aWRnZXRzOltdLHdpZGdldFplYnJhOntjc3M6WyJldmVuIiwib2RkIl19
LGhlYWRlcnM6e30sd2lkdGhGaXhlZDpmYWxzZSxjYW5jZWxTZWxlY3Rpb246dHJ1ZSxzb3J0TGlz
dDpbXSxoZWFkZXJMaXN0OltdLGRhdGVGb3JtYXQ6InVzIixkZWNpbWFsOicvXC58XCwvZycsb25S
ZW5kZXJIZWFkZXI6bnVsbCxzZWxlY3RvckhlYWRlcnM6J3RoZWFkIHRoJyxkZWJ1ZzpmYWxzZX07
ZnVuY3Rpb24gYmVuY2htYXJrKHMsZCl7bG9nKHMrIiwiKyhuZXcgRGF0ZSgpLmdldFRpbWUoKS1k
LmdldFRpbWUoKSkrIm1zIik7fXRoaXMuYmVuY2htYXJrPWJlbmNobWFyaztmdW5jdGlvbiBsb2co
cyl7aWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiJiZ0eXBlb2YgY29uc29sZS5kZWJ1ZyE9
InVuZGVmaW5lZCIpe2NvbnNvbGUubG9nKHMpO31lbHNle2FsZXJ0KHMpO319ZnVuY3Rpb24gYnVp
bGRQYXJzZXJDYWNoZSh0YWJsZSwkaGVhZGVycyl7aWYodGFibGUuY29uZmlnLmRlYnVnKXt2YXIg
cGFyc2Vyc0RlYnVnPSIiO31pZih0YWJsZS50Qm9kaWVzLmxlbmd0aD09MClyZXR1cm47dmFyIHJv
d3M9dGFibGUudEJvZGllc1swXS5yb3dzO2lmKHJvd3NbMF0pe3ZhciBsaXN0PVtdLGNlbGxzPXJv
d3NbMF0uY2VsbHMsbD1jZWxscy5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIHA9ZmFs
c2U7aWYoJC5tZXRhZGF0YSYmKCQoJGhlYWRlcnNbaV0pLm1ldGFkYXRhKCkmJiQoJGhlYWRlcnNb
aV0pLm1ldGFkYXRhKCkuc29ydGVyKSl7cD1nZXRQYXJzZXJCeUlkKCQoJGhlYWRlcnNbaV0pLm1l
dGFkYXRhKCkuc29ydGVyKTt9ZWxzZSBpZigodGFibGUuY29uZmlnLmhlYWRlcnNbaV0mJnRhYmxl
LmNvbmZpZy5oZWFkZXJzW2ldLnNvcnRlcikpe3A9Z2V0UGFyc2VyQnlJZCh0YWJsZS5jb25maWcu
aGVhZGVyc1tpXS5zb3J0ZXIpO31pZighcCl7cD1kZXRlY3RQYXJzZXJGb3JDb2x1bW4odGFibGUs
cm93cywtMSxpKTt9aWYodGFibGUuY29uZmlnLmRlYnVnKXtwYXJzZXJzRGVidWcrPSJjb2x1bW46
IitpKyIgcGFyc2VyOiIrcC5pZCsiXG4iO31saXN0LnB1c2gocCk7fX1pZih0YWJsZS5jb25maWcu
ZGVidWcpe2xvZyhwYXJzZXJzRGVidWcpO31yZXR1cm4gbGlzdDt9O2Z1bmN0aW9uIGRldGVjdFBh
cnNlckZvckNvbHVtbih0YWJsZSxyb3dzLHJvd0luZGV4LGNlbGxJbmRleCl7dmFyIGw9cGFyc2Vy
cy5sZW5ndGgsbm9kZT1mYWxzZSxub2RlVmFsdWU9ZmFsc2Usa2VlcExvb2tpbmc9dHJ1ZTt3aGls
ZShub2RlVmFsdWU9PScnJiZrZWVwTG9va2luZyl7cm93SW5kZXgrKztpZihyb3dzW3Jvd0luZGV4
XSl7bm9kZT1nZXROb2RlRnJvbVJvd0FuZENlbGxJbmRleChyb3dzLHJvd0luZGV4LGNlbGxJbmRl
eCk7bm9kZVZhbHVlPXRyaW1BbmRHZXROb2RlVGV4dCh0YWJsZS5jb25maWcsbm9kZSk7aWYodGFi
bGUuY29uZmlnLmRlYnVnKXtsb2coJ0NoZWNraW5nIGlmIHZhbHVlIHdhcyBlbXB0eSBvbiByb3c6
Jytyb3dJbmRleCk7fX1lbHNle2tlZXBMb29raW5nPWZhbHNlO319Zm9yKHZhciBpPTE7aTxsO2kr
Kyl7aWYocGFyc2Vyc1tpXS5pcyhub2RlVmFsdWUsdGFibGUsbm9kZSkpe3JldHVybiBwYXJzZXJz
W2ldO319cmV0dXJuIHBhcnNlcnNbMF07fWZ1bmN0aW9uIGdldE5vZGVGcm9tUm93QW5kQ2VsbElu
ZGV4KHJvd3Mscm93SW5kZXgsY2VsbEluZGV4KXtyZXR1cm4gcm93c1tyb3dJbmRleF0uY2VsbHNb
Y2VsbEluZGV4XTt9ZnVuY3Rpb24gdHJpbUFuZEdldE5vZGVUZXh0KGNvbmZpZyxub2RlKXtyZXR1
cm4gJC50cmltKGdldEVsZW1lbnRUZXh0KGNvbmZpZyxub2RlKSk7fWZ1bmN0aW9uIGdldFBhcnNl
ckJ5SWQobmFtZSl7dmFyIGw9cGFyc2Vycy5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsO2krKyl7aWYo
cGFyc2Vyc1tpXS5pZC50b0xvd2VyQ2FzZSgpPT1uYW1lLnRvTG93ZXJDYXNlKCkpe3JldHVybiBw
YXJzZXJzW2ldO319cmV0dXJuIGZhbHNlO31mdW5jdGlvbiBidWlsZENhY2hlKHRhYmxlKXtpZih0
YWJsZS5jb25maWcuZGVidWcpe3ZhciBjYWNoZVRpbWU9bmV3IERhdGUoKTt9dmFyIHRvdGFsUm93
cz0odGFibGUudEJvZGllc1swXSYmdGFibGUudEJvZGllc1swXS5yb3dzLmxlbmd0aCl8fDAsdG90
YWxDZWxscz0odGFibGUudEJvZGllc1swXS5yb3dzWzBdJiZ0YWJsZS50Qm9kaWVzWzBdLnJvd3Nb
MF0uY2VsbHMubGVuZ3RoKXx8MCxwYXJzZXJzPXRhYmxlLmNvbmZpZy5wYXJzZXJzLGNhY2hlPXty
b3c6W10sbm9ybWFsaXplZDpbXX07Zm9yKHZhciBpPTA7aTx0b3RhbFJvd3M7KytpKXt2YXIgYz0k
KHRhYmxlLnRCb2RpZXNbMF0ucm93c1tpXSksY29scz1bXTtpZihjLmhhc0NsYXNzKHRhYmxlLmNv
bmZpZy5jc3NDaGlsZFJvdykpe2NhY2hlLnJvd1tjYWNoZS5yb3cubGVuZ3RoLTFdPWNhY2hlLnJv
d1tjYWNoZS5yb3cubGVuZ3RoLTFdLmFkZChjKTtjb250aW51ZTt9Y2FjaGUucm93LnB1c2goYyk7
Zm9yKHZhciBqPTA7ajx0b3RhbENlbGxzOysrail7Y29scy5wdXNoKHBhcnNlcnNbal0uZm9ybWF0
KGdldEVsZW1lbnRUZXh0KHRhYmxlLmNvbmZpZyxjWzBdLmNlbGxzW2pdKSx0YWJsZSxjWzBdLmNl
bGxzW2pdKSk7fWNvbHMucHVzaChjYWNoZS5ub3JtYWxpemVkLmxlbmd0aCk7Y2FjaGUubm9ybWFs
aXplZC5wdXNoKGNvbHMpO2NvbHM9bnVsbDt9O2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7YmVuY2ht
YXJrKCJCdWlsZGluZyBjYWNoZSBmb3IgIit0b3RhbFJvd3MrIiByb3dzOiIsY2FjaGVUaW1lKTt9
cmV0dXJuIGNhY2hlO307ZnVuY3Rpb24gZ2V0RWxlbWVudFRleHQoY29uZmlnLG5vZGUpe3ZhciB0
ZXh0PSIiO2lmKCFub2RlKXJldHVybiIiO2lmKCFjb25maWcuc3VwcG9ydHNUZXh0Q29udGVudClj
b25maWcuc3VwcG9ydHNUZXh0Q29udGVudD1ub2RlLnRleHRDb250ZW50fHxmYWxzZTtpZihjb25m
aWcudGV4dEV4dHJhY3Rpb249PSJzaW1wbGUiKXtpZihjb25maWcuc3VwcG9ydHNUZXh0Q29udGVu
dCl7dGV4dD1ub2RlLnRleHRDb250ZW50O31lbHNle2lmKG5vZGUuY2hpbGROb2Rlc1swXSYmbm9k
ZS5jaGlsZE5vZGVzWzBdLmhhc0NoaWxkTm9kZXMoKSl7dGV4dD1ub2RlLmNoaWxkTm9kZXNbMF0u
aW5uZXJIVE1MO31lbHNle3RleHQ9bm9kZS5pbm5lckhUTUw7fX19ZWxzZXtpZih0eXBlb2YoY29u
ZmlnLnRleHRFeHRyYWN0aW9uKT09ImZ1bmN0aW9uIil7dGV4dD1jb25maWcudGV4dEV4dHJhY3Rp
b24obm9kZSk7fWVsc2V7dGV4dD0kKG5vZGUpLnRleHQoKTt9fXJldHVybiB0ZXh0O31mdW5jdGlv
biBhcHBlbmRUb1RhYmxlKHRhYmxlLGNhY2hlKXtpZih0YWJsZS5jb25maWcuZGVidWcpe3ZhciBh
cHBlbmRUaW1lPW5ldyBEYXRlKCl9dmFyIGM9Y2FjaGUscj1jLnJvdyxuPWMubm9ybWFsaXplZCx0
b3RhbFJvd3M9bi5sZW5ndGgsY2hlY2tDZWxsPShuWzBdLmxlbmd0aC0xKSx0YWJsZUJvZHk9JCh0
YWJsZS50Qm9kaWVzWzBdKSxyb3dzPVtdO2Zvcih2YXIgaT0wO2k8dG90YWxSb3dzO2krKyl7dmFy
IHBvcz1uW2ldW2NoZWNrQ2VsbF07cm93cy5wdXNoKHJbcG9zXSk7aWYoIXRhYmxlLmNvbmZpZy5h
cHBlbmRlcil7dmFyIGw9cltwb3NdLmxlbmd0aDtmb3IodmFyIGo9MDtqPGw7aisrKXt0YWJsZUJv
ZHlbMF0uYXBwZW5kQ2hpbGQocltwb3NdW2pdKTt9fX1pZih0YWJsZS5jb25maWcuYXBwZW5kZXIp
e3RhYmxlLmNvbmZpZy5hcHBlbmRlcih0YWJsZSxyb3dzKTt9cm93cz1udWxsO2lmKHRhYmxlLmNv
bmZpZy5kZWJ1Zyl7YmVuY2htYXJrKCJSZWJ1aWx0IHRhYmxlOiIsYXBwZW5kVGltZSk7fWFwcGx5
V2lkZ2V0KHRhYmxlKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JCh0YWJsZSkudHJpZ2dlcigic29y
dEVuZCIpO30sMCk7fTtmdW5jdGlvbiBidWlsZEhlYWRlcnModGFibGUpe2lmKHRhYmxlLmNvbmZp
Zy5kZWJ1Zyl7dmFyIHRpbWU9bmV3IERhdGUoKTt9dmFyIG1ldGE9KCQubWV0YWRhdGEpP3RydWU6
ZmFsc2U7dmFyIGhlYWRlcl9pbmRleD1jb21wdXRlVGFibGVIZWFkZXJDZWxsSW5kZXhlcyh0YWJs
ZSk7JHRhYmxlSGVhZGVycz0kKHRhYmxlLmNvbmZpZy5zZWxlY3RvckhlYWRlcnMsdGFibGUpLmVh
Y2goZnVuY3Rpb24oaW5kZXgpe3RoaXMuY29sdW1uPWhlYWRlcl9pbmRleFt0aGlzLnBhcmVudE5v
ZGUucm93SW5kZXgrIi0iK3RoaXMuY2VsbEluZGV4XTt0aGlzLm9yZGVyPWZvcm1hdFNvcnRpbmdP
cmRlcih0YWJsZS5jb25maWcuc29ydEluaXRpYWxPcmRlcik7dGhpcy5jb3VudD10aGlzLm9yZGVy
O2lmKGNoZWNrSGVhZGVyTWV0YWRhdGEodGhpcyl8fGNoZWNrSGVhZGVyT3B0aW9ucyh0YWJsZSxp
bmRleCkpdGhpcy5zb3J0RGlzYWJsZWQ9dHJ1ZTtpZihjaGVja0hlYWRlck9wdGlvbnNTb3J0aW5n
TG9ja2VkKHRhYmxlLGluZGV4KSl0aGlzLm9yZGVyPXRoaXMubG9ja2VkT3JkZXI9Y2hlY2tIZWFk
ZXJPcHRpb25zU29ydGluZ0xvY2tlZCh0YWJsZSxpbmRleCk7aWYoIXRoaXMuc29ydERpc2FibGVk
KXt2YXIgJHRoPSQodGhpcykuYWRkQ2xhc3ModGFibGUuY29uZmlnLmNzc0hlYWRlcik7aWYodGFi
bGUuY29uZmlnLm9uUmVuZGVySGVhZGVyKXRhYmxlLmNvbmZpZy5vblJlbmRlckhlYWRlci5hcHBs
eSgkdGgpO310YWJsZS5jb25maWcuaGVhZGVyTGlzdFtpbmRleF09dGhpczt9KTtpZih0YWJsZS5j
b25maWcuZGVidWcpe2JlbmNobWFyaygiQnVpbHQgaGVhZGVyczoiLHRpbWUpO2xvZygkdGFibGVI
ZWFkZXJzKTt9cmV0dXJuICR0YWJsZUhlYWRlcnM7fTtmdW5jdGlvbiBjb21wdXRlVGFibGVIZWFk
ZXJDZWxsSW5kZXhlcyh0KXt2YXIgbWF0cml4PVtdO3ZhciBsb29rdXA9e307dmFyIHRoZWFkPXQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ1RIRUFEJylbMF07dmFyIHRycz10aGVhZC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnVFInKTtmb3IodmFyIGk9MDtpPHRycy5sZW5ndGg7aSsrKXt2YXIgY2VsbHM9
dHJzW2ldLmNlbGxzO2Zvcih2YXIgaj0wO2o8Y2VsbHMubGVuZ3RoO2orKyl7dmFyIGM9Y2VsbHNb
al07dmFyIHJvd0luZGV4PWMucGFyZW50Tm9kZS5yb3dJbmRleDt2YXIgY2VsbElkPXJvd0luZGV4
KyItIitjLmNlbGxJbmRleDt2YXIgcm93U3Bhbj1jLnJvd1NwYW58fDE7dmFyIGNvbFNwYW49Yy5j
b2xTcGFufHwxCnZhciBmaXJzdEF2YWlsQ29sO2lmKHR5cGVvZihtYXRyaXhbcm93SW5kZXhdKT09
InVuZGVmaW5lZCIpe21hdHJpeFtyb3dJbmRleF09W107fWZvcih2YXIgaz0wO2s8bWF0cml4W3Jv
d0luZGV4XS5sZW5ndGgrMTtrKyspe2lmKHR5cGVvZihtYXRyaXhbcm93SW5kZXhdW2tdKT09InVu
ZGVmaW5lZCIpe2ZpcnN0QXZhaWxDb2w9azticmVhazt9fWxvb2t1cFtjZWxsSWRdPWZpcnN0QXZh
aWxDb2w7Zm9yKHZhciBrPXJvd0luZGV4O2s8cm93SW5kZXgrcm93U3BhbjtrKyspe2lmKHR5cGVv
ZihtYXRyaXhba10pPT0idW5kZWZpbmVkIil7bWF0cml4W2tdPVtdO312YXIgbWF0cml4cm93PW1h
dHJpeFtrXTtmb3IodmFyIGw9Zmlyc3RBdmFpbENvbDtsPGZpcnN0QXZhaWxDb2wrY29sU3Bhbjts
Kyspe21hdHJpeHJvd1tsXT0ieCI7fX19fXJldHVybiBsb29rdXA7fWZ1bmN0aW9uIGNoZWNrQ2Vs
bENvbFNwYW4odGFibGUscm93cyxyb3cpe3ZhciBhcnI9W10scj10YWJsZS50SGVhZC5yb3dzLGM9
cltyb3ddLmNlbGxzO2Zvcih2YXIgaT0wO2k8Yy5sZW5ndGg7aSsrKXt2YXIgY2VsbD1jW2ldO2lm
KGNlbGwuY29sU3Bhbj4xKXthcnI9YXJyLmNvbmNhdChjaGVja0NlbGxDb2xTcGFuKHRhYmxlLGhl
YWRlckFycixyb3crKykpO31lbHNle2lmKHRhYmxlLnRIZWFkLmxlbmd0aD09MXx8KGNlbGwucm93
U3Bhbj4xfHwhcltyb3crMV0pKXthcnIucHVzaChjZWxsKTt9fX1yZXR1cm4gYXJyO307ZnVuY3Rp
b24gY2hlY2tIZWFkZXJNZXRhZGF0YShjZWxsKXtpZigoJC5tZXRhZGF0YSkmJigkKGNlbGwpLm1l
dGFkYXRhKCkuc29ydGVyPT09ZmFsc2UpKXtyZXR1cm4gdHJ1ZTt9O3JldHVybiBmYWxzZTt9ZnVu
Y3Rpb24gY2hlY2tIZWFkZXJPcHRpb25zKHRhYmxlLGkpe2lmKCh0YWJsZS5jb25maWcuaGVhZGVy
c1tpXSkmJih0YWJsZS5jb25maWcuaGVhZGVyc1tpXS5zb3J0ZXI9PT1mYWxzZSkpe3JldHVybiB0
cnVlO307cmV0dXJuIGZhbHNlO31mdW5jdGlvbiBjaGVja0hlYWRlck9wdGlvbnNTb3J0aW5nTG9j
a2VkKHRhYmxlLGkpe2lmKCh0YWJsZS5jb25maWcuaGVhZGVyc1tpXSkmJih0YWJsZS5jb25maWcu
aGVhZGVyc1tpXS5sb2NrZWRPcmRlcikpcmV0dXJuIHRhYmxlLmNvbmZpZy5oZWFkZXJzW2ldLmxv
Y2tlZE9yZGVyO3JldHVybiBmYWxzZTt9ZnVuY3Rpb24gYXBwbHlXaWRnZXQodGFibGUpe3ZhciBj
PXRhYmxlLmNvbmZpZy53aWRnZXRzO3ZhciBsPWMubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtpKysp
e2dldFdpZGdldEJ5SWQoY1tpXSkuZm9ybWF0KHRhYmxlKTt9fWZ1bmN0aW9uIGdldFdpZGdldEJ5
SWQobmFtZSl7dmFyIGw9d2lkZ2V0cy5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsO2krKyl7aWYod2lk
Z2V0c1tpXS5pZC50b0xvd2VyQ2FzZSgpPT1uYW1lLnRvTG93ZXJDYXNlKCkpe3JldHVybiB3aWRn
ZXRzW2ldO319fTtmdW5jdGlvbiBmb3JtYXRTb3J0aW5nT3JkZXIodil7aWYodHlwZW9mKHYpIT0i
TnVtYmVyIil7cmV0dXJuKHYudG9Mb3dlckNhc2UoKT09ImRlc2MiKT8xOjA7fWVsc2V7cmV0dXJu
KHY9PTEpPzE6MDt9fWZ1bmN0aW9uIGlzVmFsdWVJbkFycmF5KHYsYSl7dmFyIGw9YS5sZW5ndGg7
Zm9yKHZhciBpPTA7aTxsO2krKyl7aWYoYVtpXVswXT09dil7cmV0dXJuIHRydWU7fX1yZXR1cm4g
ZmFsc2U7fWZ1bmN0aW9uIHNldEhlYWRlcnNDc3ModGFibGUsJGhlYWRlcnMsbGlzdCxjc3MpeyRo
ZWFkZXJzLnJlbW92ZUNsYXNzKGNzc1swXSkucmVtb3ZlQ2xhc3MoY3NzWzFdKTt2YXIgaD1bXTsk
aGVhZGVycy5lYWNoKGZ1bmN0aW9uKG9mZnNldCl7aWYoIXRoaXMuc29ydERpc2FibGVkKXtoW3Ro
aXMuY29sdW1uXT0kKHRoaXMpO319KTt2YXIgbD1saXN0Lmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7
aSsrKXtoW2xpc3RbaV1bMF1dLmFkZENsYXNzKGNzc1tsaXN0W2ldWzFdXSk7fX1mdW5jdGlvbiBm
aXhDb2x1bW5XaWR0aCh0YWJsZSwkaGVhZGVycyl7dmFyIGM9dGFibGUuY29uZmlnO2lmKGMud2lk
dGhGaXhlZCl7dmFyIGNvbGdyb3VwPSQoJzxjb2xncm91cD4nKTskKCJ0cjpmaXJzdCB0ZCIsdGFi
bGUudEJvZGllc1swXSkuZWFjaChmdW5jdGlvbigpe2NvbGdyb3VwLmFwcGVuZCgkKCc8Y29sPicp
LmNzcygnd2lkdGgnLCQodGhpcykud2lkdGgoKSkpO30pOyQodGFibGUpLnByZXBlbmQoY29sZ3Jv
dXApO307fWZ1bmN0aW9uIHVwZGF0ZUhlYWRlclNvcnRDb3VudCh0YWJsZSxzb3J0TGlzdCl7dmFy
IGM9dGFibGUuY29uZmlnLGw9c29ydExpc3QubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtpKyspe3Zh
ciBzPXNvcnRMaXN0W2ldLG89Yy5oZWFkZXJMaXN0W3NbMF1dO28uY291bnQ9c1sxXTtvLmNvdW50
Kys7fX1mdW5jdGlvbiBtdWx0aXNvcnQodGFibGUsc29ydExpc3QsY2FjaGUpe2lmKHRhYmxlLmNv
bmZpZy5kZWJ1Zyl7dmFyIHNvcnRUaW1lPW5ldyBEYXRlKCk7fXZhciBkeW5hbWljRXhwPSJ2YXIg
c29ydFdyYXBwZXIgPSBmdW5jdGlvbihhLGIpIHsiLGw9c29ydExpc3QubGVuZ3RoO2Zvcih2YXIg
aT0wO2k8bDtpKyspe3ZhciBjPXNvcnRMaXN0W2ldWzBdO3ZhciBvcmRlcj1zb3J0TGlzdFtpXVsx
XTt2YXIgcz0odGFibGUuY29uZmlnLnBhcnNlcnNbY10udHlwZT09InRleHQiKT8oKG9yZGVyPT0w
KT9tYWtlU29ydEZ1bmN0aW9uKCJ0ZXh0IiwiYXNjIixjKTptYWtlU29ydEZ1bmN0aW9uKCJ0ZXh0
IiwiZGVzYyIsYykpOigob3JkZXI9PTApP21ha2VTb3J0RnVuY3Rpb24oIm51bWVyaWMiLCJhc2Mi
LGMpOm1ha2VTb3J0RnVuY3Rpb24oIm51bWVyaWMiLCJkZXNjIixjKSk7dmFyIGU9ImUiK2k7ZHlu
YW1pY0V4cCs9InZhciAiK2UrIiA9ICIrcztkeW5hbWljRXhwKz0iaWYoIitlKyIpIHsgcmV0dXJu
ICIrZSsiOyB9ICI7ZHluYW1pY0V4cCs9ImVsc2UgeyAiO312YXIgb3JnT3JkZXJDb2w9Y2FjaGUu
bm9ybWFsaXplZFswXS5sZW5ndGgtMTtkeW5hbWljRXhwKz0icmV0dXJuIGFbIitvcmdPcmRlckNv
bCsiXS1iWyIrb3JnT3JkZXJDb2wrIl07Ijtmb3IodmFyIGk9MDtpPGw7aSsrKXtkeW5hbWljRXhw
Kz0ifTsgIjt9ZHluYW1pY0V4cCs9InJldHVybiAwOyAiO2R5bmFtaWNFeHArPSJ9OyAiO2lmKHRh
YmxlLmNvbmZpZy5kZWJ1Zyl7YmVuY2htYXJrKCJFdmFsaW5nIGV4cHJlc3Npb246IitkeW5hbWlj
RXhwLG5ldyBEYXRlKCkpO31ldmFsKGR5bmFtaWNFeHApO2NhY2hlLm5vcm1hbGl6ZWQuc29ydChz
b3J0V3JhcHBlcik7aWYodGFibGUuY29uZmlnLmRlYnVnKXtiZW5jaG1hcmsoIlNvcnRpbmcgb24g
Iitzb3J0TGlzdC50b1N0cmluZygpKyIgYW5kIGRpciAiK29yZGVyKyIgdGltZToiLHNvcnRUaW1l
KTt9cmV0dXJuIGNhY2hlO307ZnVuY3Rpb24gbWFrZVNvcnRGdW5jdGlvbih0eXBlLGRpcmVjdGlv
bixpbmRleCl7dmFyIGE9ImFbIitpbmRleCsiXSIsYj0iYlsiK2luZGV4KyJdIjtpZih0eXBlPT0n
dGV4dCcmJmRpcmVjdGlvbj09J2FzYycpe3JldHVybiIoIithKyIgPT0gIitiKyIgPyAwIDogKCIr
YSsiID09PSBudWxsID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogKCIrYisiID09PSBudWxs
ID8gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZIDogKCIrYSsiIDwgIitiKyIpID8gLTEgOiAxICkp
KTsiO31lbHNlIGlmKHR5cGU9PSd0ZXh0JyYmZGlyZWN0aW9uPT0nZGVzYycpe3JldHVybiIoIith
KyIgPT0gIitiKyIgPyAwIDogKCIrYSsiID09PSBudWxsID8gTnVtYmVyLlBPU0lUSVZFX0lORklO
SVRZIDogKCIrYisiID09PSBudWxsID8gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZIDogKCIrYisi
IDwgIithKyIpID8gLTEgOiAxICkpKTsiO31lbHNlIGlmKHR5cGU9PSdudW1lcmljJyYmZGlyZWN0
aW9uPT0nYXNjJyl7cmV0dXJuIigiK2ErIiA9PT0gbnVsbCAmJiAiK2IrIiA9PT0gbnVsbCkgPyAw
IDooIithKyIgPT09IG51bGwgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiAoIitiKyIgPT09
IG51bGwgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgOiAiK2ErIiAtICIrYisiKSk7Ijt9ZWxz
ZSBpZih0eXBlPT0nbnVtZXJpYycmJmRpcmVjdGlvbj09J2Rlc2MnKXtyZXR1cm4iKCIrYSsiID09
PSBudWxsICYmICIrYisiID09PSBudWxsKSA/IDAgOigiK2ErIiA9PT0gbnVsbCA/IE51bWJlci5Q
T1NJVElWRV9JTkZJTklUWSA6ICgiK2IrIiA9PT0gbnVsbCA/IE51bWJlci5ORUdBVElWRV9JTkZJ
TklUWSA6ICIrYisiIC0gIithKyIpKTsiO319O2Z1bmN0aW9uIG1ha2VTb3J0VGV4dChpKXtyZXR1
cm4iKChhWyIraSsiXSA8IGJbIitpKyJdKSA/IC0xIDogKChhWyIraSsiXSA+IGJbIitpKyJdKSA/
IDEgOiAwKSk7Ijt9O2Z1bmN0aW9uIG1ha2VTb3J0VGV4dERlc2MoaSl7cmV0dXJuIigoYlsiK2kr
Il0gPCBhWyIraSsiXSkgPyAtMSA6ICgoYlsiK2krIl0gPiBhWyIraSsiXSkgPyAxIDogMCkpOyI7
fTtmdW5jdGlvbiBtYWtlU29ydE51bWVyaWMoaSl7cmV0dXJuImFbIitpKyJdLWJbIitpKyJdOyI7
fTtmdW5jdGlvbiBtYWtlU29ydE51bWVyaWNEZXNjKGkpe3JldHVybiJiWyIraSsiXS1hWyIraSsi
XTsiO307ZnVuY3Rpb24gc29ydFRleHQoYSxiKXtpZih0YWJsZS5jb25maWcuc29ydExvY2FsZUNv
bXBhcmUpcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtyZXR1cm4oKGE8Yik/LTE6KChhPmIpPzE6
MCkpO307ZnVuY3Rpb24gc29ydFRleHREZXNjKGEsYil7aWYodGFibGUuY29uZmlnLnNvcnRMb2Nh
bGVDb21wYXJlKXJldHVybiBiLmxvY2FsZUNvbXBhcmUoYSk7cmV0dXJuKChiPGEpPy0xOigoYj5h
KT8xOjApKTt9O2Z1bmN0aW9uIHNvcnROdW1lcmljKGEsYil7cmV0dXJuIGEtYjt9O2Z1bmN0aW9u
IHNvcnROdW1lcmljRGVzYyhhLGIpe3JldHVybiBiLWE7fTtmdW5jdGlvbiBnZXRDYWNoZWRTb3J0
VHlwZShwYXJzZXJzLGkpe3JldHVybiBwYXJzZXJzW2ldLnR5cGU7fTt0aGlzLmNvbnN0cnVjdD1m
dW5jdGlvbihzZXR0aW5ncyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCF0aGlzLnRI
ZWFkfHwhdGhpcy50Qm9kaWVzKXJldHVybjt2YXIgJHRoaXMsJGRvY3VtZW50LCRoZWFkZXJzLGNh
Y2hlLGNvbmZpZyxzaGlmdERvd249MCxzb3J0T3JkZXI7dGhpcy5jb25maWc9e307Y29uZmlnPSQu
ZXh0ZW5kKHRoaXMuY29uZmlnLCQudGFibGVzb3J0ZXIuZGVmYXVsdHMsc2V0dGluZ3MpOyR0aGlz
PSQodGhpcyk7JC5kYXRhKHRoaXMsInRhYmxlc29ydGVyIixjb25maWcpOyRoZWFkZXJzPWJ1aWxk
SGVhZGVycyh0aGlzKTt0aGlzLmNvbmZpZy5wYXJzZXJzPWJ1aWxkUGFyc2VyQ2FjaGUodGhpcywk
aGVhZGVycyk7Y2FjaGU9YnVpbGRDYWNoZSh0aGlzKTt2YXIgc29ydENTUz1bY29uZmlnLmNzc0Rl
c2MsY29uZmlnLmNzc0FzY107Zml4Q29sdW1uV2lkdGgodGhpcyk7JGhlYWRlcnMuY2xpY2soZnVu
Y3Rpb24oZSl7dmFyIHRvdGFsUm93cz0oJHRoaXNbMF0udEJvZGllc1swXSYmJHRoaXNbMF0udEJv
ZGllc1swXS5yb3dzLmxlbmd0aCl8fDA7aWYoIXRoaXMuc29ydERpc2FibGVkJiZ0b3RhbFJvd3M+
MCl7JHRoaXMudHJpZ2dlcigic29ydFN0YXJ0Iik7dmFyICRjZWxsPSQodGhpcyk7dmFyIGk9dGhp
cy5jb2x1bW47dGhpcy5vcmRlcj10aGlzLmNvdW50KyslMjtpZih0aGlzLmxvY2tlZE9yZGVyKXRo
aXMub3JkZXI9dGhpcy5sb2NrZWRPcmRlcjtpZighZVtjb25maWcuc29ydE11bHRpU29ydEtleV0p
e2NvbmZpZy5zb3J0TGlzdD1bXTtpZihjb25maWcuc29ydEZvcmNlIT1udWxsKXt2YXIgYT1jb25m
aWcuc29ydEZvcmNlO2Zvcih2YXIgaj0wO2o8YS5sZW5ndGg7aisrKXtpZihhW2pdWzBdIT1pKXtj
b25maWcuc29ydExpc3QucHVzaChhW2pdKTt9fX1jb25maWcuc29ydExpc3QucHVzaChbaSx0aGlz
Lm9yZGVyXSk7fWVsc2V7aWYoaXNWYWx1ZUluQXJyYXkoaSxjb25maWcuc29ydExpc3QpKXtmb3Io
dmFyIGo9MDtqPGNvbmZpZy5zb3J0TGlzdC5sZW5ndGg7aisrKXt2YXIgcz1jb25maWcuc29ydExp
c3Rbal0sbz1jb25maWcuaGVhZGVyTGlzdFtzWzBdXTtpZihzWzBdPT1pKXtvLmNvdW50PXNbMV07
by5jb3VudCsrO3NbMV09by5jb3VudCUyO319fWVsc2V7Y29uZmlnLnNvcnRMaXN0LnB1c2goW2ks
dGhpcy5vcmRlcl0pO319O3NldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRIZWFkZXJzQ3NzKCR0aGlz
WzBdLCRoZWFkZXJzLGNvbmZpZy5zb3J0TGlzdCxzb3J0Q1NTKTthcHBlbmRUb1RhYmxlKCR0aGlz
WzBdLG11bHRpc29ydCgkdGhpc1swXSxjb25maWcuc29ydExpc3QsY2FjaGUpKTt9LDEpO3JldHVy
biBmYWxzZTt9fSkubW91c2Vkb3duKGZ1bmN0aW9uKCl7aWYoY29uZmlnLmNhbmNlbFNlbGVjdGlv
bil7dGhpcy5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfTtyZXR1cm4gZmFs
c2U7fX0pOyR0aGlzLmJpbmQoInVwZGF0ZSIsZnVuY3Rpb24oKXt2YXIgbWU9dGhpcztzZXRUaW1l
b3V0KGZ1bmN0aW9uKCl7bWUuY29uZmlnLnBhcnNlcnM9YnVpbGRQYXJzZXJDYWNoZShtZSwkaGVh
ZGVycyk7Y2FjaGU9YnVpbGRDYWNoZShtZSk7fSwxKTt9KS5iaW5kKCJ1cGRhdGVDZWxsIixmdW5j
dGlvbihlLGNlbGwpe3ZhciBjb25maWc9dGhpcy5jb25maWc7dmFyIHBvcz1bKGNlbGwucGFyZW50
Tm9kZS5yb3dJbmRleC0xKSxjZWxsLmNlbGxJbmRleF07Y2FjaGUubm9ybWFsaXplZFtwb3NbMF1d
W3Bvc1sxXV09Y29uZmlnLnBhcnNlcnNbcG9zWzFdXS5mb3JtYXQoZ2V0RWxlbWVudFRleHQoY29u
ZmlnLGNlbGwpLGNlbGwpO30pLmJpbmQoInNvcnRvbiIsZnVuY3Rpb24oZSxsaXN0KXskKHRoaXMp
LnRyaWdnZXIoInNvcnRTdGFydCIpO2NvbmZpZy5zb3J0TGlzdD1saXN0O3ZhciBzb3J0TGlzdD1j
b25maWcuc29ydExpc3Q7dXBkYXRlSGVhZGVyU29ydENvdW50KHRoaXMsc29ydExpc3QpO3NldEhl
YWRlcnNDc3ModGhpcywkaGVhZGVycyxzb3J0TGlzdCxzb3J0Q1NTKTthcHBlbmRUb1RhYmxlKHRo
aXMsbXVsdGlzb3J0KHRoaXMsc29ydExpc3QsY2FjaGUpKTt9KS5iaW5kKCJhcHBlbmRDYWNoZSIs
ZnVuY3Rpb24oKXthcHBlbmRUb1RhYmxlKHRoaXMsY2FjaGUpO30pLmJpbmQoImFwcGx5V2lkZ2V0
SWQiLGZ1bmN0aW9uKGUsaWQpe2dldFdpZGdldEJ5SWQoaWQpLmZvcm1hdCh0aGlzKTt9KS5iaW5k
KCJhcHBseVdpZGdldHMiLGZ1bmN0aW9uKCl7YXBwbHlXaWRnZXQodGhpcyk7fSk7aWYoJC5tZXRh
ZGF0YSYmKCQodGhpcykubWV0YWRhdGEoKSYmJCh0aGlzKS5tZXRhZGF0YSgpLnNvcnRsaXN0KSl7
Y29uZmlnLnNvcnRMaXN0PSQodGhpcykubWV0YWRhdGEoKS5zb3J0bGlzdDt9aWYoY29uZmlnLnNv
cnRMaXN0Lmxlbmd0aD4wKXskdGhpcy50cmlnZ2VyKCJzb3J0b24iLFtjb25maWcuc29ydExpc3Rd
KTt9YXBwbHlXaWRnZXQodGhpcyk7fSk7fTt0aGlzLmFkZFBhcnNlcj1mdW5jdGlvbihwYXJzZXIp
e3ZhciBsPXBhcnNlcnMubGVuZ3RoLGE9dHJ1ZTtmb3IodmFyIGk9MDtpPGw7aSsrKXtpZihwYXJz
ZXJzW2ldLmlkLnRvTG93ZXJDYXNlKCk9PXBhcnNlci5pZC50b0xvd2VyQ2FzZSgpKXthPWZhbHNl
O319aWYoYSl7cGFyc2Vycy5wdXNoKHBhcnNlcik7fTt9O3RoaXMuYWRkV2lkZ2V0PWZ1bmN0aW9u
KHdpZGdldCl7d2lkZ2V0cy5wdXNoKHdpZGdldCk7fTt0aGlzLmZvcm1hdEZsb2F0PWZ1bmN0aW9u
KHMpe3ZhciBpPXBhcnNlRmxvYXQocyk7cmV0dXJuKGlzTmFOKGkpKT8wOmk7fTt0aGlzLmZvcm1h
dEludD1mdW5jdGlvbihzKXt2YXIgaT1wYXJzZUludChzKTtyZXR1cm4oaXNOYU4oaSkpPzA6aTt9
O3RoaXMuaXNEaWdpdD1mdW5jdGlvbihzLGNvbmZpZyl7cmV0dXJuL15bLStdP1xkKiQvLnRlc3Qo
JC50cmltKHMucmVwbGFjZSgvWywuJ10vZywnJykpKTt9O3RoaXMuY2xlYXJUYWJsZUJvZHk9ZnVu
Y3Rpb24odGFibGUpe2lmKCQuYnJvd3Nlci5tc2llKXtmdW5jdGlvbiBlbXB0eSgpe3doaWxlKHRo
aXMuZmlyc3RDaGlsZCl0aGlzLnJlbW92ZUNoaWxkKHRoaXMuZmlyc3RDaGlsZCk7fWVtcHR5LmFw
cGx5KHRhYmxlLnRCb2RpZXNbMF0pO31lbHNle3RhYmxlLnRCb2RpZXNbMF0uaW5uZXJIVE1MPSIi
O319O319KTskLmZuLmV4dGVuZCh7dGFibGVzb3J0ZXI6JC50YWJsZXNvcnRlci5jb25zdHJ1Y3R9
KTt2YXIgdHM9JC50YWJsZXNvcnRlcjt0cy5hZGRQYXJzZXIoe2lkOiJ0ZXh0IixpczpmdW5jdGlv
bihzKXtyZXR1cm4gdHJ1ZTt9LGZvcm1hdDpmdW5jdGlvbihzKXtyZXR1cm4gJC50cmltKHMudG9M
b2NhbGVMb3dlckNhc2UoKSk7fSx0eXBlOiJ0ZXh0In0pO3RzLmFkZFBhcnNlcih7aWQ6ImRpZ2l0
IixpczpmdW5jdGlvbihzLHRhYmxlKXt2YXIgYz10YWJsZS5jb25maWc7cmV0dXJuICQudGFibGVz
b3J0ZXIuaXNEaWdpdChzLGMpO30sZm9ybWF0OmZ1bmN0aW9uKHMpe3JldHVybiAkLnRhYmxlc29y
dGVyLmZvcm1hdEZsb2F0KHMpO30sdHlwZToibnVtZXJpYyJ9KTt0cy5hZGRQYXJzZXIoe2lkOiJj
dXJyZW5jeSIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuL15bwqMk4oKsPy5dLy50ZXN0KHMpO30sZm9y
bWF0OmZ1bmN0aW9uKHMpe3JldHVybiAkLnRhYmxlc29ydGVyLmZvcm1hdEZsb2F0KHMucmVwbGFj
ZShuZXcgUmVnRXhwKC9bwqMk4oKsXS9nKSwiIikpO30sdHlwZToibnVtZXJpYyJ9KTt0cy5hZGRQ
YXJzZXIoe2lkOiJpcEFkZHJlc3MiLGlzOmZ1bmN0aW9uKHMpe3JldHVybi9eXGR7MiwzfVtcLl1c
ZHsyLDN9W1wuXVxkezIsM31bXC5dXGR7MiwzfSQvLnRlc3Qocyk7fSxmb3JtYXQ6ZnVuY3Rpb24o
cyl7dmFyIGE9cy5zcGxpdCgiLiIpLHI9IiIsbD1hLmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsr
KXt2YXIgaXRlbT1hW2ldO2lmKGl0ZW0ubGVuZ3RoPT0yKXtyKz0iMCIraXRlbTt9ZWxzZXtyKz1p
dGVtO319cmV0dXJuICQudGFibGVzb3J0ZXIuZm9ybWF0RmxvYXQocik7fSx0eXBlOiJudW1lcmlj
In0pO3RzLmFkZFBhcnNlcih7aWQ6InVybCIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuL14oaHR0cHM/
fGZ0cHxmaWxlKTpcL1wvJC8udGVzdChzKTt9LGZvcm1hdDpmdW5jdGlvbihzKXtyZXR1cm4galF1
ZXJ5LnRyaW0ocy5yZXBsYWNlKG5ldyBSZWdFeHAoLyhodHRwcz98ZnRwfGZpbGUpOlwvXC8vKSwn
JykpO30sdHlwZToidGV4dCJ9KTt0cy5hZGRQYXJzZXIoe2lkOiJpc29EYXRlIixpczpmdW5jdGlv
bihzKXtyZXR1cm4vXlxkezR9W1wvLV1cZHsxLDJ9W1wvLV1cZHsxLDJ9JC8udGVzdChzKTt9LGZv
cm1hdDpmdW5jdGlvbihzKXtyZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRGbG9hdCgocyE9IiIp
P25ldyBEYXRlKHMucmVwbGFjZShuZXcgUmVnRXhwKC8tL2cpLCIvIikpLmdldFRpbWUoKToiMCIp
O30sdHlwZToibnVtZXJpYyJ9KTt0cy5hZGRQYXJzZXIoe2lkOiJwZXJjZW50IixpczpmdW5jdGlv
bihzKXtyZXR1cm4vXCUkLy50ZXN0KCQudHJpbShzKSk7fSxmb3JtYXQ6ZnVuY3Rpb24ocyl7cmV0
dXJuICQudGFibGVzb3J0ZXIuZm9ybWF0RmxvYXQocy5yZXBsYWNlKG5ldyBSZWdFeHAoLyUvZyks
IiIpKTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoidXNMb25nRGF0ZSIsaXM6
ZnVuY3Rpb24ocyl7cmV0dXJuIHMubWF0Y2gobmV3IFJlZ0V4cCgvXltBLVphLXpdezMsMTB9XC4/
IFswLTldezEsMn0sIChbMC05XXs0fXwnP1swLTldezJ9KSAoKFswLTJdP1swLTldOlswLTVdWzAt
OV0pfChbMC0xXT9bMC05XTpbMC01XVswLTldXHMoQU18UE0pKSkkLykpO30sZm9ybWF0OmZ1bmN0
aW9uKHMpe3JldHVybiAkLnRhYmxlc29ydGVyLmZvcm1hdEZsb2F0KG5ldyBEYXRlKHMpLmdldFRp
bWUoKSk7fSx0eXBlOiJudW1lcmljIn0pO3RzLmFkZFBhcnNlcih7aWQ6InNob3J0RGF0ZSIsaXM6
ZnVuY3Rpb24ocyl7cmV0dXJuL1xkezEsMn1bXC9cLV1cZHsxLDJ9W1wvXC1dXGR7Miw0fS8udGVz
dChzKTt9LGZvcm1hdDpmdW5jdGlvbihzLHRhYmxlKXt2YXIgYz10YWJsZS5jb25maWc7cz1zLnJl
cGxhY2UoL1wtL2csIi8iKTtpZihjLmRhdGVGb3JtYXQ9PSJ1cyIpe3M9cy5yZXBsYWNlKC8oXGR7
MSwyfSlbXC9cLV0oXGR7MSwyfSlbXC9cLV0oXGR7NH0pLywiJDMvJDEvJDIiKTt9ZWxzZSBpZihj
LmRhdGVGb3JtYXQ9PSJ1ayIpe3M9cy5yZXBsYWNlKC8oXGR7MSwyfSlbXC9cLV0oXGR7MSwyfSlb
XC9cLV0oXGR7NH0pLywiJDMvJDIvJDEiKTt9ZWxzZSBpZihjLmRhdGVGb3JtYXQ9PSJkZC9tbS95
eSJ8fGMuZGF0ZUZvcm1hdD09ImRkLW1tLXl5Iil7cz1zLnJlcGxhY2UoLyhcZHsxLDJ9KVtcL1wt
XShcZHsxLDJ9KVtcL1wtXShcZHsyfSkvLCIkMS8kMi8kMyIpO31yZXR1cm4gJC50YWJsZXNvcnRl
ci5mb3JtYXRGbG9hdChuZXcgRGF0ZShzKS5nZXRUaW1lKCkpO30sdHlwZToibnVtZXJpYyJ9KTt0
cy5hZGRQYXJzZXIoe2lkOiJ0aW1lIixpczpmdW5jdGlvbihzKXtyZXR1cm4vXigoWzAtMl0/WzAt
OV06WzAtNV1bMC05XSl8KFswLTFdP1swLTldOlswLTVdWzAtOV1ccyhhbXxwbSkpKSQvLnRlc3Qo
cyk7fSxmb3JtYXQ6ZnVuY3Rpb24ocyl7cmV0dXJuICQudGFibGVzb3J0ZXIuZm9ybWF0RmxvYXQo
bmV3IERhdGUoIjIwMDAvMDEvMDEgIitzKS5nZXRUaW1lKCkpO30sdHlwZToibnVtZXJpYyJ9KTt0
cy5hZGRQYXJzZXIoe2lkOiJtZXRhZGF0YSIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuIGZhbHNlO30s
Zm9ybWF0OmZ1bmN0aW9uKHMsdGFibGUsY2VsbCl7dmFyIGM9dGFibGUuY29uZmlnLHA9KCFjLnBh
cnNlck1ldGFkYXRhTmFtZSk/J3NvcnRWYWx1ZSc6Yy5wYXJzZXJNZXRhZGF0YU5hbWU7cmV0dXJu
ICQoY2VsbCkubWV0YWRhdGEoKVtwXTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkV2lkZ2V0KHtp
ZDoiemVicmEiLGZvcm1hdDpmdW5jdGlvbih0YWJsZSl7aWYodGFibGUuY29uZmlnLmRlYnVnKXt2
YXIgdGltZT1uZXcgRGF0ZSgpO312YXIgJHRyLHJvdz0tMSxvZGQ7JCgidHI6dmlzaWJsZSIsdGFi
bGUudEJvZGllc1swXSkuZWFjaChmdW5jdGlvbihpKXskdHI9JCh0aGlzKTtpZighJHRyLmhhc0Ns
YXNzKHRhYmxlLmNvbmZpZy5jc3NDaGlsZFJvdykpcm93Kys7b2RkPShyb3clMj09MCk7JHRyLnJl
bW92ZUNsYXNzKHRhYmxlLmNvbmZpZy53aWRnZXRaZWJyYS5jc3Nbb2RkPzA6MV0pLmFkZENsYXNz
KHRhYmxlLmNvbmZpZy53aWRnZXRaZWJyYS5jc3Nbb2RkPzE6MF0pfSk7aWYodGFibGUuY29uZmln
LmRlYnVnKXskLnRhYmxlc29ydGVyLmJlbmNobWFyaygiQXBwbHlpbmcgWmVicmEgd2lkZ2V0Iix0
aW1lKTt9fX0pO30pKGpRdWVyeSk7XxAPdGV4dC9qYXZhc2NyaXB0XxBbZmlsZTovLy9Wb2x1bWVz
L0hERC9Ob25QZXJmb3JjZS9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5
LnRhYmxlc29ydGVyLm1pbi5qc9QFBgcIGBkaG08RAk1icGxpc3QwMNQBAgMEBQY2N1gkdmVyc2lv
blgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagqwcIHyUmLS4vMDEyVSRudWxs2wkKCwwNDg8Q
ERITFBUWFxgZGhscHR5SJDNWJGNsYXNzUiQ2UiQxUiQ5UiQ0UiQ3UiQyUiQ1UiQwUiQ4gAKACoAH
EACACYAFgAAQB4AGEAiACNMgCiEaIyRXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QT2ZpbGU6
Ly8vVm9sdW1lcy9IREQvTm9uUGVyZm9yY2UvV2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3Vy
Y2VzL3N0YXRpc3RpY3MuanPSJygpKlokY2xhc3NuYW1lWCRjbGFzc2VzVU5TVVJMoissVU5TVVJM
WE5TT2JqZWN0I0G3IETeOJN1EAJfEA90ZXh0L2phdmFzY3JpcHQRIvkjf+/////////SJygzNF1O
U1VSTFJlc3BvbnNlojUsXU5TVVJMUmVzcG9uc2VfEA9OU0tleWVkQXJjaGl2ZXLRODlfEBNXZWJS
ZXNvdXJjZVJlc3BvbnNlgAEACAARABoAIwAtADIANwBDAEkAYABjAGoAbQBwAHMAdgB5AHwAfwCC
AIUAhwCJAIsAjQCPAJEAkwCVAJcAmQCbAKIAqgC2ALgAugC8AQ4BEwEeAScBLQEwATYBPwFIAUoB
XAFfAWgBbQF7AX4BjAGeAaEBtwAAAAAAAAIBAAAAAAAAADoAAAAAAAAAAAAAAAAAAAG5TxEi+S8q
CiAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCiAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCiAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCiAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCiAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKi8KCnZhciBTdGF0
aXN0aWNzID0gbmV3IChmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5tYXggPSBmdW5jdGlvbiAodmFs
dWVzKSB7CiAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KE1hdGgsIHZhbHVlcyk7CiAgICB9
CgogICAgdGhpcy5taW4gPSBmdW5jdGlvbiAodmFsdWVzKSB7CiAgICAgICAgcmV0dXJuIE1hdGgu
bWluLmFwcGx5KE1hdGgsIHZhbHVlcyk7CiAgICB9CgogICAgdGhpcy5zdW0gPSBmdW5jdGlvbiAo
dmFsdWVzKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHsg
cmV0dXJuIGEgKyBiOyB9LCAwKTsKICAgIH0KCiAgICB0aGlzLnNxdWFyZVN1bSA9IGZ1bmN0aW9u
ICh2YWx1ZXMpIHsKICAgICAgICByZXR1cm4gdmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoc3VtLCB2
YWx1ZSkgeyByZXR1cm4gc3VtICsgdmFsdWUgKiB2YWx1ZTt9LCAwKTsKICAgIH0KCiAgICAvLyBX
aXRoIHN1bSBhbmQgc3VtIG9mIHNxdWFyZXMsIHdlIGNhbiBjb21wdXRlIHRoZSBzYW1wbGUgc3Rh
bmRhcmQgZGV2aWF0aW9uIGluIE8oMSkuCiAgICAvLyBTZWUgaHR0cHM6Ly9ybml3YS5jb20vMjAx
Mi0xMS0xMC9zYW1wbGUtc3RhbmRhcmQtZGV2aWF0aW9uLWluLXRlcm1zLW9mLXN1bS1hbmQtc3F1
YXJlLXN1bS1vZi1zYW1wbGVzLwogICAgdGhpcy5zYW1wbGVTdGFuZGFyZERldmlhdGlvbiA9IGZ1
bmN0aW9uIChudW1iZXJPZlNhbXBsZXMsIHN1bSwgc3F1YXJlU3VtKSB7CiAgICAgICAgaWYgKG51
bWJlck9mU2FtcGxlcyA8IDIpCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIHJldHVybiBN
YXRoLnNxcnQoc3F1YXJlU3VtIC8gKG51bWJlck9mU2FtcGxlcyAtIDEpCiAgICAgICAgICAgIC0g
c3VtICogc3VtIC8gKG51bWJlck9mU2FtcGxlcyAtIDEpIC8gbnVtYmVyT2ZTYW1wbGVzKTsKICAg
IH0KCiAgICB0aGlzLnN1cHBvcnRlZENvbmZpZGVuY2VMZXZlbHMgPSBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgdmFyIHN1cHBvcnRlZExldmVscyA9IFtdOwogICAgICAgIGZvciAodmFyIHF1YW50aWxl
IGluIHREaXN0cmlidXRpb25JbnZlcnNlQ0RGKQogICAgICAgICAgICBzdXBwb3J0ZWRMZXZlbHMu
cHVzaCgoMSAtICgxIC0gcXVhbnRpbGUpICogMikudG9GaXhlZCgyKSk7CiAgICAgICAgcmV0dXJu
IHN1cHBvcnRlZExldmVsczsKICAgIH0KCiAgICAvLyBDb21wdXRlcyB0aGUgZGVsdGEgZCBzLnQu
IChtZWFuIC0gZCwgbWVhbiArIGQpIGlzIHRoZSBjb25maWRlbmNlIGludGVydmFsIHdpdGggdGhl
IHNwZWNpZmllZCBjb25maWRlbmNlIGxldmVsIGluIE8oMSkuCiAgICB0aGlzLmNvbmZpZGVuY2VJ
bnRlcnZhbERlbHRhID0gZnVuY3Rpb24gKGNvbmZpZGVuY2VMZXZlbCwgbnVtYmVyT2ZTYW1wbGVz
LCBzdW0sIHNxdWFyZVN1bSkgewogICAgICAgIHZhciBwcm9iYWJpbGl0eSA9ICgxIC0gKDEgLSBj
b25maWRlbmNlTGV2ZWwpIC8gMik7CiAgICAgICAgaWYgKCEocHJvYmFiaWxpdHkgaW4gdERpc3Ry
aWJ1dGlvbkludmVyc2VDREYpKSB7CiAgICAgICAgICAgIHRocm93ICdXZSBvbmx5IHN1cHBvcnQg
JyArIHRoaXMuc3VwcG9ydGVkQ29uZmlkZW5jZUxldmVscygpLm1hcCgKICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIChsZXZlbCkgeyByZXR1cm4gbGV2ZWwgKiAxMDAgKyAnJSc7IH0gKS5qb2luKCcs
ICcpICsgJyBjb25maWRlbmNlIGludGVydmFscy4nOwogICAgICAgIH0KICAgICAgICBpZiAobnVt
YmVyT2ZTYW1wbGVzIC0gMiA8IDApCiAgICAgICAgICAgIHJldHVybiBOYU47CgogICAgICAgIHZh
ciBjZGZGb3JQcm9iYWJpbGl0eSA9IHREaXN0cmlidXRpb25JbnZlcnNlQ0RGW3Byb2JhYmlsaXR5
XTsKICAgICAgICB2YXIgZGVncmVlc09mRnJlZWRvbSA9IG51bWJlck9mU2FtcGxlcyAtIDE7CiAg
ICAgICAgaWYgKGRlZ3JlZXNPZkZyZWVkb20gPiBjZGZGb3JQcm9iYWJpbGl0eS5sZW5ndGgpCiAg
ICAgICAgICAgIHRocm93ICdXZSBvbmx5IHN1cHBvcnQgdXAgdG8gJyArIGRlbHRhcy5sZW5ndGgg
KyAnIGRlZ3JlZXMgb2YgZnJlZWRvbSc7CgogICAgICAgIC8vIHREaXN0cmlidXRpb25RdWFudGls
ZShkZWdyZWVzT2ZGcmVlZG9tLCBjb25maWRlbmNlTGV2ZWwpICogc2FtcGxlU3RhbmRhcmREZXZp
YXRpb24gLyBzcXJ0KG51bWJlck9mU2FtcGxlcykgKiBTL3NxcnQobnVtYmVyT2ZTYW1wbGVzKQog
ICAgICAgIHZhciBxdWFudGlsZSA9IGNkZkZvclByb2JhYmlsaXR5W2RlZ3JlZXNPZkZyZWVkb20g
LSAxXTsgLy8gVGhlIGZpcnN0IGVudHJ5IGlzIGZvciB0aGUgb25lIGRlZ3JlZSBvZiBmcmVlZG9t
LgogICAgICAgIHJldHVybiBxdWFudGlsZSAqIHRoaXMuc2FtcGxlU3RhbmRhcmREZXZpYXRpb24o
bnVtYmVyT2ZTYW1wbGVzLCBzdW0sIHNxdWFyZVN1bSkgLyBNYXRoLnNxcnQobnVtYmVyT2ZTYW1w
bGVzKTsKICAgIH0KCiAgICB0aGlzLmNvbmZpZGVuY2VJbnRlcnZhbCA9IGZ1bmN0aW9uICh2YWx1
ZXMsIHByb2JhYmlsaXR5KSB7CiAgICAgICAgdmFyIHN1bSA9IHRoaXMuc3VtKHZhbHVlcyk7CiAg
ICAgICAgdmFyIG1lYW4gPSBzdW0gLyB2YWx1ZXMubGVuZ3RoOwogICAgICAgIHZhciBkZWx0YSA9
IHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEocHJvYmFiaWxpdHkgfHwgMC45NSwgdmFsdWVz
Lmxlbmd0aCwgc3VtLCB0aGlzLnNxdWFyZVN1bSh2YWx1ZXMpKTsKICAgICAgICByZXR1cm4gW21l
YW4gLSBkZWx0YSwgbWVhbiArIGRlbHRhXTsKICAgIH0KCiAgICAvLyBTZWUgaHR0cDovL2VuLndp
a2lwZWRpYS5vcmcvd2lraS9TdHVkZW50J3NfdC1kaXN0cmlidXRpb24jVGFibGVfb2Zfc2VsZWN0
ZWRfdmFsdWVzCiAgICAvLyBUaGlzIHRhYmxlIGNvbnRhaW5zIG9uZSBzaWRlZCAoYS5rLmEuIHRh
aWwpIHZhbHVlcy4KICAgIHZhciB0RGlzdHJpYnV0aW9uSW52ZXJzZUNERiA9IHsKICAgICAgICAw
Ljk6IFsKICAgICAgICAgICAgMy4wNzc2ODQsIDEuODg1NjE4LCAxLjYzNzc0NCwgMS41MzMyMDYs
IDEuNDc1ODg0LCAxLjQzOTc1NiwgMS40MTQ5MjQsIDEuMzk2ODE1LCAxLjM4MzAyOSwgMS4zNzIx
ODQsCiAgICAgICAgICAgIDEuMzYzNDMwLCAxLjM1NjIxNywgMS4zNTAxNzEsIDEuMzQ1MDMwLCAx
LjM0MDYwNiwgMS4zMzY3NTcsIDEuMzMzMzc5LCAxLjMzMDM5MSwgMS4zMjc3MjgsIDEuMzI1MzQx
LAogICAgICAgICAgICAxLjMyMzE4OCwgMS4zMjEyMzcsIDEuMzE5NDYwLCAxLjMxNzgzNiwgMS4z
MTYzNDUsIDEuMzE0OTcyLCAxLjMxMzcwMywgMS4zMTI1MjcsIDEuMzExNDM0LCAxLjMxMDQxNSwK
ICAgICAgICAgICAgMS4zMDk0NjQsIDEuMzA4NTczLCAxLjMwNzczNywgMS4zMDY5NTIsIDEuMzA2
MjEyLCAxLjMwNTUxNCwgMS4zMDQ4NTQsIDEuMzA0MjMwLCAxLjMwMzYzOSwgMS4zMDMwNzcsCiAg
ICAgICAgICAgIDEuMzAyNTQzLCAxLjMwMjAzNSwgMS4zMDE1NTIsIDEuMzAxMDkwLCAxLjMwMDY0
OSwgMS4zMDAyMjgsIDEuMjk5ODI1LCAxLjI5OTQzOSwgMS4yOTkwNjksIDEuMjk4NzE0LAoKICAg
ICAgICAgICAgMS4yOTgzNzMsIDEuMjk4MDQ1LCAxLjI5NzczMCwgMS4yOTc0MjYsIDEuMjk3MTM0
LCAxLjI5Njg1MywgMS4yOTY1ODEsIDEuMjk2MzE5LCAxLjI5NjA2NiwgMS4yOTU4MjEsCiAgICAg
ICAgICAgIDEuMjk1NTg1LCAxLjI5NTM1NiwgMS4yOTUxMzQsIDEuMjk0OTIwLCAxLjI5NDcxMiwg
MS4yOTQ1MTEsIDEuMjk0MzE1LCAxLjI5NDEyNiwgMS4yOTM5NDIsIDEuMjkzNzYzLAogICAgICAg
ICAgICAxLjI5MzU4OSwgMS4yOTM0MjEsIDEuMjkzMjU2LCAxLjI5MzA5NywgMS4yOTI5NDEsIDEu
MjkyNzkwLCAxLjI5MjY0MywgMS4yOTI1MDAsIDEuMjkyMzYwLCAxLjI5MjIyNCwKICAgICAgICAg
ICAgMS4yOTIwOTEsIDEuMjkxOTYxLCAxLjI5MTgzNSwgMS4yOTE3MTEsIDEuMjkxNTkxLCAxLjI5
MTQ3MywgMS4yOTEzNTgsIDEuMjkxMjQ2LCAxLjI5MTEzNiwgMS4yOTEwMjksCiAgICAgICAgICAg
IDEuMjkwOTI0LCAxLjI5MDgyMSwgMS4yOTA3MjEsIDEuMjkwNjIzLCAxLjI5MDUyNywgMS4yOTA0
MzIsIDEuMjkwMzQwLCAxLjI5MDI1MCwgMS4yOTAxNjEsIDEuMjkwMDc1XSwKICAgICAgICAwLjk1
OiBbCiAgICAgICAgICAgIDYuMzEzNzUyLCAyLjkxOTk4NiwgMi4zNTMzNjMsIDIuMTMxODQ3LCAy
LjAxNTA0OCwgMS45NDMxODAsIDEuODk0NTc5LCAxLjg1OTU0OCwgMS44MzMxMTMsIDEuODEyNDYx
LAogICAgICAgICAgICAxLjc5NTg4NSwgMS43ODIyODgsIDEuNzcwOTMzLCAxLjc2MTMxMCwgMS43
NTMwNTAsIDEuNzQ1ODg0LCAxLjczOTYwNywgMS43MzQwNjQsIDEuNzI5MTMzLCAxLjcyNDcxOCwK
ICAgICAgICAgICAgMS43MjA3NDMsIDEuNzE3MTQ0LCAxLjcxMzg3MiwgMS43MTA4ODIsIDEuNzA4
MTQxLCAxLjcwNTYxOCwgMS43MDMyODgsIDEuNzAxMTMxLCAxLjY5OTEyNywgMS42OTcyNjEsCiAg
ICAgICAgICAgIDEuNjk1NTE5LCAxLjY5Mzg4OSwgMS42OTIzNjAsIDEuNjkwOTI0LCAxLjY4OTU3
MiwgMS42ODgyOTgsIDEuNjg3MDk0LCAxLjY4NTk1NCwgMS42ODQ4NzUsIDEuNjgzODUxLAogICAg
ICAgICAgICAxLjY4Mjg3OCwgMS42ODE5NTIsIDEuNjgxMDcxLCAxLjY4MDIzMCwgMS42Nzk0Mjcs
IDEuNjc4NjYwLCAxLjY3NzkyNywgMS42NzcyMjQsIDEuNjc2NTUxLCAxLjY3NTkwNSwKCiAgICAg
ICAgICAgIDEuNjc1Mjg1LCAxLjY3NDY4OSwgMS42NzQxMTYsIDEuNjczNTY1LCAxLjY3MzAzNCwg
MS42NzI1MjIsIDEuNjcyMDI5LCAxLjY3MTU1MywgMS42NzEwOTMsIDEuNjcwNjQ5LAogICAgICAg
ICAgICAxLjY3MDIxOSwgMS42Njk4MDQsIDEuNjY5NDAyLCAxLjY2OTAxMywgMS42Njg2MzYsIDEu
NjY4MjcxLCAxLjY2NzkxNiwgMS42Njc1NzIsIDEuNjY3MjM5LCAxLjY2NjkxNCwKICAgICAgICAg
ICAgMS42NjY2MDAsIDEuNjY2Mjk0LCAxLjY2NTk5NiwgMS42NjU3MDcsIDEuNjY1NDI1LCAxLjY2
NTE1MSwgMS42NjQ4ODUsIDEuNjY0NjI1LCAxLjY2NDM3MSwgMS42NjQxMjUsCiAgICAgICAgICAg
IDEuNjYzODg0LCAxLjY2MzY0OSwgMS42NjM0MjAsIDEuNjYzMTk3LCAxLjY2Mjk3OCwgMS42NjI3
NjUsIDEuNjYyNTU3LCAxLjY2MjM1NCwgMS42NjIxNTUsIDEuNjYxOTYxLAogICAgICAgICAgICAx
LjY2MTc3MSwgMS42NjE1ODUsIDEuNjYxNDA0LCAxLjY2MTIyNiwgMS42NjEwNTIsIDEuNjYwODgx
LCAxLjY2MDcxNSwgMS42NjA1NTEsIDEuNjYwMzkxLCAxLjY2MDIzNF0sCiAgICAgICAgMC45NzU6
IFsKICAgICAgICAgICAgMTIuNzA2MjA1LCA0LjMwMjY1MywgMy4xODI0NDYsIDIuNzc2NDQ1LCAy
LjU3MDU4MiwgMi40NDY5MTIsIDIuMzY0NjI0LCAyLjMwNjAwNCwgMi4yNjIxNTcsIDIuMjI4MTM5
LAogICAgICAgICAgICAyLjIwMDk4NSwgMi4xNzg4MTMsIDIuMTYwMzY5LCAyLjE0NDc4NywgMi4x
MzE0NTAsIDIuMTE5OTA1LCAyLjEwOTgxNiwgMi4xMDA5MjIsIDIuMDkzMDI0LCAyLjA4NTk2MywK
ICAgICAgICAgICAgMi4wNzk2MTQsIDIuMDczODczLCAyLjA2ODY1OCwgMi4wNjM4OTksIDIuMDU5
NTM5LCAyLjA1NTUyOSwgMi4wNTE4MzEsIDIuMDQ4NDA3LCAyLjA0NTIzMCwgMi4wNDIyNzIsCiAg
ICAgICAgICAgIDIuMDM5NTEzLCAyLjAzNjkzMywgMi4wMzQ1MTUsIDIuMDMyMjQ1LCAyLjAzMDEw
OCwgMi4wMjgwOTQsIDIuMDI2MTkyLCAyLjAyNDM5NCwgMi4wMjI2OTEsIDIuMDIxMDc1LAogICAg
ICAgICAgICAyLjAxOTU0MSwgMi4wMTgwODIsIDIuMDE2NjkyLCAyLjAxNTM2OCwgMi4wMTQxMDMs
IDIuMDEyODk2LCAyLjAxMTc0MSwgMi4wMTA2MzUsIDIuMDA5NTc1LCAyLjAwODU1OSwKCiAgICAg
ICAgICAgIDIuMDA3NTg0LCAyLjAwNjY0NywgMi4wMDU3NDYsIDIuMDA0ODc5LCAyLjAwNDA0NSwg
Mi4wMDMyNDEsIDIuMDAyNDY1LCAyLjAwMTcxNywgMi4wMDA5OTUsIDIuMDAwMjk4LAogICAgICAg
ICAgICAxLjk5OTYyNCwgMS45OTg5NzIsIDEuOTk4MzQxLCAxLjk5NzczMCwgMS45OTcxMzgsIDEu
OTk2NTY0LCAxLjk5NjAwOCwgMS45OTU0NjksIDEuOTk0OTQ1LCAxLjk5NDQzNywKICAgICAgICAg
ICAgMS45OTM5NDMsIDEuOTkzNDY0LCAxLjk5Mjk5NywgMS45OTI1NDMsIDEuOTkyMTAyLCAxLjk5
MTY3MywgMS45OTEyNTQsIDEuOTkwODQ3LCAxLjk5MDQ1MCwgMS45OTAwNjMsCiAgICAgICAgICAg
IDEuOTg5Njg2LCAxLjk4OTMxOSwgMS45ODg5NjAsIDEuOTg4NjEwLCAxLjk4ODI2OCwgMS45ODc5
MzQsIDEuOTg3NjA4LCAxLjk4NzI5MCwgMS45ODY5NzksIDEuOTg2Njc1LAogICAgICAgICAgICAx
Ljk4NjM3NywgMS45ODYwODYsIDEuOTg1ODAyLCAxLjk4NTUyMywgMS45ODUyNTEsIDEuOTg0OTg0
LCAxLjk4NDcyMywgMS45ODQ0NjcsIDEuOTg0MjE3LCAxLjk4Mzk3Ml0sCiAgICAgICAgMC45OTog
WwogICAgICAgICAgICAzMS44MjA1MTYsIDYuOTY0NTU3LCA0LjU0MDcwMywgMy43NDY5NDcsIDMu
MzY0OTMwLCAzLjE0MjY2OCwgMi45OTc5NTIsIDIuODk2NDU5LCAyLjgyMTQzOCwgMi43NjM3Njks
CiAgICAgICAgICAgIDIuNzE4MDc5LCAyLjY4MDk5OCwgMi42NTAzMDksIDIuNjI0NDk0LCAyLjYw
MjQ4MCwgMi41ODM0ODcsIDIuNTY2OTM0LCAyLjU1MjM4MCwgMi41Mzk0ODMsIDIuNTI3OTc3LAog
ICAgICAgICAgICAyLjUxNzY0OCwgMi41MDgzMjUsIDIuNDk5ODY3LCAyLjQ5MjE1OSwgMi40ODUx
MDcsIDIuNDc4NjMwLCAyLjQ3MjY2MCwgMi40NjcxNDAsIDIuNDYyMDIxLCAyLjQ1NzI2MiwKICAg
ICAgICAgICAgMi40NTI4MjQsIDIuNDQ4Njc4LCAyLjQ0NDc5NCwgMi40NDExNTAsIDIuNDM3NzIz
LCAyLjQzNDQ5NCwgMi40MzE0NDcsIDIuNDI4NTY4LCAyLjQyNTg0MSwgMi40MjMyNTcsCiAgICAg
ICAgICAgIDIuNDIwODAzLCAyLjQxODQ3MCwgMi40MTYyNTAsIDIuNDE0MTM0LCAyLjQxMjExNiwg
Mi40MTAxODgsIDIuNDA4MzQ1LCAyLjQwNjU4MSwgMi40MDQ4OTIsIDIuNDAzMjcyLAoKICAgICAg
ICAgICAgMi40MDE3MTgsIDIuNDAwMjI1LCAyLjM5ODc5MCwgMi4zOTc0MTAsIDIuMzk2MDgxLCAy
LjM5NDgwMSwgMi4zOTM1NjgsIDIuMzkyMzc3LCAyLjM5MTIyOSwgMi4zOTAxMTksCiAgICAgICAg
ICAgIDIuMzg5MDQ3LCAyLjM4ODAxMSwgMi4zODcwMDgsIDIuMzg2MDM3LCAyLjM4NTA5NywgMi4z
ODQxODYsIDIuMzgzMzAyLCAyLjM4MjQ0NiwgMi4zODE2MTUsIDIuMzgwODA3LAogICAgICAgICAg
ICAyLjM4MDAyNCwgMi4zNzkyNjIsIDIuMzc4NTIyLCAyLjM3NzgwMiwgMi4zNzcxMDIsIDIuMzc2
NDIwLCAyLjM3NTc1NywgMi4zNzUxMTEsIDIuMzc0NDgyLCAyLjM3Mzg2OCwKICAgICAgICAgICAg
Mi4zNzMyNzAsIDIuMzcyNjg3LCAyLjM3MjExOSwgMi4zNzE1NjQsIDIuMzcxMDIyLCAyLjM3MDQ5
MywgMi4zNjk5NzcsIDIuMzY5NDcyLCAyLjM2ODk3OSwgMi4zNjg0OTcsCiAgICAgICAgICAgIDIu
MzY4MDI2LCAyLjM2NzU2NiwgMi4zNjcxMTUsIDIuMzY2Njc0LCAyLjM2NjI0MywgMi4zNjU4MjEs
IDIuMzY1NDA3LCAyLjM2NTAwMiwgMi4zNjQ2MDYsIDIuMzY0MjE3XQogICAgfTsKCn0pKCk7Cgpp
ZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykgewogICAgZm9yICh2YXIga2V5IGluIFN0
YXRpc3RpY3MpCiAgICAgICAgbW9kdWxlLmV4cG9ydHNba2V5XSA9IFN0YXRpc3RpY3Nba2V5XTsK
fQpfEA90ZXh0L2phdmFzY3JpcHRfEE9maWxlOi8vL1ZvbHVtZXMvSEREL05vblBlcmZvcmNlL1dl
YktpdC9QZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpz1QYHHR4IHyAhIiNf
EBtXZWJSZXNvdXJjZVRleHRFbmNvZGluZ05hbWVfEBRXZWJSZXNvdXJjZUZyYW1lTmFtZU8Rw1U8
IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD4KPHRpdGxlPldlYktpdCBQZXJmb3JtYW5jZSBUZXN0
IFJlc3VsdHM8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKc2VjdGlvbiB7CiAgICBi
YWNrZ3JvdW5kOiB3aGl0ZTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRp
dmU7Cn0KCi50aW1lLXBsb3RzIHsKICAgIHBhZGRpbmctbGVmdDogMjVweDsKfQoKLnRpbWUtcGxv
dHMgPiBkaXYgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDkwcHg7CiAg
ICBoZWlnaHQ6IDQwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cn0KCnNlY3Rpb24gaDEgewog
ICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxZW07Cn0KCnNlY3Rpb24gLnRv
b2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwog
ICAgYmFja2dyb3VuZDogI2ZmY2M2NjsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIHBhZGRp
bmc6IDBweCA1cHg7Cn0KCmJvZHkgewogICAgcGFkZGluZzogMHB4OwogICAgbWFyZ2luOiAwcHg7
CiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKfQoKdGFibGUgewogICAgYmFja2dyb3VuZDog
d2hpdGU7CiAgICB3aWR0aDogMTAwJTsKfQoKdGFibGUsIHRkLCB0aCB7CiAgICBib3JkZXItY29s
bGFwc2U6IGNvbGxhcHNlOwogICAgcGFkZGluZzogNXB4Owp9Cgp0ci5ldmVuIHsKICAgIGJhY2tn
cm91bmQ6ICNmNmY2ZjY7Cn0KCnRhYmxlIHRkIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAg
IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cn0KCnRoLCB0ZCB7CiAgICBjdXJzb3I6IHBvaW50ZXI7
CiAgICBjdXJzb3I6IGhhbmQ7Cn0KCnRoIHsKICAgIGJhY2tncm91bmQ6ICNlNmVlZWU7CiAgICBi
YWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9t
LCBmcm9tKHJnYigyNDQsIDI0NCwgMjQ0KSksIHRvKHJnYigyMTcsIDIxNywgMjE3KSkpOwogICAg
Ym9yZGVyOiAxcHggc29saWQgI2NjYzsKfQoKdGg6YWZ0ZXIgewogICAgY29udGVudDogJyBcMjVC
OCc7Cn0KCnRoLmhlYWRlclNvcnRVcDphZnRlciB7CiAgICBjb250ZW50OiAnIFwyNUJFJzsKfQoK
dGguaGVhZGVyU29ydERvd246YWZ0ZXIgewogICAgY29udGVudDogJyBcMjVCNCc7Cn0KCnRkLmNv
bXBhcmlzb24sIHRkLnJlc3VsdCB7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKdGQuYmV0dGVy
IHsKICAgIGNvbG9yOiAjNmM2Owp9Cgp0ZC53b3JzZSB7CiAgICBjb2xvcjogI2M2NjsKfQoKdGQu
bWlzc2luZyB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5jaGVja2JveCB7CiAgICBkaXNw
bGF5OiBpbmxpbmUtYmxvY2s7CiAgICBiYWNrZ3JvdW5kOiAjZWVlOwogICAgYmFja2dyb3VuZDog
LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgZnJvbShyZ2Io
MjIwLCAyMjAsIDIyMCkpLCB0byhyZ2IoMjAwLCAyMDAsIDIwMCkpKTsKICAgIGJvcmRlcjogaW5z
ZXQgMXB4ICNkZGQ7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBtYXJnaW46IDEwcHg7CiAg
ICBmb250LXNpemU6IHNtYWxsOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY3Vyc29yOiBoYW5k
OwogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9
CgouY2hlY2tib3ggc3BhbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5lLWhl
aWdodDogMTAwJTsKICAgIHBhZGRpbmc6IDVweCA4cHg7CiAgICBib3JkZXI6IG91dHNldCAxcHgg
dHJhbnNwYXJlbnQ7Cn0KCi5jaGVja2JveCAuY2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZTZl
ZWVlOwogICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBs
ZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMjU1LCAyNTUsIDI1NSkpLCB0byhyZ2IoMjM1LCAyMzUsIDIz
NSkpKTsKICAgIGJvcmRlcjogb3V0c2V0IDFweCAjZWVlOwogICAgYm9yZGVyLXJhZGl1czogNXB4
Owp9Cgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IHN0eWxlPSJwYWRkaW5nOiAwIDEwcHg7
Ij4KUmVzdWx0IDxzcGFuIGlkPSJ0aW1lLW1lbW9yeSIgY2xhc3M9ImNoZWNrYm94Ij48c3BhbiBj
bGFzcz0iY2hlY2tlZCI+VGltZTwvc3Bhbj48c3Bhbj5NZW1vcnk8L3NwYW4+PC9zcGFuPgpSZWZl
cmVuY2UgPHNwYW4gaWQ9InJlZmVyZW5jZSIgY2xhc3M9ImNoZWNrYm94Ij48c3BhbiB2YWx1ZT0i
MCIgY2xhc3M9ImNoZWNrZWQiPnIxNDg2NTkg4oCQIFdpdGhvdXQgcGF0Y2g8L3NwYW4+PHNwYW4g
dmFsdWU9IjEiPnIxNDg2NTkg4oCQIFdpdGhvdXQgcGF0Y2g8L3NwYW4+PHNwYW4gdmFsdWU9IjIi
PnIxNDg2NTkg4oCQIFdpdGhvdXQgcGF0Y2g8L3NwYW4+PHNwYW4gdmFsdWU9IjMiPnIxNDg2NTkg
4oCQIFdpdGhvdXQgcGF0Y2g8L3NwYW4+PHNwYW4gdmFsdWU9IjQiPnIxNDg2NTkg4oCQIFdpdGhv
dXQgcGF0Y2g8L3NwYW4+PHNwYW4gdmFsdWU9IjUiPnIxNDg2NTkg4oCQIFdpdGggcGF0Y2g8L3Nw
YW4+PHNwYW4gdmFsdWU9IjYiPnIxNDg2NTkg4oCQIFdpdGggcGF0Y2g8L3NwYW4+PHNwYW4gdmFs
dWU9IjciPnIxNDg2NTkg4oCQIFdpdGggcGF0Y2g8L3NwYW4+PHNwYW4gdmFsdWU9IjgiPnIxNDg2
NTkg4oCQIFdpdGggcGF0Y2g8L3NwYW4+PHNwYW4gdmFsdWU9IjkiPnIxNDg2NTkg4oCQIFdpdGgg
cGF0Y2g8L3NwYW4+PC9zcGFuPgo8L2Rpdj4KPHRhYmxlIGlkPSJjb250YWluZXIiPjx0aGVhZD48
dHI+PHRoIGNsYXNzPSJoZWFkZXIiPlRlc3Q8L3RoPjx0aCBjbGFzcz0iaGVhZGVyIj5Vbml0PC90
aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9Intzb3J0ZXI6ICdjb21wYXJpc29uJ30gaGVhZGVyIj5y
MTQ4NjU5IOKAkCBXaXRob3V0IHBhdGNoPC90aD48dGggY29sc3Bhbj0iMyIgY2xhc3M9Intzb3J0
ZXI6ICdjb21wYXJpc29uJ30gaGVhZGVyIj5yMTQ4NjU5IOKAkCBXaXRob3V0IHBhdGNoPC90aD48
dGggY29sc3Bhbj0iMyIgY2xhc3M9Intzb3J0ZXI6ICdjb21wYXJpc29uJ30gaGVhZGVyIj5yMTQ4
NjU5IOKAkCBXaXRob3V0IHBhdGNoPC90aD48dGggY29sc3Bhbj0iMyIgY2xhc3M9Intzb3J0ZXI6
ICdjb21wYXJpc29uJ30gaGVhZGVyIj5yMTQ4NjU5IOKAkCBXaXRob3V0IHBhdGNoPC90aD48dGgg
Y29sc3Bhbj0iMyIgY2xhc3M9Intzb3J0ZXI6ICdjb21wYXJpc29uJ30gaGVhZGVyIj5yMTQ4NjU5
IOKAkCBXaXRob3V0IHBhdGNoPC90aD48dGggY29sc3Bhbj0iMyIgY2xhc3M9Intzb3J0ZXI6ICdj
b21wYXJpc29uJ30gaGVhZGVyIj5yMTQ4NjU5IOKAkCBXaXRoIHBhdGNoPC90aD48dGggY29sc3Bh
bj0iMyIgY2xhc3M9Intzb3J0ZXI6ICdjb21wYXJpc29uJ30gaGVhZGVyIj5yMTQ4NjU5IOKAkCBX
aXRoIHBhdGNoPC90aD48dGggY29sc3Bhbj0iMyIgY2xhc3M9Intzb3J0ZXI6ICdjb21wYXJpc29u
J30gaGVhZGVyIj5yMTQ4NjU5IOKAkCBXaXRoIHBhdGNoPC90aD48dGggY29sc3Bhbj0iMyIgY2xh
c3M9Intzb3J0ZXI6ICdjb21wYXJpc29uJ30gaGVhZGVyIj5yMTQ4NjU5IOKAkCBXaXRoIHBhdGNo
PC90aD48dGggY29sc3Bhbj0iMyIgY2xhc3M9Intzb3J0ZXI6ICdjb21wYXJpc29uJ30gaGVhZGVy
Ij5yMTQ4NjU5IOKAkCBXaXRoIHBhdGNoPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0ciBjbGFz
cz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9QYXJzZXIvaHRtbDUtZnVsbC1yZW5kZXI6VGltZTwv
dGQ+PHRkIGNsYXNzPSJ1bml0Ij5tczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0x
ODAuOTksIG1pbj00MjE3LjAwLCBtYXg9NTAzNS4wMApzbG9wZT0tMS4yMCwgUl4yPTAuMDAiPjQ1
NTEuMTA8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0x
ODAuOTksIG1pbj00MjE3LjAwLCBtYXg9NTAzNS4wMApzbG9wZT0tMS4yMCwgUl4yPTAuMDAiPsKx
IDMuOTglPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTE4My4wOCwgbWluPTQyMjEu
MDAsIG1heD01MDQ3LjAwCnNsb3BlPS0wLjg4LCBSXjI9MC4wMCI+NDU2MS40MDxzcGFuIHN0eWxl
PSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2
YWxEZWx0YSIgdGl0bGU9Is+DPTE4My4wOCwgbWluPTQyMjEuMDAsIG1heD01MDQ3LjAwCnNsb3Bl
PS0wLjg4LCBSXjI9MC4wMCI+wrEgNC4wMSU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90
ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTE4MS4wOCwgbWluPTQyMjMuMDAsIG1heD01
MDQ0LjAwCnNsb3BlPS0xLjQzLCBSXjI9MC4wMCI+NDU1OC40NTxzcGFuIHN0eWxlPSJkaXNwbGF5
OiBub25lIj58PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIg
dGl0bGU9Is+DPTE4MS4wOCwgbWluPTQyMjMuMDAsIG1heD01MDQ0LjAwCnNsb3BlPS0xLjQzLCBS
XjI9MC4wMCI+wrEgMy45NyU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90ZD48dGQgY2xh
c3M9InJlc3VsdCIgdGl0bGU9Is+DPTE4Mi42OCwgbWluPTQyMzUuMDAsIG1heD01MDUwLjAwCnNs
b3BlPS0wLjE1LCBSXjI9MC4wMCI+NDU2OC4xMDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58
PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+D
PTE4Mi42OCwgbWluPTQyMzUuMDAsIG1heD01MDUwLjAwCnNsb3BlPS0wLjE1LCBSXjI9MC4wMCI+
wrEgNC4wMCU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90ZD48dGQgY2xhc3M9InJlc3Vs
dCIgdGl0bGU9Is+DPTE4NC40MiwgbWluPTQyMTUuMDAsIG1heD01MDU1LjAwCnNsb3BlPS0xLjI3
LCBSXjI9MC4wMCI+NDU1NS4xMDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwv
dGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTE4NC40Miwg
bWluPTQyMTUuMDAsIG1heD01MDU1LjAwCnNsb3BlPS0xLjI3LCBSXjI9MC4wMCI+wrEgNC4wNSU8
L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9
Is+DPTE4MS4xNywgbWluPTQyNTMuMDAsIG1heD01MDUxLjAwCnNsb3BlPTAuMzEsIFJeMj0wLjAw
Ij40NTc1LjY1PHNwYW4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPnw8L3NwYW4+PC90ZD48dGQgY2xh
c3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MTgxLjE3LCBtaW49NDI1My4w
MCwgbWF4PTUwNTEuMDAKc2xvcGU9MC4zMSwgUl4yPTAuMDAiPsKxIDMuOTYlPC90ZD48dGQgY2xh
c3M9ImNvbXBhcmlzb24iPjwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0xODEuODcs
IG1pbj00MjQ3LjAwLCBtYXg9NTA2Mi4wMApzbG9wZT0xLjAzLCBSXjI9MC4wMCI+NDU3Ny4yNTxz
cGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRl
bmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTE4MS44NywgbWluPTQyNDcuMDAsIG1heD01MDYy
LjAwCnNsb3BlPTEuMDMsIFJeMj0wLjAwIj7CsSAzLjk3JTwvdGQ+PHRkIGNsYXNzPSJjb21wYXJp
c29uIj48L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MTg2Ljc5LCBtaW49NDI1Mi4w
MCwgbWF4PTUyMzkuMDAKc2xvcGU9LTQuMDQsIFJeMj0wLjAwIj40NTk4LjIwPHNwYW4gc3R5bGU9
ImRpc3BsYXk6IG5vbmUiPnw8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZh
bERlbHRhIiB0aXRsZT0iz4M9MTg2Ljc5LCBtaW49NDI1Mi4wMCwgbWF4PTUyMzkuMDAKc2xvcGU9
LTQuMDQsIFJeMj0wLjAwIj7CsSA0LjA2JTwvdGQ+PHRkIGNsYXNzPSJjb21wYXJpc29uIj48L3Rk
Pjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MTg0LjA4LCBtaW49NDI1MS4wMCwgbWF4PTUw
NzkuMDAKc2xvcGU9MS42OCwgUl4yPTAuMDAiPjQ1ODQuNzA8c3BhbiBzdHlsZT0iZGlzcGxheTog
bm9uZSI+fDwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRp
dGxlPSLPgz0xODQuMDgsIG1pbj00MjUxLjAwLCBtYXg9NTA3OS4wMApzbG9wZT0xLjY4LCBSXjI9
MC4wMCI+wrEgNC4wMSU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90ZD48dGQgY2xhc3M9
InJlc3VsdCIgdGl0bGU9Is+DPTE4Ny42NiwgbWluPTQyMzcuMDAsIG1heD01MzMwLjAwCnNsb3Bl
PS0yLjQzLCBSXjI9MC4wMCI+NDYwOC4xMDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9z
cGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTE4
Ny42NiwgbWluPTQyMzcuMDAsIG1heD01MzMwLjAwCnNsb3BlPS0yLjQzLCBSXjI9MC4wMCI+wrEg
NC4wNyU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90ZD48L3RyPjx0ciBjbGFzcz0iZXZl
biI+PHRkIGNsYXNzPSJ0ZXN0Ij4vUGFyc2VyL2lubmVySFRNTC1zZXR0ZXI6UnVuczwvdGQ+PHRk
IGNsYXNzPSJ1bml0Ij5ydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9My4x
OSwgbWluPTIyMi43NywgbWF4PTI0Mi40MgpzbG9wZT0wLjcyLCBSXjI9MC4zOSI+MjM1LjIxPC90
ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9My4xOSwgbWlu
PTIyMi43NywgbWF4PTI0Mi40MgpzbG9wZT0wLjcyLCBSXjI9MC4zOSI+wrEgMS4zNiU8L3RkPjx0
ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MS4xNSwgbWluPTIzMC43NywgbWF4PTI0MC4xMApz
bG9wZT0tMC4wOCwgUl4yPTAuMDQiPjIzNi42NTxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58
PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+D
PTEuMTUsIG1pbj0yMzAuNzcsIG1heD0yNDAuMTAKc2xvcGU9LTAuMDgsIFJeMj0wLjA0Ij7CsSAw
LjQ4JTwvdGQ+PHRkIGNsYXNzPSJjb21wYXJpc29uIj48L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0
aXRsZT0iz4M9MS43MSwgbWluPTIyOS41OSwgbWF4PTI0My4zMQpzbG9wZT0tMC4wOCwgUl4yPTAu
MDIiPjIzNy42ODxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwvdGQ+PHRkIGNs
YXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTEuNzEsIG1pbj0yMjkuNTks
IG1heD0yNDMuMzEKc2xvcGU9LTAuMDgsIFJeMj0wLjAyIj7CsSAwLjcyJTwvdGQ+PHRkIGNsYXNz
PSJjb21wYXJpc29uIj48L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC43NiwgbWlu
PTIzMy40NiwgbWF4PTIzOC43MwpzbG9wZT0wLjEzLCBSXjI9MC4yMSI+MjM2LjE4PHNwYW4gc3R5
bGU9ImRpc3BsYXk6IG5vbmUiPnw8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRl
cnZhbERlbHRhIiB0aXRsZT0iz4M9MC43NiwgbWluPTIzMy40NiwgbWF4PTIzOC43MwpzbG9wZT0w
LjEzLCBSXjI9MC4yMSI+wrEgMC4zMiU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90ZD48
dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuNzgsIG1pbj0yMzUuMjksIG1heD0yNDAuMDAK
c2xvcGU9LTAuMTQsIFJeMj0wLjI1Ij4yMzguMjY8c3BhbiBzdHlsZT0iZGlzcGxheTogbm9uZSI+
fDwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLP
gz0wLjc4LCBtaW49MjM1LjI5LCBtYXg9MjQwLjAwCnNsb3BlPS0wLjE0LCBSXjI9MC4yNSI+wrEg
MC4zMyU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90ZD48dGQgY2xhc3M9InJlc3VsdCIg
dGl0bGU9Is+DPTAuNzYsIG1pbj0yMzIuMjYsIG1heD0yMzguNDEKc2xvcGU9MC4wNiwgUl4yPTAu
MDQiPjIzNi4xNTxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwvdGQ+PHRkIGNs
YXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuNzYsIG1pbj0yMzIuMjYs
IG1heD0yMzguNDEKc2xvcGU9MC4wNiwgUl4yPTAuMDQiPsKxIDAuMzIlPC90ZD48dGQgY2xhc3M9
ImNvbXBhcmlzb24iPjwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0xLjQ4LCBtaW49
MjMyLjI2LCBtYXg9MjQzLjAxCnNsb3BlPS0wLjI0LCBSXjI9MC4yMCI+MjM5LjA0PHNwYW4gc3R5
bGU9ImRpc3BsYXk6IG5vbmUiPnwxLjYzJSBCZXR0ZXI8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImNv
bmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MS40OCwgbWluPTIzMi4yNiwgbWF4PTI0
My4wMQpzbG9wZT0tMC4yNCwgUl4yPTAuMjAiPsKxIDAuNjIlPC90ZD48dGQgY2xhc3M9ImNvbXBh
cmlzb24gYmV0dGVyIj4xLjYzJSBCZXR0ZXI8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0i
z4M9MC41NSwgbWluPTIzNC4wNywgbWF4PTIzOS4wNApzbG9wZT0wLjAzLCBSXjI9MC4wMiI+MjM3
LjIxPHNwYW4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPnw8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImNv
bmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC41NSwgbWluPTIzNC4wNywgbWF4PTIz
OS4wNApzbG9wZT0wLjAzLCBSXjI9MC4wMiI+wrEgMC4yMyU8L3RkPjx0ZCBjbGFzcz0iY29tcGFy
aXNvbiI+PC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTEuNTcsIG1pbj0yMzQuMzgs
IG1heD0yNDMuNjEKc2xvcGU9MC4xNCwgUl4yPTAuMDYiPjIzNy45MDxzcGFuIHN0eWxlPSJkaXNw
bGF5OiBub25lIj58PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0
YSIgdGl0bGU9Is+DPTEuNTcsIG1pbj0yMzQuMzgsIG1heD0yNDMuNjEKc2xvcGU9MC4xNCwgUl4y
PTAuMDYiPsKxIDAuNjYlPC90ZD48dGQgY2xhc3M9ImNvbXBhcmlzb24iPjwvdGQ+PHRkIGNsYXNz
PSJyZXN1bHQiIHRpdGxlPSLPgz0xLjM1LCBtaW49MjMxLjA3LCBtYXg9MjQwLjAwCnNsb3BlPTAu
MzksIFJeMj0wLjY1Ij4yMzYuMzY8c3BhbiBzdHlsZT0iZGlzcGxheTogbm9uZSI+fDwvc3Bhbj48
L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0xLjM1LCBt
aW49MjMxLjA3LCBtYXg9MjQwLjAwCnNsb3BlPTAuMzksIFJeMj0wLjY1Ij7CsSAwLjU3JSA8c3Bh
biBjbGFzcz0icmVncmVzc2lvbi13YXJuaW5nIiB0aXRsZT0iRGV0ZWN0ZWQgYSB0aW1lIGRlcGVu
ZGVuY3kgd2l0aCBzbG9wZT0wLjM5LCBSXjI9MC42NSI+PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEw
MCIgc3R5bGU9IndpZHRoOiAxOHB4OyBoZWlnaHQ6IDE4cHg7IHZlcnRpY2FsLWFsaWduOiBib3R0
b207IiB2ZXJzaW9uPSIxLjEiPjxwb2x5Z29uIGZpbGw9InJlZCIgcG9pbnRzPSI1MCwxMCA5MCw4
MCAxMCw4MCA1MCwxMCIgc3Ryb2tlPSJyZWQiIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5l
am9pbj0icm91bmQiPjwvcG9seWdvbj48cG9seWdvbiBmaWxsPSJ3aGl0ZSIgcG9pbnRzPSI0Nywz
MCA0OCwyOSwgNTAsIDI4LjcsIDUyLDI5IDUzLDMwIDUwLDYwIiBzdHJva2U9IndoaXRlIiBzdHJv
a2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48L3BvbHlnb24+PGNpcmNsZSBj
eD0iNTAiIGN5PSI3MyIgcj0iNiIgZmlsbD0id2hpdGUiPjwvY2lyY2xlPjwvc3ZnPiA8L3NwYW4+
PC90ZD48dGQgY2xhc3M9ImNvbXBhcmlzb24iPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+Cjxz
Y3JpcHQ+CgooZnVuY3Rpb24gKCkgewogICAgdmFyIGpRdWVyeSA9ICdQZXJmb3JtYW5jZVRlc3Rz
L0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL2xpYi9qcXVlcnktMS42LjQuanMnOwogICAg
dmFyIHBsdWdpbnMgPSBbJ1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL2pxdWVyeS5mbG90Lm1p
bi5qcycsICdQZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9qcXVlcnkudGFibGVzb3J0ZXIubWlu
LmpzJywKICAgICAgICAnUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGljcy5qcydd
OwogICAgdmFyIGxvY2FsUGF0aCA9ICcvVm9sdW1lcy9IREQvTm9uUGVyZm9yY2UvV2ViS2l0JzsK
ICAgIHZhciByZW1vdGVQYXRoID0gJ2h0dHBzOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93
ZWJraXQvdHJ1bmsnOwogICAgdmFyIG51bWJlck9mRmFpbHVyZXMgPSAwOwogICAgdmFyIHN0YXJ0
ZWRMb2FkaW5nUGx1Z2lucyA9IGZhbHNlOwogICAgdmFyIG51bWJlck9mTG9hZGVkUGx1Z2lucyA9
IDA7CgogICAgZnVuY3Rpb24gbG9hZFNjcmlwdChzcmMsIGxvYWRlZCwgZmFpbGVkKSB7CiAgICAg
ICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAg
IHNjcmlwdC5hc3luYyA9IHRydWU7CiAgICAgICAgc2NyaXB0LnNyYyA9IHNyYzsKICAgICAgICBz
Y3JpcHQub25sb2FkID0gbG9hZGVkOwogICAgICAgIGlmIChmYWlsZWQpCiAgICAgICAgICAgIHNj
cmlwdC5vbmVycm9yID0gZmFpbGVkOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
c2NyaXB0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBsb2FkUGx1Z2lucyh0cnVua1BhdGgpIHsKICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspCiAgICAgICAgICAg
IGxvYWRTY3JpcHQodHJ1bmtQYXRoICsgJy8nICsgcGx1Z2luc1tpXSwgbG9hZGVkUGx1Z2luLCBj
cmVhdGVGYWlsZWRUb0xvYWRQbHVnaW4ocGx1Z2luc1tpXSkpOwogICAgfQoKICAgIGZ1bmN0aW9u
IGxvYWRlZFBsdWdpbigpIHsKICAgICAgICBudW1iZXJPZkxvYWRlZFBsdWdpbnMrKzsKICAgICAg
ICBpZiAobnVtYmVyT2ZMb2FkZWRQbHVnaW5zID09IHBsdWdpbnMubGVuZ3RoKQogICAgICAgICAg
ICBzZXRUaW1lb3V0KGluaXQsIDApOyAgICAgICAgICAgIAogICAgfQoKICAgIGZ1bmN0aW9uIGNy
ZWF0ZUZhaWxlZFRvTG9hZFBsdWdpbihwbHVnaW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24g
KCkgeyBhbGVydCgiRmFpbGVkIHRvIGxvYWQgIiArIHBsdWdpbik7IH0KICAgIH0KCiAgICBmdW5j
dGlvbiBjcmVhdGVMb2FkZWRKUXVlcnkodHJ1bmtQYXRoKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uICgpIHsgbG9hZFBsdWdpbnModHJ1bmtQYXRoKTsgfQogICAgfQoKICAgIGxvYWRTY3JpcHQo
bG9jYWxQYXRoICsgJy8nICsgalF1ZXJ5LAogICAgICAgIGNyZWF0ZUxvYWRlZEpRdWVyeShsb2Nh
bFBhdGgpLAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgbG9hZFNjcmlwdChyZW1v
dGVQYXRoICsgJy8nICsgalF1ZXJ5LAogICAgICAgICAgICAgICAgY3JlYXRlTG9hZGVkSlF1ZXJ5
KHJlbW90ZVBhdGgpLAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyBhbGVydCgiRmFpbGVk
IHRvIGxvYWQgalF1ZXJ5LiIpOyB9KTsKICAgICAgICB9KTsKfSkoKTsKCmZ1bmN0aW9uIFRlc3RS
ZXN1bHQobWV0cmljLCB2YWx1ZXMsIGFzc29jaWF0ZWRSdW4pIHsKICAgIGlmICh2YWx1ZXNbMF0g
aW5zdGFuY2VvZiBBcnJheSkgewogICAgICAgIHZhciBmbGF0dGVuZWRWYWx1ZXMgPSBbXTsKICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykKICAgICAgICAgICAg
ZmxhdHRlbmVkVmFsdWVzID0gZmxhdHRlbmVkVmFsdWVzLmNvbmNhdCh2YWx1ZXNbaV0pOwogICAg
ICAgIHZhbHVlcyA9IGZsYXR0ZW5lZFZhbHVlczsKICAgIH0KCiAgICB0aGlzLnRlc3QgPSBmdW5j
dGlvbiAoKSB7IHJldHVybiBtZXRyaWM7IH0KICAgIHRoaXMudmFsdWVzID0gZnVuY3Rpb24gKCkg
eyByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIG1ldHJpYy5zY2Fs
aW5nRmFjdG9yKCkgKiB2YWx1ZTsgfSk7IH0KICAgIHRoaXMudW5zY2FsZWRNZWFuID0gZnVuY3Rp
b24gKCkgeyByZXR1cm4gU3RhdGlzdGljcy5zdW0odmFsdWVzKSAvIHZhbHVlcy5sZW5ndGg7IH0K
ICAgIHRoaXMubWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9y
KCkgKiB0aGlzLnVuc2NhbGVkTWVhbigpOyB9CiAgICB0aGlzLm1pbiA9IGZ1bmN0aW9uICgpIHsg
cmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9yKCkgKiBTdGF0aXN0aWNzLm1pbih2YWx1ZXMpOyB9
CiAgICB0aGlzLm1heCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9y
KCkgKiBTdGF0aXN0aWNzLm1heCh2YWx1ZXMpOyB9CiAgICB0aGlzLmNvbmZpZGVuY2VJbnRlcnZh
bERlbHRhID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3Rv
cigpICogU3RhdGlzdGljcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgwLjk1LCB2YWx1ZXMubGVu
Z3RoLAogICAgICAgICAgICBTdGF0aXN0aWNzLnN1bSh2YWx1ZXMpLCBTdGF0aXN0aWNzLnNxdWFy
ZVN1bSh2YWx1ZXMpKTsKICAgIH0KICAgIHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGFSYXRp
byA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSAv
IHRoaXMubWVhbigpOyB9CiAgICB0aGlzLnBlcmNlbnREaWZmZXJlbmNlID0gZnVuY3Rpb24ob3Ro
ZXIpIHsgcmV0dXJuIChvdGhlci51bnNjYWxlZE1lYW4oKSAtIHRoaXMudW5zY2FsZWRNZWFuKCkp
IC8gdGhpcy51bnNjYWxlZE1lYW4oKTsgfQogICAgdGhpcy5pc1N0YXRpc3RpY2FsbHlTaWduaWZp
Y2FudCA9IGZ1bmN0aW9uIChvdGhlcikgewogICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMob3Ro
ZXIubWVhbigpIC0gdGhpcy5tZWFuKCkpOwogICAgICAgIHJldHVybiBkaWZmID4gdGhpcy5jb25m
aWRlbmNlSW50ZXJ2YWxEZWx0YSgpICYmIGRpZmYgPiBvdGhlci5jb25maWRlbmNlSW50ZXJ2YWxE
ZWx0YSgpOwogICAgfQogICAgdGhpcy5ydW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NvY2lh
dGVkUnVuOyB9Cn0KCmZ1bmN0aW9uIFRlc3RSdW4oZW50cnkpIHsKICAgIHRoaXMuZGVzY3JpcHRp
b24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnRyeVsnZGVzY3JpcHRpb24nXTsgfQogICAgdGhp
cy53ZWJraXRSZXZpc2lvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudHJ5WydyZXZpc2lvbnMn
XVsnV2ViS2l0J11bJ3JldmlzaW9uJ107IH0KICAgIHRoaXMubGFiZWwgPSBmdW5jdGlvbiAoKSB7
CiAgICAgICAgdmFyIGxhYmVsID0gJ3InICsgdGhpcy53ZWJraXRSZXZpc2lvbigpOwogICAgICAg
IGlmICh0aGlzLmRlc2NyaXB0aW9uKCkpCiAgICAgICAgICAgIGxhYmVsICs9ICcgJmRhc2g7ICcg
KyB0aGlzLmRlc2NyaXB0aW9uKCk7CiAgICAgICAgcmV0dXJuIGxhYmVsOwogICAgfQp9CgpmdW5j
dGlvbiBQZXJmVGVzdE1ldHJpYyhuYW1lLCBtZXRyaWMpIHsKICAgIHZhciB0ZXN0UmVzdWx0cyA9
IFtdOwogICAgdmFyIGNhY2hlZFVuaXQgPSBudWxsOwogICAgdmFyIGNhY2hlZFNjYWxpbmdGYWN0
b3IgPSBudWxsOwogICAgdmFyIHVuaXQgPSB7J0ZyYW1lUmF0ZSc6ICdmcHMnLCAnUnVucyc6ICdy
dW5zL3MnLCAnVGltZSc6ICdtcycsICdNYWxsb2MnOiAnYnl0ZXMnLCAnSlNIZWFwJzogJ2J5dGVz
J31bbWV0cmljXTsKCiAgICAvLyBXZSBjYW4ndCBkbyB0aGlzIGluIFRlc3RSZXN1bHQgYmVjYXVz
ZSBhbGwgcmVzdWx0cyBmb3IgZWFjaCB0ZXN0IG5lZWQgdG8gc2hhcmUgdGhlIHNhbWUgdW5pdCBh
bmQgdGhlIHNhbWUgc2NhbGluZyBmYWN0b3IuCiAgICBmdW5jdGlvbiBjb21wdXRlU2NhbGluZ0Zh
Y3RvcklmTmVlZGVkKCkgewogICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgYWRqdXN0
aW5nIHVuaXRzIG9uIGV2ZXJ5IHRlc3QgcmVzdWx0LgogICAgICAgIC8vIFdlIGNhbiBvbmx5IGRv
IHRoaXMgb24gdGhlIGZpcnN0IHRlc3QuCiAgICAgICAgaWYgKCF0ZXN0UmVzdWx0cy5sZW5ndGgg
fHwgY2FjaGVkVW5pdCkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWVhbiA9IHRl
c3RSZXN1bHRzWzBdLnVuc2NhbGVkTWVhbigpOyAvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sgYXQg
YWxsIHZhbHVlcy4KICAgICAgICB2YXIga2lsbyA9IHVuaXQgPT0gJ2J5dGVzJyA/IDEwMjQgOiAx
MDAwOwogICAgICAgIGlmIChtZWFuID4gMTAgKiBraWxvICoga2lsbyAmJiB1bml0ICE9ICdtcycp
IHsKICAgICAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IDEgLyBraWxvIC8ga2lsbzsKICAg
ICAgICAgICAgY2FjaGVkVW5pdCA9ICdNICcgKyB1bml0OwogICAgICAgIH0gZWxzZSBpZiAobWVh
biA+IDEwICoga2lsbykgewogICAgICAgICAgICBjYWNoZWRTY2FsaW5nRmFjdG9yID0gMSAvIGtp
bG87CiAgICAgICAgICAgIGNhY2hlZFVuaXQgPSB1bml0ID09ICdtcycgPyAncycgOiAoJ0sgJyAr
IHVuaXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNhY2hlZFNjYWxpbmdGYWN0b3Ig
PSAxOwogICAgICAgICAgICBjYWNoZWRVbml0ID0gdW5pdDsKICAgICAgICB9CiAgICB9CgogICAg
dGhpcy5uYW1lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmFtZSArICc6JyArIG1ldHJpYzsgfQog
ICAgdGhpcy5pc01lbW9yeVRlc3QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMgPT0gJ0pT
SGVhcCcgfHwgbWV0cmljID09ICdNYWxsb2MnOyB9CiAgICB0aGlzLmFkZFJlc3VsdCA9IGZ1bmN0
aW9uIChuZXdSZXN1bHQpIHsKICAgICAgICB0ZXN0UmVzdWx0cy5wdXNoKG5ld1Jlc3VsdCk7CiAg
ICAgICAgY2FjaGVkVW5pdCA9IG51bGw7CiAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IG51
bGw7CiAgICB9CiAgICB0aGlzLnJlc3VsdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0ZXN0UmVz
dWx0czsgfQogICAgdGhpcy5zY2FsaW5nRmFjdG9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY29t
cHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpOwogICAgICAgIHJldHVybiBjYWNoZWRTY2FsaW5n
RmFjdG9yOwogICAgfQogICAgdGhpcy51bml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIGNvbXB1
dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKTsKICAgICAgICByZXR1cm4gY2FjaGVkVW5pdDsKICAg
IH0KICAgIHRoaXMuc21hbGxlcklzQmV0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5pdCA9
PSAnbXMnIHx8IHVuaXQgPT0gJ2J5dGVzJzsgfQp9Cgp2YXIgcGxvdENvbG9yID0gJ3JnYigyMzAs
NTAsNTApJzsKdmFyIHN1YnBvaW50c1Bsb3RPcHRpb25zID0gewogICAgbGluZXM6IHtzaG93OnRy
dWUsIGxpbmVXaWR0aDogMH0sCiAgICBjb2xvcjogcGxvdENvbG9yLAogICAgcG9pbnRzOiB7c2hv
dzogdHJ1ZSwgcmFkaXVzOiAxfSwKICAgIGJhcnM6IHtzaG93OiBmYWxzZX19OwoKdmFyIG1haW5Q
bG90T3B0aW9ucyA9IHsKICAgIHhheGlzOiB7CiAgICAgICAgbWluOiAtMC41LAogICAgICAgIHRp
Y2tTaXplOiAxLAogICAgfSwKICAgIGNyb3NzaGFpcjogeyBtb2RlOiAneScgfSwKICAgIHNlcmll
czogeyBzaGFkb3dTaXplOiAwIH0sCiAgICBiYXJzOiB7c2hvdzogdHJ1ZSwgYWxpZ246ICdjZW50
ZXInLCBiYXJXaWR0aDogMC41fSwKICAgIGxpbmVzOiB7IHNob3c6IGZhbHNlIH0sCiAgICBwb2lu
dHM6IHsgc2hvdzogdHJ1ZSB9LAogICAgZ3JpZDogewogICAgICAgIGJvcmRlcldpZHRoOiAxLAog
ICAgICAgIGJvcmRlckNvbG9yOiAnI2NjYycsCiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2Zm
ZicsCiAgICAgICAgaG92ZXJhYmxlOiB0cnVlLAogICAgICAgIGF1dG9IaWdobGlnaHQ6IGZhbHNl
LAogICAgfQp9OwoKdmFyIHRpbWVQbG90T3B0aW9ucyA9IHsKICAgIHlheGlzOiB7IHNob3c6IGZh
bHNlIH0sCiAgICB4YXhpczogeyBzaG93OiBmYWxzZSB9LAogICAgbGluZXM6IHsgc2hvdzogdHJ1
ZSB9LAogICAgZ3JpZDogeyBib3JkZXJXaWR0aDogMSwgYm9yZGVyQ29sb3I6ICcjY2NjJyB9LAog
ICAgY29sb3JzOiBbIHBsb3RDb2xvciBdCn07CgpmdW5jdGlvbiBjcmVhdGVQbG90KGNvbnRhaW5l
ciwgdGVzdCkgewogICAgdmFyIHNlY3Rpb24gPSAkKCc8c2VjdGlvbj48ZGl2IGNsYXNzPSJwbG90
Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0aW1lLXBsb3RzIj48L2Rpdj4nCiAgICAgICAgKyAnPHNwYW4g
Y2xhc3M9InRvb2x0aXAiPjwvc3Bhbj48L3NlY3Rpb24+Jyk7CiAgICBzZWN0aW9uLmNoaWxkcmVu
KCcucGxvdCcpLmNzcyh7J3dpZHRoJzogKDEwMCAqIHRlc3QucmVzdWx0cygpLmxlbmd0aCArIDI1
KSArICdweCcsICdoZWlnaHQnOiAnMzAwcHgnfSk7CiAgICAkKGNvbnRhaW5lcikuYXBwZW5kKHNl
Y3Rpb24pOwoKICAgIHZhciBwbG90Q29udGFpbmVyID0gc2VjdGlvbi5jaGlsZHJlbignLnBsb3Qn
KTsKICAgIHZhciBtaW5Jc1plcm8gPSB0cnVlOwogICAgYXR0YWNoUGxvdCh0ZXN0LCBwbG90Q29u
dGFpbmVyLCBtaW5Jc1plcm8pOwoKICAgIGF0dGFjaFRpbWVQbG90cyh0ZXN0LCBzZWN0aW9uLmNo
aWxkcmVuKCcudGltZS1wbG90cycpKTsKCiAgICB2YXIgdG9vbHRpcCA9IHNlY3Rpb24uY2hpbGRy
ZW4oJy50b29sdGlwJyk7CiAgICBwbG90Q29udGFpbmVyLmJpbmQoJ3Bsb3Rob3ZlcicsIGZ1bmN0
aW9uIChldmVudCwgcG9zaXRpb24sIGl0ZW0pIHsKICAgICAgICBpZiAoaXRlbSkgewogICAgICAg
ICAgICB2YXIgcG9zdGZpeCA9IGl0ZW0uc2VyaWVzLmlkID8gJyAoJyArIGl0ZW0uc2VyaWVzLmlk
ICsgJyknIDogJyc7CiAgICAgICAgICAgIHRvb2x0aXAuaHRtbChpdGVtLmRhdGFwb2ludFsxXS50
b1ByZWNpc2lvbig0KSArIHBvc3RmaXgpOwogICAgICAgICAgICB2YXIgc2VjdGlvbk9mZnNldCA9
ICQoc2VjdGlvbikub2Zmc2V0KCk7CiAgICAgICAgICAgIHRvb2x0aXAuY3NzKHtsZWZ0OiBpdGVt
LnBhZ2VYIC0gc2VjdGlvbk9mZnNldC5sZWZ0IC0gdG9vbHRpcC5vdXRlcldpZHRoKCkgLyAyLCB0
b3A6IGl0ZW0ucGFnZVkgLSBzZWN0aW9uT2Zmc2V0LnRvcCArIDEwfSk7CiAgICAgICAgICAgIHRv
b2x0aXAuZmFkZUluKDIwMCk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIHRvb2x0aXAuaGlk
ZSgpOwogICAgfSk7CiAgICBwbG90Q29udGFpbmVyLm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsKICAg
ICAgICB0b29sdGlwLmhpZGUoKTsKICAgIH0pOwogICAgcGxvdENvbnRhaW5lci5jbGljayhmdW5j
dGlvbiAoZXZlbnQpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIG1p
bklzWmVybyA9ICFtaW5Jc1plcm87CiAgICAgICAgYXR0YWNoUGxvdCh0ZXN0LCBwbG90Q29udGFp
bmVyLCBtaW5Jc1plcm8pOwogICAgfSk7CgogICAgcmV0dXJuIHNlY3Rpb247Cn0KCmZ1bmN0aW9u
IGF0dGFjaFRpbWVQbG90cyh0ZXN0LCBjb250YWluZXIpIHsKICAgIHZhciByZXN1bHRzID0gdGVz
dC5yZXN1bHRzKCk7CiAgICB2YXIgYXR0YWNoZWRQbG90ID0gZmFsc2U7CiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb250YWluZXIuYXBwZW5k
KCc8ZGl2PjwvZGl2PicpOwogICAgICAgIHZhciB2YWx1ZXMgPSByZXN1bHRzW2ldLnZhbHVlcygp
OwogICAgICAgIGlmICghdmFsdWVzKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICBhdHRh
Y2hlZFBsb3QgPSB0cnVlOwoKICAgICAgICAkLnBsb3QoY29udGFpbmVyLmNoaWxkcmVuKCkubGFz
dCgpLCBbdmFsdWVzLm1hcChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7IHJldHVybiBbaW5kZXgs
IHZhbHVlXTsgfSldLAogICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCB7fSwgdGltZVBsb3RPcHRp
b25zLCB7eWF4aXM6IHttaW46IE1hdGgubWluLmFwcGx5KE1hdGgsIHZhbHVlcykgKiAwLjksIG1h
eDogTWF0aC5tYXguYXBwbHkoTWF0aCwgdmFsdWVzKSAqIDEuMX0sCiAgICAgICAgICAgICAgICB4
YXhpczoge21pbjogLTAuNSwgbWF4OiB2YWx1ZXMubGVuZ3RoIC0gMC41fX0pKTsKICAgIH0KICAg
IGlmICghYXR0YWNoZWRQbG90KQogICAgICAgIGNvbnRhaW5lci5jaGlsZHJlbigpLnJlbW92ZSgp
Owp9CgpmdW5jdGlvbiBhdHRhY2hQbG90KHRlc3QsIHBsb3RDb250YWluZXIsIG1pbklzWmVybykg
ewogICAgdmFyIHJlc3VsdHMgPSB0ZXN0LnJlc3VsdHMoKTsKCiAgICB2YXIgdmFsdWVzID0gcmVz
dWx0cy5yZWR1Y2UoZnVuY3Rpb24gKHZhbHVlcywgcmVzdWx0LCBpbmRleCkgewogICAgICAgIHZh
ciBuZXdWYWx1ZXMgPSByZXN1bHQudmFsdWVzKCk7CiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlcyA/
IHZhbHVlcy5jb25jYXQobmV3VmFsdWVzLm1hcChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIFtp
bmRleCwgdmFsdWVdOyB9KSkgOiB2YWx1ZXM7CiAgICB9LCBbXSk7CgogICAgdmFyIHBsb3REYXRh
ID0gWyQuZXh0ZW5kKHRydWUsIHt9LCBzdWJwb2ludHNQbG90T3B0aW9ucywge2RhdGE6IHZhbHVl
c30pXTsKICAgIHBsb3REYXRhLnB1c2goe2lkOiAnJm11OycsIGRhdGE6IHJlc3VsdHMubWFwKGZ1
bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVybiBbaW5kZXgsIHJlc3VsdC5tZWFuKCldOyB9
KSwgY29sb3I6IHBsb3RDb2xvcn0pOwoKICAgIHZhciBvdmVyYWxsTWF4ID0gU3RhdGlzdGljcy5t
YXgocmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIHJlc3VsdC5t
YXgoKTsgfSkpOwogICAgdmFyIG92ZXJhbGxNaW4gPSBTdGF0aXN0aWNzLm1pbihyZXN1bHRzLm1h
cChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gcmVzdWx0Lm1pbigpOyB9KSk7CiAg
ICB2YXIgbWFyZ2luID0gKG92ZXJhbGxNYXggLSBvdmVyYWxsTWluKSAqIDAuMTsKICAgIHZhciBj
dXJyZW50UGxvdE9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgbWFpblBsb3RPcHRpb25zLCB7
eWF4aXM6IHsKICAgICAgICBtaW46IG1pbklzWmVybyA/IDAgOiBvdmVyYWxsTWluIC0gbWFyZ2lu
LAogICAgICAgIG1heDogbWluSXNaZXJvID8gb3ZlcmFsbE1heCAqIDEuMSA6IG92ZXJhbGxNYXgg
KyBtYXJnaW59fSk7CgogICAgY3VycmVudFBsb3RPcHRpb25zLnhheGlzLm1heCA9IHJlc3VsdHMu
bGVuZ3RoIC0gMC41OwogICAgY3VycmVudFBsb3RPcHRpb25zLnhheGlzLnRpY2tzID0gcmVzdWx0
cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0LnJ1
bigpLmxhYmVsKCldOyB9KTsKCiAgICAkLnBsb3QocGxvdENvbnRhaW5lciwgcGxvdERhdGEsIGN1
cnJlbnRQbG90T3B0aW9ucyk7Cn0KCmZ1bmN0aW9uIHRvRml4ZWRXaWR0aFByZWNpc2lvbih2YWx1
ZSkgewogICAgdmFyIGRlY2ltYWwgPSB2YWx1ZS50b0ZpeGVkKDIpOwogICAgcmV0dXJuIGRlY2lt
YWw7Cn0KCmZ1bmN0aW9uIGZvcm1hdFBlcmNlbnRhZ2UoZnJhY3Rpb24pIHsKICAgIHZhciBwZXJj
ZW50YWdlID0gZnJhY3Rpb24gKiAxMDA7CiAgICByZXR1cm4gKGZyYWN0aW9uICogMTAwKS50b0Zp
eGVkKDIpICsgJyUnOwp9CgpmdW5jdGlvbiBjcmVhdGVUYWJsZSh0ZXN0cywgcnVucywgc2hvdWxk
SWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCkgewogICAgJCgnI2NvbnRhaW5lcicpLmh0bWwo
Jzx0aGVhZD48dHI+PHRoPlRlc3Q8L3RoPjx0aD5Vbml0PC90aD4nICsgcnVucy5tYXAoZnVuY3Rp
b24gKHJ1biwgaW5kZXgpIHsKICAgICAgICByZXR1cm4gJzx0aCBjb2xzcGFuPSInICsgKGluZGV4
ID09IHJlZmVyZW5jZUluZGV4ID8gMiA6IDMpICsgJyIgY2xhc3M9Intzb3J0ZXI6IFwnY29tcGFy
aXNvblwnfSI+JyArIHJ1bi5sYWJlbCgpICsgJzwvdGg+JzsKICAgIH0pLnJlZHVjZShmdW5jdGlv
biAobWFya3VwLCBjZWxsKSB7IHJldHVybiBtYXJrdXAgKyBjZWxsOyB9LCAnJykgKyAnPC90cj48
L2hlYWQ+PHRib2R5PjwvdGJvZHk+Jyk7CgogICAgdmFyIHRlc3ROYW1lcyA9IFtdOwogICAgZm9y
ICh0ZXN0TmFtZSBpbiB0ZXN0cykKICAgICAgICB0ZXN0TmFtZXMucHVzaCh0ZXN0TmFtZSk7Cgog
ICAgdGVzdE5hbWVzLnNvcnQoKS5tYXAoZnVuY3Rpb24gKHRlc3ROYW1lKSB7CiAgICAgICAgdmFy
IHRlc3QgPSB0ZXN0c1t0ZXN0TmFtZV07CiAgICAgICAgaWYgKHRlc3QuaXNNZW1vcnlUZXN0KCkg
IT0gc2hvdWxkSWdub3JlTWVtb3J5KQogICAgICAgICAgICBjcmVhdGVUYWJsZVJvdyhydW5zLCB0
ZXN0LCByZWZlcmVuY2VJbmRleCk7CiAgICB9KTsKCiAgICAkKCcjY29udGFpbmVyJykudGFibGVz
b3J0ZXIoe3dpZGdldHM6IFsnemVicmEnXX0pOwp9CgpmdW5jdGlvbiBsaW5lYXJSZWdyZXNzaW9u
KHBvaW50cykgewogICAgLy8gSW1wbGVtZW50IGh0dHA6Ly93d3cuZWFzeWNhbGN1bGF0aW9uLmNv
bS9zdGF0aXN0aWNzL2xlYXJuLWNvcnJlbGF0aW9uLnBocC4KICAgIC8vIHggPSBtYWduaXR1ZGUK
ICAgIC8vIHkgPSBpdGVyYXRpb25zCiAgICB2YXIgc3VtWCA9IDA7CiAgICB2YXIgc3VtWSA9IDA7
CiAgICB2YXIgc3VtWFNxdWFyZWQgPSAwOwogICAgdmFyIHN1bVlTcXVhcmVkID0gMDsKICAgIHZh
ciBzdW1YVGltZXNZID0gMDsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7
IGkrKykgewogICAgICAgIHZhciB4ID0gaTsKICAgICAgICB2YXIgeSA9IHBvaW50c1tpXTsKICAg
ICAgICBzdW1YICs9IHg7CiAgICAgICAgc3VtWSArPSB5OwogICAgICAgIHN1bVhTcXVhcmVkICs9
IHggKiB4OwogICAgICAgIHN1bVlTcXVhcmVkICs9IHkgKiB5OwogICAgICAgIHN1bVhUaW1lc1kg
Kz0geCAqIHk7CiAgICB9CgogICAgdmFyIHIgPSAocG9pbnRzLmxlbmd0aCAqIHN1bVhUaW1lc1kg
LSBzdW1YICogc3VtWSkgLwogICAgICAgIE1hdGguc3FydCgocG9pbnRzLmxlbmd0aCAqIHN1bVhT
cXVhcmVkIC0gc3VtWCAqIHN1bVgpICoKICAgICAgICAgICAgICAgICAgKHBvaW50cy5sZW5ndGgg
KiBzdW1ZU3F1YXJlZCAtIHN1bVkgKiBzdW1ZKSk7CgogICAgaWYgKGlzTmFOKHIpIHx8IHIgPT0g
TWF0aC5JbmZpbml0eSkKICAgICAgICByID0gMDsKCiAgICB2YXIgc2xvcGUgPSAocG9pbnRzLmxl
bmd0aCAqIHN1bVhUaW1lc1kgLSBzdW1YICogc3VtWSkgLyAocG9pbnRzLmxlbmd0aCAqIHN1bVhT
cXVhcmVkIC0gc3VtWCAqIHN1bVgpOwogICAgdmFyIGludGVyY2VwdCA9IHN1bVkgLyBwb2ludHMu
bGVuZ3RoIC0gc2xvcGUgKiBzdW1YIC8gcG9pbnRzLmxlbmd0aDsKICAgIHJldHVybiB7c2xvcGU6
IHNsb3BlLCBpbnRlcmNlcHQ6IGludGVyY2VwdCwgclNxdWFyZWQ6IHIgKiByfTsKfQoKdmFyIHdh
cm5pbmdTaWduID0gJzxzdmcgdmlld0JveD0iMCAwIDEwMCAxMDAiIHN0eWxlPSJ3aWR0aDogMThw
eDsgaGVpZ2h0OiAxOHB4OyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyIgdmVyc2lvbj0iMS4xIj4n
CiAgICArICc8cG9seWdvbiBmaWxsPSJyZWQiIHBvaW50cz0iNTAsMTAgOTAsODAgMTAsODAgNTAs
MTAiIHN0cm9rZT0icmVkIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5k
IiAvPicKICAgICsgJzxwb2x5Z29uIGZpbGw9IndoaXRlIiBwb2ludHM9IjQ3LDMwIDQ4LDI5LCA1
MCwgMjguNywgNTIsMjkgNTMsMzAgNTAsNjAiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0i
MTAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIC8+JwogICAgKyAnPGNpcmNsZSBjeD0iNTAiIGN5
PSI3MyIgcj0iNiIgZmlsbD0id2hpdGUiIC8+JwogICAgKyAnPC9zdmc+JzsKCmZ1bmN0aW9uIGNy
ZWF0ZVRhYmxlUm93KHJ1bnMsIHRlc3QsIHJlZmVyZW5jZUluZGV4KSB7CiAgICB2YXIgdGFibGVS
b3cgPSAkKCc8dHI+PHRkIGNsYXNzPSJ0ZXN0Ij4nICsgdGVzdC5uYW1lKCkgKyAnPC90ZD48dGQg
Y2xhc3M9InVuaXQiPicgKyB0ZXN0LnVuaXQoKSArICc8L3RkPjwvdHI+Jyk7CgogICAgZnVuY3Rp
b24gbWFya3VwRm9yUnVuKHJlc3VsdCwgcmVmZXJlbmNlUmVzdWx0KSB7CiAgICAgICAgdmFyIGNv
bXBhcmlzb25DZWxsID0gJyc7CiAgICAgICAgdmFyIGhpZGRlblZhbHVlID0gJyc7CiAgICAgICAg
dmFyIHNob3VsZENvbXBhcmUgPSByZXN1bHQgIT09IHJlZmVyZW5jZVJlc3VsdDsKICAgICAgICBp
ZiAoc2hvdWxkQ29tcGFyZSAmJiByZWZlcmVuY2VSZXN1bHQpIHsKICAgICAgICAgICAgdmFyIHBl
cmNlbnREaWZmZXJlbmNlID0gcmVmZXJlbmNlUmVzdWx0LnBlcmNlbnREaWZmZXJlbmNlKHJlc3Vs
dCk7CiAgICAgICAgICAgIHZhciBiZXR0ZXIgPSB0ZXN0LnNtYWxsZXJJc0JldHRlcigpID8gcGVy
Y2VudERpZmZlcmVuY2UgPCAwIDogcGVyY2VudERpZmZlcmVuY2UgPiAwOwogICAgICAgICAgICB2
YXIgY29tcGFyaXNvbiA9ICcnOwogICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gJ2NvbXBhcmlz
b24nOwogICAgICAgICAgICBpZiAocmVmZXJlbmNlUmVzdWx0LmlzU3RhdGlzdGljYWxseVNpZ25p
ZmljYW50KHJlc3VsdCkpIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb24gPSBmb3JtYXRQZXJj
ZW50YWdlKE1hdGguYWJzKHBlcmNlbnREaWZmZXJlbmNlKSkgKyAoYmV0dGVyID8gJyBCZXR0ZXIn
IDogJyBXb3JzZSZuYnNwOycpOwogICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IGJldHRlciA/
ICcgYmV0dGVyJyA6ICcgd29yc2UnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGhpZGRlblZh
bHVlID0gJzxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58JyArIGNvbXBhcmlzb24gKyAnPC9z
cGFuPic7CiAgICAgICAgICAgIGNvbXBhcmlzb25DZWxsID0gJzx0ZCBjbGFzcz0iJyArIGNsYXNz
TmFtZSArICciPicgKyBjb21wYXJpc29uICsgJzwvdGQ+JzsKICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZENvbXBhcmUpCiAgICAgICAgICAgIGNvbXBhcmlzb25DZWxsID0gJzx0ZCBjbGFzcz0iY29t
cGFyaXNvbiI+PC90ZD4nOwoKICAgICAgICB2YXIgdmFsdWVzID0gcmVzdWx0LnZhbHVlcygpOwog
ICAgICAgIHZhciB3YXJuaW5nID0gJyc7CiAgICAgICAgdmFyIHJlZ3Jlc3Npb25BbmFseXNpcyA9
ICcnOwogICAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDMpIHsKICAgICAgICAg
ICAgcmVncmVzc2lvblJlc3VsdCA9IGxpbmVhclJlZ3Jlc3Npb24odmFsdWVzKTsKICAgICAgICAg
ICAgcmVncmVzc2lvbkFuYWx5c2lzID0gJ3Nsb3BlPScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24o
cmVncmVzc2lvblJlc3VsdC5zbG9wZSkKICAgICAgICAgICAgICAgICsgJywgUl4yPScgKyB0b0Zp
eGVkV2lkdGhQcmVjaXNpb24ocmVncmVzc2lvblJlc3VsdC5yU3F1YXJlZCk7CiAgICAgICAgICAg
IGlmIChyZWdyZXNzaW9uUmVzdWx0LnJTcXVhcmVkID4gMC42ICYmIE1hdGguYWJzKHJlZ3Jlc3Np
b25SZXN1bHQuc2xvcGUpID4gMC4wMSkgewogICAgICAgICAgICAgICAgd2FybmluZyA9ICcgPHNw
YW4gY2xhc3M9InJlZ3Jlc3Npb24td2FybmluZyIgdGl0bGU9IkRldGVjdGVkIGEgdGltZSBkZXBl
bmRlbmN5IHdpdGggJyArIHJlZ3Jlc3Npb25BbmFseXNpcyArICciPicgKyB3YXJuaW5nU2lnbiAr
ICcgPC9zcGFuPic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBzdGF0aXN0
aWNzID0gJyZzaWdtYTs9JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQuY29uZmlkZW5j
ZUludGVydmFsRGVsdGEoKSkgKyAnLCBtaW49JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1
bHQubWluKCkpCiAgICAgICAgICAgICsgJywgbWF4PScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24o
cmVzdWx0Lm1heCgpKSArICdcbicgKyByZWdyZXNzaW9uQW5hbHlzaXM7CgogICAgICAgIC8vIFRh
Ymxlc29ydGVyIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgc2Vjb25kIGNlbGwgc28gcHV0IHRoZSBj
b21wYXJpc29uIGluIHRoZSBpbnZpc2libGUgZWxlbWVudC4KICAgICAgICByZXR1cm4gJzx0ZCBj
bGFzcz0icmVzdWx0IiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAnIj4nICsgdG9GaXhlZFdpZHRo
UHJlY2lzaW9uKHJlc3VsdC5tZWFuKCkpICsgaGlkZGVuVmFsdWUKICAgICAgICAgICAgKyAnPC90
ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iJyArIHN0YXRpc3Rp
Y3MgKyAnIj4mcGx1c21uOyAnCiAgICAgICAgICAgICsgZm9ybWF0UGVyY2VudGFnZShyZXN1bHQu
Y29uZmlkZW5jZUludGVydmFsRGVsdGFSYXRpbygpKSArIHdhcm5pbmcgKyAnPC90ZD4nICsgY29t
cGFyaXNvbkNlbGw7CiAgICB9CgogICAgZnVuY3Rpb24gbWFya3VwRm9yTWlzc2luZ1J1bihpc1Jl
ZmVyZW5jZSkgewogICAgICAgIHJldHVybiAnPHRkIGNvbHNwYW49IicgKyAoaXNSZWZlcmVuY2Ug
PyAyIDogMykgKyAnIiBjbGFzcz0ibWlzc2luZyI+TWlzc2luZzwvdGQ+JzsKICAgIH0KCiAgICB2
YXIgcnVuSW5kZXggPSAwOwogICAgdmFyIHJlc3VsdHMgPSB0ZXN0LnJlc3VsdHMoKTsKICAgIHZh
ciByZWZlcmVuY2VSZXN1bHQgPSB1bmRlZmluZWQ7CiAgICB2YXIgcmVzdWx0SW5kZXhNYXAgPSB7
fTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAg
IHdoaWxlIChydW5zW3J1bkluZGV4XSAhPT0gcmVzdWx0c1tpXS5ydW4oKSkKICAgICAgICAgICAg
cnVuSW5kZXgrKzsKICAgICAgICBpZiAocnVuSW5kZXggPT0gcmVmZXJlbmNlSW5kZXgpCiAgICAg
ICAgICAgIHJlZmVyZW5jZVJlc3VsdCA9IHJlc3VsdHNbaV07CiAgICAgICAgcmVzdWx0SW5kZXhN
YXBbcnVuSW5kZXhdID0gaTsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVucy5sZW5n
dGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHRJbmRleCA9IHJlc3VsdEluZGV4TWFwW2ldOwog
ICAgICAgIGlmIChyZXN1bHRJbmRleCA9PSB1bmRlZmluZWQpCiAgICAgICAgICAgIHRhYmxlUm93
LmFwcGVuZChtYXJrdXBGb3JNaXNzaW5nUnVuKGkgPT0gcmVmZXJlbmNlSW5kZXgpKTsKICAgICAg
ICBlbHNlCiAgICAgICAgICAgIHRhYmxlUm93LmFwcGVuZChtYXJrdXBGb3JSdW4ocmVzdWx0c1ty
ZXN1bHRJbmRleF0sIHJlZmVyZW5jZVJlc3VsdCkpOwogICAgfQoKICAgICQoJyNjb250YWluZXIn
KS5jaGlsZHJlbigndGJvZHknKS5sYXN0KCkuYXBwZW5kKHRhYmxlUm93KTsKCiAgICB0YWJsZVJv
dy5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9IHRh
YmxlUm93WzBdICYmIGV2ZW50LnRhcmdldC5wYXJlbnROb2RlICE9IHRhYmxlUm93WzBdKQogICAg
ICAgICAgICByZXR1cm47CgogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgogICAgICAg
IHZhciBmaXJzdENlbGwgPSB0YWJsZVJvdy5jaGlsZHJlbigndGQnKS5maXJzdCgpOwogICAgICAg
IGlmIChmaXJzdENlbGwuY2hpbGRyZW4oJ3NlY3Rpb24nKS5sZW5ndGgpIHsKICAgICAgICAgICAg
Zmlyc3RDZWxsLmNoaWxkcmVuKCdzZWN0aW9uJykucmVtb3ZlKCk7CiAgICAgICAgICAgIHRhYmxl
Um93LmNoaWxkcmVuKCd0ZCcpLmNzcyh7J3BhZGRpbmctYm90dG9tJzogJyd9KTsKICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICB2YXIgcGxvdCA9IGNyZWF0ZVBsb3QoZmlyc3RDZWxsLCB0ZXN0
KTsKICAgICAgICAgICAgcGxvdC5jc3Moeydwb3NpdGlvbic6ICdhYnNvbHV0ZScsICd6LWluZGV4
JzogMn0pOwogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGFibGVSb3cub2Zmc2V0KCk7CiAgICAg
ICAgICAgIG9mZnNldC5sZWZ0ICs9IDE7CiAgICAgICAgICAgIG9mZnNldC50b3AgKz0gdGFibGVS
b3cub3V0ZXJIZWlnaHQoKTsKICAgICAgICAgICAgcGxvdC5vZmZzZXQob2Zmc2V0KTsKICAgICAg
ICAgICAgdGFibGVSb3cuY2hpbGRyZW4oJ3RkJykuY3NzKHsncGFkZGluZy1ib3R0b20nOiBwbG90
Lm91dGVySGVpZ2h0KCkgKyA1fSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9KTsKfQoKZnVuY3Rpb24gaW5pdCgpIHsKICAgICQudGFibGVzb3J0ZXIuYWRkUGFyc2VyKHsK
ICAgICAgICBpZDogJ2NvbXBhcmlzb24nLAogICAgICAgIGlzOiBmdW5jdGlvbihzKSB7CiAgICAg
ICAgICAgIHJldHVybiBzLmluZGV4T2YoJ3wnKSA+PSAwOwogICAgICAgIH0sCiAgICAgICAgZm9y
bWF0OiBmdW5jdGlvbihzKSB7CiAgICAgICAgICAgIHZhciBwYXJzZWQgPSBwYXJzZUZsb2F0KHMu
c3Vic3RyaW5nKHMuaW5kZXhPZignfCcpICsgMSkpOwogICAgICAgICAgICByZXR1cm4gaXNOYU4o
cGFyc2VkKSA/IDAgOiBwYXJzZWQ7CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAnbnVtZXJpYycs
CiAgICB9KTsKCiAgICB2YXIgcnVucyA9IFtdOwogICAgdmFyIG1ldHJpY3MgPSB7fTsKICAgICQu
ZWFjaChKU09OLnBhcnNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqc29uJykudGV4dENvbnRl
bnQpLCBmdW5jdGlvbiAoaW5kZXgsIGVudHJ5KSB7CiAgICAgICAgdmFyIHJ1biA9IG5ldyBUZXN0
UnVuKGVudHJ5KTsKICAgICAgICBydW5zLnB1c2gocnVuKTsKCiAgICAgICAgZnVuY3Rpb24gYWRk
VGVzdHModGVzdHMsIHBhcmVudEZ1bGxOYW1lKSB7CiAgICAgICAgICAgIGZvciAodmFyIHRlc3RO
YW1lIGluIHRlc3RzKSB7CiAgICAgICAgICAgICAgICB2YXIgZnVsbFRlc3ROYW1lID0gcGFyZW50
RnVsbE5hbWUgKyAnLycgKyB0ZXN0TmFtZTsKICAgICAgICAgICAgICAgIHZhciByYXdNZXRyaWNz
ID0gdGVzdHNbdGVzdE5hbWVdLm1ldHJpY3M7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgbWV0
cmljTmFtZSBpbiByYXdNZXRyaWNzKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxNZXRy
aWNOYW1lID0gZnVsbFRlc3ROYW1lICsgJzonICsgbWV0cmljTmFtZTsKICAgICAgICAgICAgICAg
ICAgICB2YXIgbWV0cmljID0gbWV0cmljc1tmdWxsTWV0cmljTmFtZV07CiAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtZXRyaWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljID0gbmV3
IFBlcmZUZXN0TWV0cmljKGZ1bGxUZXN0TmFtZSwgbWV0cmljTmFtZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIG1ldHJpY3NbZnVsbE1ldHJpY05hbWVdID0gbWV0cmljOwogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBtZXRyaWMuYWRkUmVzdWx0KG5ldyBUZXN0UmVz
dWx0KG1ldHJpYywgcmF3TWV0cmljc1ttZXRyaWNOYW1lXS5jdXJyZW50LCBydW4pKTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGVzdHNbdGVzdE5hbWVdLnRlc3RzKQog
ICAgICAgICAgICAgICAgICAgIGFkZFRlc3RzKHRlc3RzW3Rlc3ROYW1lXS50ZXN0cywgZnVsbFRl
c3ROYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgYWRkVGVzdHMoZW50cnku
dGVzdHMsICcnKTsKICAgIH0pOwoKICAgIHZhciBzaG91bGRJZ25vcmVNZW1vcnk9IHRydWU7CiAg
ICB2YXIgcmVmZXJlbmNlSW5kZXggPSAwOwoKICAgIGNyZWF0ZVRhYmxlKG1ldHJpY3MsIHJ1bnMs
IHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgpOwoKICAgICQoJyN0aW1lLW1lbW9y
eScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCwgY2hlY2tlZEVsZW1lbnQpIHsKICAg
ICAgICBzaG91bGRJZ25vcmVNZW1vcnkgPSBjaGVja2VkRWxlbWVudC50ZXh0Q29udGVudCA9PSAn
VGltZSc7CiAgICAgICAgY3JlYXRlVGFibGUobWV0cmljcywgcnVucywgc2hvdWxkSWdub3JlTWVt
b3J5LCByZWZlcmVuY2VJbmRleCk7CiAgICB9KTsKCiAgICBydW5zLm1hcChmdW5jdGlvbiAocnVu
LCBpbmRleCkgewogICAgICAgICQoJyNyZWZlcmVuY2UnKS5hcHBlbmQoJzxzcGFuIHZhbHVlPSIn
ICsgaW5kZXggKyAnIicgKyAoaW5kZXggPT0gcmVmZXJlbmNlSW5kZXggPyAnIGNsYXNzPSJjaGVj
a2VkIicgOiAnJykgKyAnPicgKyBydW4ubGFiZWwoKSArICc8L3NwYW4+Jyk7CiAgICB9KQoKICAg
ICQoJyNyZWZlcmVuY2UnKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQsIGNoZWNrZWRF
bGVtZW50KSB7CiAgICAgICAgcmVmZXJlbmNlSW5kZXggPSBwYXJzZUludChjaGVja2VkRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpOwogICAgICAgIGNyZWF0ZVRhYmxlKG1ldHJpY3MsIHJ1
bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgpOwogICAgfSk7CgogICAgJCgn
LmNoZWNrYm94JykuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGNoZWNrYm94KSB7CiAgICAgICAgJChj
aGVja2JveCkuY2hpbGRyZW4oJ3NwYW4nKS5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAg
ICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2NoZWNrZWQnKSkKICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgJChjaGVja2JveCkuY2hpbGRyZW4oJ3NwYW4nKS5yZW1vdmVDbGFz
cygnY2hlY2tlZCcpOwogICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdjaGVja2VkJyk7CiAg
ICAgICAgICAgICQoY2hlY2tib3gpLnRyaWdnZXIoJ2NoYW5nZScsICQodGhpcykpOwogICAgICAg
IH0pOwogICAgfSk7Cn0KCjwvc2NyaXB0PjxzY3JpcHQgYXN5bmM9IiIgc3JjPSIvVm9sdW1lcy9I
REQvTm9uUGVyZm9yY2UvV2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMv
ZHJvbWFlby93ZWIvbGliL2pxdWVyeS0xLjYuNC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgaWQ9Impz
b24iIHR5cGU9ImFwcGxpY2F0aW9uL2pzb24iPlt7InRlc3RzIjogeyJQYXJzZXIiOiB7InVybCI6
ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Q
YXJzZXIiLCAidGVzdHMiOiB7ImlubmVySFRNTC1zZXR0ZXIiOiB7InVybCI6ICJodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9QYXJzZXIvaW5uZXJI
VE1MLXNldHRlci5odG1sIiwgIm1ldHJpY3MiOiB7Ik1hbGxvYyI6IHsiY3VycmVudCI6IFtbMzIw
MDczOTIuMCwgMzE5OTM1NjguMCwgMzE5OTIwNjQuMCwgMjk4OTUyNzIuMCwgMjk4OTUzMjguMF0s
IFsyOTkxNDMwNC4wLCAyOTkwMDQ4MC4wLCAyOTkwMzA3Mi4wLCAyOTkwMzQ4OC4wLCAyOTg5OTQ0
OC4wXSwgWzMyMDA3Mzc2LjAsIDMxOTkzNTUyLjAsIDMxOTk2MTQ0LjAsIDMzMDM4NjA4LjAsIDMz
MDQxMDgwLjBdLCBbMzMwNTc2MTYuMCwgMzMwNDM3OTIuMCwgMzMwNDc4OTYuMCwgMzMwMzg1Njgu
MCwgMzMwMzg1NjguMF1dfSwgIlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIzNC45ODY5NDUxNjk3MTI3
OCwgMjM2LjUzMDg4MDQyMDQ5OTMzLCAyMzEuNjYwMjMxNjYwMjMxNjYsIDIzMS42NjAyMzE2NjAy
MzE2NiwgMjM1LjYwMjA5NDI0MDgzNzddLCBbMjI1LjAsIDIyMy44ODA1OTcwMTQ5MjUzNywgMjIy
Ljc3MjI3NzIyNzcyMjc4LCAyMjkuNTkxODM2NzM0NjkzODksIDIyNC43MTkxMDExMjM1OTU1XSwg
WzI0MC4wLCAyMzguNzI2NzkwNDUwOTI4MzgsIDIzOS42ODA0MjYwOTg1MzUzLCAyMzkuODA4MTUz
NDc3MjE4MiwgMjQwLjBdLCBbMjQxLjI1NDUyMzUyMjMxNjA1LCAyNDIuNDI0MjQyNDI0MjQyNDQs
IDI0MC45NjM4NTU0MjE2ODY3NiwgMjQyLjQyNDI0MjQyNDI0MjQ0LCAyNDIuNDI0MjQyNDI0MjQy
NDRdXX0sICJKU0hlYXAiOiB7ImN1cnJlbnQiOiBbWzYxNTA0LjAsIDYzNzYwLjAsIDYzODMyLjAs
IDYzOTkyLjAsIDY0MDY0LjBdLCBbNjE1MDQuMCwgNjM3NjAuMCwgNjM4MzIuMCwgNjM5OTIuMCwg
NjQwNjQuMF0sIFs2MTUwNC4wLCA2Mzc2MC4wLCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2NC4wXSwg
WzYxNTA0LjAsIDYzNzYwLjAsIDYzODMyLjAsIDYzOTkyLjAsIDY0MDY0LjBdXX19fSwgImh0bWw1
LWZ1bGwtcmVuZGVyIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3Ry
dW5rL1BlcmZvcm1hbmNlVGVzdHMvUGFyc2VyL2h0bWw1LWZ1bGwtcmVuZGVyLmh0bWwiLCAibWV0
cmljcyI6IHsiTWFsbG9jIjogeyJjdXJyZW50IjogW1sxMTY1MTA2NjQuMCwgMTEzMzY5MjU2LjAs
IDExNjY5OTU3Ni4wLCAxMTczNDE3ODQuMCwgMTE2NTc0NDI0LjBdLCBbMTE2OTYxMDQ4LjAsIDEx
NzEyMTU4NC4wLCAxMTY0MzQ5MjAuMCwgMTE2NzE5MzA0LjAsIDExNjY1NTI3Mi4wXSwgWzExNjQy
OTQxNi4wLCAxMTY1ODA0MzIuMCwgMTE2Mzk0NzY4LjAsIDExNjQ5MTY5Ni4wLCAxMTYxNzQwODgu
MF0sIFsxMTYzNDQzNzYuMCwgMTE2NDY5NTYwLjAsIDExNjIxNDM2OC4wLCAxMTYzOTcyMTYuMCwg
MTE2MjAxMzkyLjBdXX0sICJKU0hlYXAiOiB7ImN1cnJlbnQiOiBbWzcyNzc2LjAsIDc5OTIwLjAs
IDg0OTEyLjAsIDg5OTc2LjAsIDk3NDU2LjBdLCBbNzI3NzYuMCwgNzk5MjAuMCwgODQ5MTIuMCwg
ODk5NzYuMCwgOTc0NTYuMF0sIFs3Mjc3Ni4wLCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3Ni4wLCA5
NzQ1Ni4wXSwgWzcyNzc2LjAsIDc5OTIwLjAsIDg0OTEyLjAsIDg5OTc2LjAsIDk3NDU2LjBdXX0s
ICJUaW1lIjogeyJjdXJyZW50IjogW1s0MjUyLjAsIDUwMTUuMCwgNDI0Mi4wLCA1MDEwLjAsIDQy
NDQuMF0sIFs0MjYwLjAsIDUwMjUuMCwgNDI0OC4wLCA1MDAyLjAsIDQyNDQuMF0sIFs0MjYxLjAs
IDUwMzUuMCwgNDI0OC4wLCA1MDIyLjAsIDQyNjQuMF0sIFs0MjI1LjAsIDQ5ODcuMCwgNDIxNy4w
LCA1MDAzLjAsIDQyMTguMF1dfX19fX19LCAiYnVpbGRUaW1lIjogIjIwMTMtMDQtMThUMTQ6NDg6
MzguNzg5NzY1IiwgImRlc2NyaXB0aW9uIjogIldpdGhvdXQgcGF0Y2giLCAicmV2aXNpb25zIjog
eyJXZWJLaXQiOiB7InRpbWVzdGFtcCI6ICIyMDEzLTA0LTE4VDA3OjI2OjM1WiIsICJyZXZpc2lv
biI6ICIxNDg2NTkifX19LCB7InRlc3RzIjogeyJQYXJzZXIiOiB7InVybCI6ICJodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9QYXJzZXIiLCAidGVz
dHMiOiB7ImlubmVySFRNTC1zZXR0ZXIiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9QYXJzZXIvaW5uZXJIVE1MLXNldHRlci5o
dG1sIiwgIm1ldHJpY3MiOiB7Ik1hbGxvYyI6IHsiY3VycmVudCI6IFtbMzIwMDczOTIuMCwgMzE5
OTM1NjAuMCwgMzE5OTYxNTIuMCwgMjk4OTkzNjAuMCwgMjk4OTkzNjAuMF0sIFszMjAwNzM5Mi4w
LCAzMTk5MzU2OC4wLCAzMTk5NjE2MC4wLCAyOTg5OTQyNC4wLCAyOTg5OTQ4MC4wXSwgWzMyMDEx
NDcyLjAsIDMxOTk3NjQ4LjAsIDMyMDAwMjQwLjAsIDI5ODk5NDA4LjAsIDMzMDQyNzYwLjBdLCBb
MzIwMDczOTIuMCwgMzE5OTM1NjguMCwgMzE5OTYxNjAuMCwgMjk4OTUzMjguMCwgMjk4OTUzMjgu
MF1dfSwgIlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIzNy4xNTQxNTAxOTc2Mjg0NywgMjM3LjQ2NzAx
ODQ2OTY1NywgMjM0Ljk4Njk0NTE2OTcxMjc4LCAyMzcuMTU0MTUwMTk3NjI4NDcsIDIzNy4xNTQx
NTAxOTc2Mjg0N10sIFsyMzguNDEwNTk2MDI2NDkwMDUsIDIzMi41NTgxMzk1MzQ4ODM3LCAyMzcu
NzgwNzEzMzQyMTQwMDIsIDIzOS4zNjE3MDIxMjc2NTk1OCwgMjMzLjQ2MzAzNTAxOTQ1NTI1XSwg
WzIzOC43MjY3OTA0NTA5MjgzOCwgMjM4LjA5NTIzODA5NTIzODEsIDIzOC40MTA1OTYwMjY0OTAw
NSwgMjM5LjM2MTcwMjEyNzY1OTU4LCAyNDAuMDk2MDM4NDE1MzY2MTRdLCBbMjM2Ljg0MjEwNTI2
MzE1NzksIDIzNS4yOTQxMTc2NDcwNTg4LCAyMzAuNzY5MjMwNzY5MjMwNzcsIDIzNC42ODA1NzM2
NjM2MjQ1LCAyMzUuMjk0MTE3NjQ3MDU4OF1dfSwgIkpTSGVhcCI6IHsiY3VycmVudCI6IFtbNjE1
MDQuMCwgNjM3NjAuMCwgNjM4MzIuMCwgNjM5OTIuMCwgNjQwNjQuMF0sIFs2MTUwNC4wLCA2Mzc2
MC4wLCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2NC4wXSwgWzYxNTA0LjAsIDYzNzYwLjAsIDYzODMy
LjAsIDYzOTkyLjAsIDY0MDY0LjBdLCBbNjE1MDQuMCwgNjM3NjAuMCwgNjM4MzIuMCwgNjM5OTIu
MCwgNjQwNjQuMF1dfX19LCAiaHRtbDUtZnVsbC1yZW5kZXIiOiB7InVybCI6ICJodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9QYXJzZXIvaHRtbDUt
ZnVsbC1yZW5kZXIuaHRtbCIsICJtZXRyaWNzIjogeyJNYWxsb2MiOiB7ImN1cnJlbnQiOiBbWzEx
Njc1NjUwNC4wLCAxMTY0MjAyMDAuMCwgMTEzMTg0OTc2LjAsIDExMzI5MzIzMi4wLCAxMTY1MjU1
NjAuMF0sIFsxMTY3NDU5OTIuMCwgMTE3MTUyODQ4LjAsIDExNzA2ODI0MC4wLCAxMTY4NzY0MDAu
MCwgMTE2Njk0OTQ0LjBdLCBbMTE2NjA4OTc2LjAsIDExNjUzMTc3Ni4wLCAxMTY1MTI1NDQuMCwg
MTE2NjYxNzQ0LjAsIDExNjIzNTI5Ni4wXSwgWzExNzI2MDEyMC4wLCAxMTcxNjU5NjAuMCwgMTE3
MjQxMTA0LjAsIDExNzE2NzkxMi4wLCAxMTcwNzQwNDAuMF1dfSwgIkpTSGVhcCI6IHsiY3VycmVu
dCI6IFtbNzI3NzYuMCwgNzk5MjAuMCwgODQ5MTIuMCwgODk5NzYuMCwgOTc0NTYuMF0sIFs3Mjc3
Ni4wLCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3Ni4wLCA5NzQ1Ni4wXSwgWzcyNzc2LjAsIDc5OTIw
LjAsIDg0OTEyLjAsIDg5OTc2LjAsIDk3NDU2LjBdLCBbNzI3NzYuMCwgNzk5MjAuMCwgODQ5MTIu
MCwgODk5NzYuMCwgOTc0NTYuMF1dfSwgIlRpbWUiOiB7ImN1cnJlbnQiOiBbWzQyMzguMCwgNTA0
Ny4wLCA0MjUyLjAsIDUwMTUuMCwgNDI1Ni4wXSwgWzQyNjIuMCwgNTAzMi4wLCA0MjY4LjAsIDUw
MzMuMCwgNDI2NC4wXSwgWzQyNTYuMCwgNTAyNC4wLCA0MjY0LjAsIDUwMjkuMCwgNDI1MS4wXSwg
WzQyMjEuMCwgNTAyNS4wLCA0MjMxLjAsIDUwMjAuMCwgNDI0MC4wXV19fX19fX0sICJkZXNjcmlw
dGlvbiI6ICJXaXRob3V0IHBhdGNoIiwgImJ1aWxkVGltZSI6ICIyMDEzLTA0LTE4VDE0OjQ4OjM4
Ljc4OTc2NSIsICJyZXZpc2lvbnMiOiB7IldlYktpdCI6IHsidGltZXN0YW1wIjogIjIwMTMtMDQt
MThUMDc6MjY6MzVaIiwgInJldmlzaW9uIjogIjE0ODY1OSJ9fX0sIHsidGVzdHMiOiB7IlBhcnNl
ciI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3Jt
YW5jZVRlc3RzL1BhcnNlciIsICJ0ZXN0cyI6IHsiaW5uZXJIVE1MLXNldHRlciI6IHsidXJsIjog
Imh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL1Bh
cnNlci9pbm5lckhUTUwtc2V0dGVyLmh0bWwiLCAibWV0cmljcyI6IHsiTWFsbG9jIjogeyJjdXJy
ZW50IjogW1szMzA1MzUzNi4wLCAzMzAzOTcxMi4wLCAzMzA0MzgxNi4wLCAzMzA0MjY2NC4wLCAz
MzAzODYyNC4wXSwgWzI5OTEwMjQwLjAsIDI5ODk2NDE2LjAsIDI5ODk5MDA4LjAsIDI5ODk5MzY4
LjAsIDI5ODk5NDI0LjBdLCBbMzIwMDczOTIuMCwgMzE5OTM1NjAuMCwgMzE5ODc5MDQuMCwgMjk4
OTExMTIuMCwgMjk4OTExNjguMF0sIFszMjAwNzM5Mi4wLCAzMTk5MzUxMi4wLCAzMTk5NjEwNC4w
LCAyOTg5OTMxMi4wLCAyOTg5OTM2OC4wXV19LCAiUnVucyI6IHsiY3VycmVudCI6IFtbMjQyLjQy
NDI0MjQyNDI0MjQ0LCAyNDIuMTMwNzUwNjA1MzI2ODgsIDIzOS41MjA5NTgwODM4MzIzNCwgMjQy
LjQyNDI0MjQyNDI0MjQ0LCAyNDMuMzA5MDAyNDMzMDkwMDNdLCBbMjMyLjg1ODk5MDk0NDM3MjU4
LCAyMzMuNDYzMDM1MDE5NDU1MjUsIDIyOS41OTE4MzY3MzQ2OTM4OSwgMjMzLjQ2MzAzNTAxOTQ1
NTI1LCAyMzMuMTYwNjIxNzYxNjU4MDRdLCBbMjM3LjE1NDE1MDE5NzYyODQ3LCAyMzcuNDY3MDE4
NDY5NjU3LCAyMzcuMTU0MTUwMTk3NjI4NDcsIDIzNy4xNTQxNTAxOTc2Mjg0NywgMjM4LjcyNjc5
MDQ1MDkyODM4XSwgWzIzOS4wNDM4MjQ3MDExOTUyLCAyMzkuMDQzODI0NzAxMTk1MiwgMjM4LjA5
NTIzODA5NTIzODEsIDIzOS4wNDM4MjQ3MDExOTUyLCAyMzguNDEwNTk2MDI2NDkwMDVdXX0sICJK
U0hlYXAiOiB7ImN1cnJlbnQiOiBbWzYxNTA0LjAsIDYzNzYwLjAsIDYzODMyLjAsIDYzOTkyLjAs
IDY0MDY0LjBdLCBbNjE1MDQuMCwgNjM3NjAuMCwgNjM4MzIuMCwgNjM5OTIuMCwgNjQwNjQuMF0s
IFs2MTUwNC4wLCA2Mzc2MC4wLCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2NC4wXSwgWzYxNTA0LjAs
IDYzNzYwLjAsIDYzODMyLjAsIDYzOTkyLjAsIDY0MDY0LjBdXX19fSwgImh0bWw1LWZ1bGwtcmVu
ZGVyIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZv
cm1hbmNlVGVzdHMvUGFyc2VyL2h0bWw1LWZ1bGwtcmVuZGVyLmh0bWwiLCAibWV0cmljcyI6IHsi
TWFsbG9jIjogeyJjdXJyZW50IjogW1sxMTY4MTY1MjguMCwgMTE2NDMxODg4LjAsIDExNjY1Njc2
MC4wLCAxMTY1MDAyMDAuMCwgMTE2NDA5NzY4LjBdLCBbMTE1OTc1NDMyLjAsIDExNTg5MjY1Ni4w
LCAxMTU4MTU3NjAuMCwgMTE1ODYyNjQwLjAsIDExNTgxMjcyMC4wXSwgWzExNjUyMzIwOC4wLCAx
MTY1MDI4OTYuMCwgMTE2NDcxNjA4LjAsIDExNjI5NDMxMi4wLCAxMTYzNTYwNzIuMF0sIFsxMjQ1
OTMxOTIuMCwgMTE3MDY3ODE2LjAsIDExNjk2ODI4MC4wLCAxMTcwMTQ5NjguMCwgMTE2ODAyOTY4
LjBdXX0sICJKU0hlYXAiOiB7ImN1cnJlbnQiOiBbWzcyNzc2LjAsIDc5OTIwLjAsIDg0OTEyLjAs
IDg5OTc2LjAsIDk3NDU2LjBdLCBbNzI3NzYuMCwgNzk5MjAuMCwgODQ5MTIuMCwgODk5NzYuMCwg
OTc0NTYuMF0sIFs3Mjc3Ni4wLCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3Ni4wLCA5NzQ1Ni4wXSwg
WzcyNzc2LjAsIDc5OTIwLjAsIDg0OTEyLjAsIDg5OTc2LjAsIDk3NDU2LjBdXX0sICJUaW1lIjog
eyJjdXJyZW50IjogW1s0MjQwLjAsIDUwNDQuMCwgNDI3MS4wLCA1MDIxLjAsIDQyOTAuMF0sIFs0
MjMzLjAsIDUwMjAuMCwgNDI1MS4wLCA1MDE3LjAsIDQyNTMuMF0sIFs0MjU3LjAsIDUwMjguMCwg
NDI1MC4wLCA1MDMxLjAsIDQyNjUuMF0sIFs0MjIzLjAsIDQ5OTkuMCwgNDIzOC4wLCA0OTk5LjAs
IDQyMzkuMF1dfX19fX19LCAicmV2aXNpb25zIjogeyJXZWJLaXQiOiB7InRpbWVzdGFtcCI6ICIy
MDEzLTA0LTE4VDA3OjI2OjM1WiIsICJyZXZpc2lvbiI6ICIxNDg2NTkifX0sICJidWlsZFRpbWUi
OiAiMjAxMy0wNC0xOFQxNDo0ODozOC43ODk3NjUiLCAiZGVzY3JpcHRpb24iOiAiV2l0aG91dCBw
YXRjaCJ9LCB7InRlc3RzIjogeyJQYXJzZXIiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQu
b3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9QYXJzZXIiLCAidGVzdHMiOiB7Imlu
bmVySFRNTC1zZXR0ZXIiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIv
dHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9QYXJzZXIvaW5uZXJIVE1MLXNldHRlci5odG1sIiwgIm1l
dHJpY3MiOiB7Ik1hbGxvYyI6IHsiY3VycmVudCI6IFtbMzIwMDczOTIuMCwgMzE5OTM1NjguMCwg
MzE5OTYxNjAuMCwgMjk4OTk0MjQuMCwgMjk4OTk0MjQuMF0sIFsyOTkxMDI0MC4wLCAyOTg5NjQx
Ni4wLCAyOTg5ODk1Mi4wLCAyOTg5NTI1Ni4wLCAyOTg5NTI1Ni4wXSwgWzMyMDA3MzkyLjAsIDMx
OTkzNTY4LjAsIDMxOTk2MTYwLjAsIDI5ODk1MzI4LjAsIDI5ODk1Mzg0LjBdLCBbMzIwMDczODQu
MCwgMzE5OTM1NjAuMCwgMzE5OTYxMzYuMCwgMjk4OTUyNDguMCwgMjk4OTUyNDguMF1dfSwgIlJ1
bnMiOiB7ImN1cnJlbnQiOiBbWzIzNi44NDIxMDUyNjMxNTc5LCAyMzYuMjIwNDcyNDQwOTQ0OSwg
MjMzLjQ2MzAzNTAxOTQ1NTI1LCAyMzUuOTEwODc4MTEyNzEyOTYsIDIzNi4yMjA0NzI0NDA5NDQ5
XSwgWzIzNC4wNzAyMjEwNjYzMTk5LCAyMzQuOTg2OTQ1MTY5NzEyNzgsIDIzNC4wNzAyMjEwNjYz
MTk5LCAyMzQuMzc1LCAyMzQuMzc1XSwgWzIzNy43ODA3MTMzNDIxNDAwMiwgMjM4LjA5NTIzODA5
NTIzODEsIDIzNy4xNTQxNTAxOTc2Mjg0NywgMjM4LjcyNjc5MDQ1MDkyODM4LCAyMzYuNTMwODgw
NDIwNDk5MzNdLCBbMjM3LjQ2NzAxODQ2OTY1NywgMjM3Ljc4MDcxMzM0MjE0MDAyLCAyMzQuMzc1
LCAyMzcuNzgwNzEzMzQyMTQwMDIsIDIzNy40NjcwMTg0Njk2NTddXX0sICJKU0hlYXAiOiB7ImN1
cnJlbnQiOiBbWzYxNTA0LjAsIDYzNzYwLjAsIDYzODMyLjAsIDYzOTkyLjAsIDY0MDY0LjBdLCBb
NjE1MDQuMCwgNjM3NjAuMCwgNjM4MzIuMCwgNjM5OTIuMCwgNjQwNjQuMF0sIFs2MTUwNC4wLCA2
Mzc2MC4wLCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2NC4wXSwgWzYxNTA0LjAsIDYzNzYwLjAsIDYz
ODMyLjAsIDYzOTkyLjAsIDY0MDY0LjBdXX19fSwgImh0bWw1LWZ1bGwtcmVuZGVyIjogeyJ1cmwi
OiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMv
UGFyc2VyL2h0bWw1LWZ1bGwtcmVuZGVyLmh0bWwiLCAibWV0cmljcyI6IHsiTWFsbG9jIjogeyJj
dXJyZW50IjogW1sxMTYzMDU5NDQuMCwgMTE2MTI4MjY0LjAsIDExMzAzOTU4NC4wLCAxMTY1MDIy
NDguMCwgMTE2MzU5NzQ0LjBdLCBbMTE2MzY3MzUyLjAsIDExNjMwNDA4MC4wLCAxMTYwNTg3ODQu
MCwgMTE2MTE0MTA0LjAsIDExNjUwMzU1Mi4wXSwgWzExNzc0NzUyOC4wLCAxMTY1Mzk1MjguMCwg
MTEzMTc0MDY0LjAsIDExMzMzODI1Ni4wLCAxMTMzMDAwMDguMF0sIFsxMTY5NTY5OTIuMCwgMTE2
NjI1MTA0LjAsIDExNjgzNTk3Ni4wLCAxMTY5NTA4ODguMCwgMTE2NzY3NDcyLjBdXX0sICJKU0hl
YXAiOiB7ImN1cnJlbnQiOiBbWzcyNzc2LjAsIDc5OTIwLjAsIDg0OTEyLjAsIDg5OTc2LjAsIDk3
NDU2LjBdLCBbNzI3NzYuMCwgNzk5MjAuMCwgODQ5MTIuMCwgODk5NzYuMCwgOTc0NTYuMF0sIFs3
Mjc3Ni4wLCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3Ni4wLCA5NzQ1Ni4wXSwgWzcyNzc2LjAsIDc5
OTIwLjAsIDg0OTEyLjAsIDg5OTc2LjAsIDk3NDU2LjBdXX0sICJUaW1lIjogeyJjdXJyZW50Ijog
W1s0MjQ5LjAsIDUwNTAuMCwgNDI1MS4wLCA1MDMxLjAsIDQyODUuMF0sIFs0Mjg3LjAsIDUwMzEu
MCwgNDIzNS4wLCA1MDI0LjAsIDQyNDAuMF0sIFs0MjQ4LjAsIDUwNDAuMCwgNDI1MC4wLCA1MDIw
LjAsIDQyNTkuMF0sIFs0MjcyLjAsIDUwMzguMCwgNDI1NC4wLCA1MDM2LjAsIDQyNjIuMF1dfX19
fX19LCAiYnVpbGRUaW1lIjogIjIwMTMtMDQtMThUMTQ6NDg6MzguNzg5NzY1IiwgImRlc2NyaXB0
aW9uIjogIldpdGhvdXQgcGF0Y2giLCAicmV2aXNpb25zIjogeyJXZWJLaXQiOiB7InRpbWVzdGFt
cCI6ICIyMDEzLTA0LTE4VDA3OjI2OjM1WiIsICJyZXZpc2lvbiI6ICIxNDg2NTkifX19LCB7InRl
c3RzIjogeyJQYXJzZXIiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIv
dHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9QYXJzZXIiLCAidGVzdHMiOiB7ImlubmVySFRNTC1zZXR0
ZXIiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9y
bWFuY2VUZXN0cy9QYXJzZXIvaW5uZXJIVE1MLXNldHRlci5odG1sIiwgIm1ldHJpY3MiOiB7Ik1h
bGxvYyI6IHsiY3VycmVudCI6IFtbMzIwMDczNzYuMCwgMzE5OTM0OTYuMCwgMzE5OTE5OTIuMCwg
Mjk4OTUyNTYuMCwgMjk4OTUzMTIuMF0sIFszMjAwNzM5Mi4wLCAzMTk5MzUxMi4wLCAzMTk5NjEw
NC4wLCAyOTg5NTI1Ni4wLCAyOTg5NTI1Ni4wXSwgWzMyMDA3MzkyLjAsIDMxOTkzNTY4LjAsIDMx
OTk2MTYwLjAsIDI5ODk5NDI0LjAsIDI5ODk5NDI0LjBdLCBbMzIwMTE0NzIuMCwgMzE5OTc2NDgu
MCwgMzIwMDAyNDAuMCwgMjk4OTkzNTIuMCwgMjk4OTk0MDguMF1dfSwgIlJ1bnMiOiB7ImN1cnJl
bnQiOiBbWzI0MC4wLCAyNDAuMCwgMjM4LjA5NTIzODA5NTIzODEsIDIzOS4wNDM4MjQ3MDExOTUy
LCAyMzkuNjgwNDI2MDk4NTM1M10sIFsyMzkuNjgwNDI2MDk4NTM1MywgMjM5LjY4MDQyNjA5ODUz
NTMsIDIzOC43MjY3OTA0NTA5MjgzOCwgMjQwLjAsIDI0MC4wXSwgWzIzNS42MDIwOTQyNDA4Mzc3
LCAyMzYuNTMwODgwNDIwNDk5MzMsIDIzNS4yOTQxMTc2NDcwNTg4LCAyMzUuOTEwODc4MTEyNzEy
OTYsIDIzNi41MzA4ODA0MjA0OTkzM10sIFsyMzkuMDQzODI0NzAxMTk1MiwgMjM4LjQxMDU5NjAy
NjQ5MDA1LCAyMzUuOTEwODc4MTEyNzEyOTYsIDIzOS4wNDM4MjQ3MDExOTUyLCAyMzguMDk1MjM4
MDk1MjM4MV1dfSwgIkpTSGVhcCI6IHsiY3VycmVudCI6IFtbNjE1MDQuMCwgNjM3NjAuMCwgNjM4
MzIuMCwgNjM5OTIuMCwgNjQwNjQuMF0sIFs2MTUwNC4wLCA2Mzc2MC4wLCA2MzgzMi4wLCA2Mzk5
Mi4wLCA2NDA2NC4wXSwgWzYxNTA0LjAsIDYzNzYwLjAsIDYzODMyLjAsIDYzOTkyLjAsIDY0MDY0
LjBdLCBbNjE1MDQuMCwgNjM3NjAuMCwgNjM4MzIuMCwgNjM5OTIuMCwgNjQwNjQuMF1dfX19LCAi
aHRtbDUtZnVsbC1yZW5kZXIiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dz
ZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9QYXJzZXIvaHRtbDUtZnVsbC1yZW5kZXIuaHRtbCIs
ICJtZXRyaWNzIjogeyJNYWxsb2MiOiB7ImN1cnJlbnQiOiBbWzExNjMyNzEzNi4wLCAxMTY0OTQw
NzIuMCwgMTE2MjQ2NjcyLjAsIDExNjQwMjA2NC4wLCAxMTYyNDY1MjguMF0sIFsxMTY3MjQzNTIu
MCwgMTE2NjM0MTI4LjAsIDExNjU3MzQ4MC4wLCAxMTY1OTcyOTYuMCwgMTE2MzkxNTc2LjBdLCBb
MTI0MjgwNDA4LjAsIDExNjkwMzg3Mi4wLCAxMTMwODA3MjguMCwgMTEzMjgzMzc2LjAsIDExNjUw
ODIwMC4wXSwgWzExNzE2MTUyMC4wLCAxMTY1OTEyMTYuMCwgMTE2NDc1MTY4LjAsIDExNjU4MjI5
Ni4wLCAxMTQwMDg2MTYuMF1dfSwgIkpTSGVhcCI6IHsiY3VycmVudCI6IFtbNzI3NzYuMCwgNzk5
MjAuMCwgODQ5MTIuMCwgODk5NzYuMCwgOTc0NTYuMF0sIFs3Mjc3Ni4wLCA3OTkyMC4wLCA4NDkx
Mi4wLCA4OTk3Ni4wLCA5NzQ1Ni4wXSwgWzcyNzc2LjAsIDc5OTIwLjAsIDg0OTEyLjAsIDg5OTc2
LjAsIDk3NDU2LjBdLCBbNzI3NzYuMCwgNzk5MjAuMCwgODQ5MTIuMCwgODk5NzYuMCwgOTc0NTYu
MF1dfSwgIlRpbWUiOiB7ImN1cnJlbnQiOiBbWzQyNDEuMCwgNTAxMi4wLCA0MjQ0LjAsIDUwNTUu
MCwgNDI4OS4wXSwgWzQyMzkuMCwgNTAxNC4wLCA0MjQ0LjAsIDUwNTMuMCwgNDI0My4wXSwgWzQy
MzguMCwgNTAwOC4wLCA0MjQyLjAsIDUwMzUuMCwgNDI0Ni4wXSwgWzQyMTUuMCwgNTAxNC4wLCA0
MjE5LjAsIDUwMDkuMCwgNDI0Mi4wXV19fX19fX0sICJkZXNjcmlwdGlvbiI6ICJXaXRob3V0IHBh
dGNoIiwgImJ1aWxkVGltZSI6ICIyMDEzLTA0LTE4VDE0OjQ4OjM4Ljc4OTc2NSIsICJyZXZpc2lv
bnMiOiB7IldlYktpdCI6IHsidGltZXN0YW1wIjogIjIwMTMtMDQtMThUMDc6MjY6MzVaIiwgInJl
dmlzaW9uIjogIjE0ODY1OSJ9fX0sIHsidGVzdHMiOiB7IlBhcnNlciI6IHsidXJsIjogImh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL1BhcnNlciIs
ICJ0ZXN0cyI6IHsiaW5uZXJIVE1MLXNldHRlciI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtp
dC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL1BhcnNlci9pbm5lckhUTUwtc2V0
dGVyLmh0bWwiLCAibWV0cmljcyI6IHsiTWFsbG9jIjogeyJjdXJyZW50IjogW1szMjAwMzEyMC4w
LCAzMTk4OTI5Ni4wLCAzMTk5MTg4OC4wLCAyOTg5NTE1Mi4wLCAyOTg5NTIwOC4wXSwgWzI5OTA1
OTUyLjAsIDI5ODkyMTI4LjAsIDI5ODk0NzIwLjAsIDI5ODkwOTg0LjAsIDI5ODkwOTg0LjBdLCBb
MzIwMDcyMTYuMCwgMzE5OTMzMzYuMCwgMzE5OTU5MjguMCwgMjk4OTUwNDAuMCwgMjk4OTUwOTYu
MF0sIFszMjAwMzEyMC4wLCAzMTk4OTI5Ni4wLCAzMTk5MTg4OC4wLCAyOTg5NTA5Ni4wLCAyOTg5
NTE0NC4wXV19LCAiUnVucyI6IHsiY3VycmVudCI6IFtbMjM4LjQxMDU5NjAyNjQ5MDA1LCAyMzYu
ODQyMTA1MjYzMTU3OSwgMjM0LjA3MDIyMTA2NjMxOTksIDIzNy4xNTQxNTAxOTc2Mjg0NywgMjM4
LjA5NTIzODA5NTIzODFdLCBbMjM0Ljk4Njk0NTE2OTcxMjc4LCAyMzQuNjgwNTczNjYzNjI0NSwg
MjMyLjI1ODA2NDUxNjEyOTAyLCAyMzQuOTg2OTQ1MTY5NzEyNzgsIDIzNC45ODY5NDUxNjk3MTI3
OF0sIFsyMzUuNjAyMDk0MjQwODM3NywgMjM1LjYwMjA5NDI0MDgzNzcsIDIzNS45MTA4NzgxMTI3
MTI5NiwgMjM1LjkxMDg3ODExMjcxMjk2LCAyMzYuODQyMTA1MjYzMTU3OV0sIFsyMzguNDEwNTk2
MDI2NDkwMDUsIDIzNy43ODA3MTMzNDIxNDAwMiwgMjM1LjI5NDExNzY0NzA1ODgsIDIzNy43ODA3
MTMzNDIxNDAwMiwgMjM3LjQ2NzAxODQ2OTY1N11dfSwgIkpTSGVhcCI6IHsiY3VycmVudCI6IFtb
NjE1MDQuMCwgNjM3NjAuMCwgNjM4MzIuMCwgNjM5OTIuMCwgNjQwNjQuMF0sIFs2MTUwNC4wLCA2
Mzc2MC4wLCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2NC4wXSwgWzYxNTA0LjAsIDYzNzYwLjAsIDYz
ODMyLjAsIDYzOTkyLjAsIDY0MDY0LjBdLCBbNjE1MDQuMCwgNjM3NjAuMCwgNjM4MzIuMCwgNjM5
OTIuMCwgNjQwNjQuMF1dfX19LCAiaHRtbDUtZnVsbC1yZW5kZXIiOiB7InVybCI6ICJodHRwOi8v
dHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9QYXJzZXIvaHRt
bDUtZnVsbC1yZW5kZXIuaHRtbCIsICJtZXRyaWNzIjogeyJNYWxsb2MiOiB7ImN1cnJlbnQiOiBb
WzExNzgwNDkyOC4wLCAxMTc2OTA4MDAuMCwgMTE3NTg1MDQwLjAsIDExNzY2MDIwOC4wLCAxMTc0
ODc3ODQuMF0sIFsxMTcyNjAzMDQuMCwgMTE3MDExMTYwLjAsIDExNjkxOTE3Ni4wLCAxMTcxMzM3
MjguMCwgMTE2OTcwMTkyLjBdLCBbMTE3MDQzNDA4LjAsIDExNjg1NDU4NC4wLCAxMTY4NTMzNTIu
MCwgMTE3MDUxNTA0LjAsIDExNjYzMTY3Mi4wXSwgWzExNjUxMjgwOC4wLCAxMTY2MDQ1MjguMCwg
MTE2NTQxMDQ4LjAsIDExNjczMTQ5Ni4wLCAxMTYzNDYwNzIuMF1dfSwgIkpTSGVhcCI6IHsiY3Vy
cmVudCI6IFtbNzI3NzYuMCwgNzk5MjAuMCwgODQ5MTIuMCwgODk5NzYuMCwgOTc0NTYuMF0sIFs3
Mjc3Ni4wLCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3Ni4wLCA5NzQ1Ni4wXSwgWzcyNzc2LjAsIDc5
OTIwLjAsIDg0OTEyLjAsIDg5OTc2LjAsIDk3NDU2LjBdLCBbNzI3NzYuMCwgNzk5MjAuMCwgODQ5
MTIuMCwgODk5NzYuMCwgOTc0NTYuMF1dfSwgIlRpbWUiOiB7ImN1cnJlbnQiOiBbWzQyNjUuMCwg
NTA0MS4wLCA0MjY2LjAsIDUwMzcuMCwgNDI4Ni4wXSwgWzQyNTMuMCwgNTAyOS4wLCA0MjYxLjAs
IDUwMjMuMCwgNDI2NC4wXSwgWzQyNjkuMCwgNTA1MS4wLCA0MjU1LjAsIDUwNDQuMCwgNDI3My4w
XSwgWzQyNzUuMCwgNTAzNy4wLCA0Mjc2LjAsIDUwMzkuMCwgNDI2OS4wXV19fX19fX0sICJyZXZp
c2lvbnMiOiB7IldlYktpdCI6IHsidGltZXN0YW1wIjogIjIwMTMtMDQtMThUMDc6MjY6MzVaIiwg
InJldmlzaW9uIjogIjE0ODY1OSJ9fSwgImJ1aWxkVGltZSI6ICIyMDEzLTA0LTE4VDE1OjAwOjQ5
LjE0MTE2MSIsICJkZXNjcmlwdGlvbiI6ICJXaXRoIHBhdGNoIn0sIHsidGVzdHMiOiB7IlBhcnNl
ciI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3Jt
YW5jZVRlc3RzL1BhcnNlciIsICJ0ZXN0cyI6IHsiaW5uZXJIVE1MLXNldHRlciI6IHsidXJsIjog
Imh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL1Bh
cnNlci9pbm5lckhUTUwtc2V0dGVyLmh0bWwiLCAibWV0cmljcyI6IHsiTWFsbG9jIjogeyJjdXJy
ZW50IjogW1szMzA2MTQ3Mi4wLCAzMzA0NzY0OC4wLCAzMzA1MDE1Mi4wLCAzMzA1MDYwMC4wLCAz
MzA1MDYwMC4wXSwgWzMzMDUzMjk2LjAsIDMzMDM5NDcyLjAsIDMzMDM5NDgwLjAsIDMzMDM4MzI4
LjAsIDMzMDM4Mzg0LjBdLCBbMjk5MDU5NjguMCwgMjk4OTIxMjguMCwgMjk4OTQ3MjAuMCwgMjk4
OTEwNDAuMCwgMjk4OTEwOTYuMF0sIFszMjAwMzEyMC4wLCAzMTk4OTI4MC4wLCAzMTk4Nzc3Ni4w
LCAyOTg5MTA0MC4wLCAyOTg5MTA0MC4wXV19LCAiUnVucyI6IHsiY3VycmVudCI6IFtbMjQxLjI1
NDUyMzUyMjMxNjA1LCAyNDAuOTYzODU1NDIxNjg2NzYsIDIzOS42ODA0MjYwOTg1MzUzLCAyNDEu
MjU0NTIzNTIyMzE2MDUsIDI0MC45NjM4NTU0MjE2ODY3Nl0sIFsyNDEuODM3OTY4NTYxMDY0MSwg
MjQyLjEzMDc1MDYwNTMyNjg4LCAyNDAuNjczODg2ODgzMjczMTYsIDI0Mi4xMzA3NTA2MDUzMjY4
OCwgMjQzLjAxMzM2NTczNTExNTQzXSwgWzIzNC45ODY5NDUxNjk3MTI3OCwgMjM0LjM3NSwgMjMz
Ljc2NjIzMzc2NjIzMzc3LCAyMzIuMjU4MDY0NTE2MTI5MDIsIDIzNS4yOTQxMTc2NDcwNTg4XSwg
WzIzOS4zNjE3MDIxMjc2NTk1OCwgMjQwLjAsIDIzOS4wNDM4MjQ3MDExOTUyLCAyMzguNzI2Nzkw
NDUwOTI4MzgsIDIzOS4wNDM4MjQ3MDExOTUyXV19LCAiSlNIZWFwIjogeyJjdXJyZW50IjogW1s2
MTUwNC4wLCA2Mzc2MC4wLCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2NC4wXSwgWzYxNTA0LjAsIDYz
NzYwLjAsIDYzODMyLjAsIDYzOTkyLjAsIDY0MDY0LjBdLCBbNjE1MDQuMCwgNjM3NjAuMCwgNjM4
MzIuMCwgNjM5OTIuMCwgNjQwNjQuMF0sIFs2MTUwNC4wLCA2Mzc2MC4wLCA2MzgzMi4wLCA2Mzk5
Mi4wLCA2NDA2NC4wXV19fX0sICJodG1sNS1mdWxsLXJlbmRlciI6IHsidXJsIjogImh0dHA6Ly90
cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL1BhcnNlci9odG1s
NS1mdWxsLXJlbmRlci5odG1sIiwgIm1ldHJpY3MiOiB7Ik1hbGxvYyI6IHsiY3VycmVudCI6IFtb
MTE2ODM4Mjg4LjAsIDExNjc0NDIwOC4wLCAxMTY1OTQ4NTYuMCwgMTE2NzUwMjQ4LjAsIDExNzQ0
NDgxNi4wXSwgWzEyMzg4MDQ4OC4wLCAxMTYyNzMyOTYuMCwgMTE2MTg1MzUyLjAsIDExNjMwNTIw
MC4wLCAxMTYxODA2NjQuMF0sIFsxMTYyOTMyOTYuMCwgMTE1OTU2MzY4LjAsIDExNjI2MzAwOC4w
LCAxMTYxNzU4MjQuMCwgMTE2MDQwNjcyLjBdLCBbMTE2Nzg1MTc2LjAsIDExNjYzMzc0NC4wLCAx
MTY1MDEwOTYuMCwgMTE2Nzg4NjA4LjAsIDExNjU3ODQ1Ni4wXV19LCAiSlNIZWFwIjogeyJjdXJy
ZW50IjogW1s3Mjc3Ni4wLCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3Ni4wLCA5NzQ1Ni4wXSwgWzcy
Nzc2LjAsIDc5OTIwLjAsIDg0OTEyLjAsIDg5OTc2LjAsIDk3NDU2LjBdLCBbNzI3NzYuMCwgNzk5
MjAuMCwgODQ5MTIuMCwgODk5NzYuMCwgOTc0NTYuMF0sIFs3Mjc3Ni4wLCA3OTkyMC4wLCA4NDkx
Mi4wLCA4OTk3Ni4wLCA5NzQ1Ni4wXV19LCAiVGltZSI6IHsiY3VycmVudCI6IFtbNDI1Ny4wLCA1
MDM3LjAsIDQyNTQuMCwgNTAxMS4wLCA0MjQ3LjBdLCBbNDI4NS4wLCA1MDYyLjAsIDQyNzQuMCwg
NTA1MC4wLCA0MjgzLjBdLCBbNDI0Ny4wLCA1MDUyLjAsIDQyNjkuMCwgNTAyNC4wLCA0MjUyLjBd
LCBbNDI3OS4wLCA1MDQ4LjAsIDQyNzcuMCwgNTA0Mi4wLCA0Mjk1LjBdXX19fX19fSwgImJ1aWxk
VGltZSI6ICIyMDEzLTA0LTE4VDE1OjAwOjQ5LjE0MTE2MSIsICJkZXNjcmlwdGlvbiI6ICJXaXRo
IHBhdGNoIiwgInJldmlzaW9ucyI6IHsiV2ViS2l0IjogeyJ0aW1lc3RhbXAiOiAiMjAxMy0wNC0x
OFQwNzoyNjozNVoiLCAicmV2aXNpb24iOiAiMTQ4NjU5In19fSwgeyJ0ZXN0cyI6IHsiUGFyc2Vy
IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1h
bmNlVGVzdHMvUGFyc2VyIiwgInRlc3RzIjogeyJpbm5lckhUTUwtc2V0dGVyIjogeyJ1cmwiOiAi
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvUGFy
c2VyL2lubmVySFRNTC1zZXR0ZXIuaHRtbCIsICJtZXRyaWNzIjogeyJNYWxsb2MiOiB7ImN1cnJl
bnQiOiBbWzMyMDAzMTIwLjAsIDMxOTg5Mjk2LjAsIDMxOTkxODg4LjAsIDI5ODk1MTUyLjAsIDI5
ODk1MjA4LjBdLCBbMzIwMTUzOTIuMCwgMzIwMDE1NjguMCwgMzIwMDQxNjAuMCwgMjk5MDMzMjAu
MCwgMjk5MDMzMjAuMF0sIFszMjAxMTI5Ni4wLCAzMTk5NzQ3Mi4wLCAzMjAwMDA1Ni4wLCAyOTg5
OTE2OC4wLCAyOTg5OTE2OC4wXSwgWzI5OTA1OTY4LjAsIDI5ODkyMTQ0LjAsIDI5ODk0NzM2LjAs
IDI5ODk1MTUyLjAsIDI5ODk1MjA4LjBdXX0sICJSdW5zIjogeyJjdXJyZW50IjogW1syMzkuMDQz
ODI0NzAxMTk1MiwgMjM4LjA5NTIzODA5NTIzODEsIDIzNS45MTA4NzgxMTI3MTI5NiwgMjM2Ljg0
MjEwNTI2MzE1NzksIDIzNy43ODA3MTMzNDIxNDAwMl0sIFsyMzYuMjIwNDcyNDQwOTQ0OSwgMjM2
LjUzMDg4MDQyMDQ5OTMzLCAyMzQuMDcwMjIxMDY2MzE5OSwgMjM3LjQ2NzAxODQ2OTY1NywgMjM3
LjQ2NzAxODQ2OTY1N10sIFsyMzcuNzgwNzEzMzQyMTQwMDIsIDIzNi4yMjA0NzI0NDA5NDQ5LCAy
MzcuNDY3MDE4NDY5NjU3LCAyMzcuNzgwNzEzMzQyMTQwMDIsIDIzNy43ODA3MTMzNDIxNDAwMl0s
IFsyMzYuNTMwODgwNDIwNDk5MzMsIDIzOC4wOTUyMzgwOTUyMzgxLCAyMzUuOTEwODc4MTEyNzEy
OTYsIDIzOC43MjY3OTA0NTA5MjgzOCwgMjM4LjQxMDU5NjAyNjQ5MDA1XV19LCAiSlNIZWFwIjog
eyJjdXJyZW50IjogW1s2MTUwNC4wLCA2Mzc2MC4wLCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2NC4w
XSwgWzYxNTA0LjAsIDYzNzYwLjAsIDYzODMyLjAsIDYzOTkyLjAsIDY0MDY0LjBdLCBbNjE1MDQu
MCwgNjM3NjAuMCwgNjM4MzIuMCwgNjM5OTIuMCwgNjQwNjQuMF0sIFs2MTUwNC4wLCA2Mzc2MC4w
LCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2NC4wXV19fX0sICJodG1sNS1mdWxsLXJlbmRlciI6IHsi
dXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRl
c3RzL1BhcnNlci9odG1sNS1mdWxsLXJlbmRlci5odG1sIiwgIm1ldHJpY3MiOiB7Ik1hbGxvYyI6
IHsiY3VycmVudCI6IFtbMTE3MDAyMjcyLjAsIDExNjkzMjgxNi4wLCAxMTY4NTc0NzIuMCwgMTE2
OTA1NTkyLjAsIDExNjY3Njg4MC4wXSwgWzExNjU2ODE3Ni4wLCAxMTY0OTA2ODAuMCwgMTE2MzEw
NzIwLjAsIDExNjQwODI4MC4wLCAxMTYwNTQ1NTIuMF0sIFsxMTY4ODc2ODAuMCwgMTE2NzQ0ODQw
LjAsIDExNjg3MjA4MC4wLCAxMTY3MzIxODQuMCwgMTE2NjM5NzYwLjBdLCBbMTE2NjU3NjA4LjAs
IDExNjM2NDgwMC4wLCAxMTY1MjY3MTIuMCwgMTE2NTA2NDgwLjAsIDExNjM4NTIxNi4wXV19LCAi
SlNIZWFwIjogeyJjdXJyZW50IjogW1s3Mjc3Ni4wLCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3Ni4w
LCA5NzQ1Ni4wXSwgWzcyNzc2LjAsIDc5OTIwLjAsIDg0OTEyLjAsIDg5OTc2LjAsIDk3NDU2LjBd
LCBbNzI3NzYuMCwgNzk5MjAuMCwgODQ5MTIuMCwgODk5NzYuMCwgOTc0NTYuMF0sIFs3Mjc3Ni4w
LCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3Ni4wLCA5NzQ1Ni4wXV19LCAiVGltZSI6IHsiY3VycmVu
dCI6IFtbNDI5OS4wLCA1MjM5LjAsIDQzMjguMCwgNTA1OC4wLCA0MjY5LjBdLCBbNDI4Ny4wLCA1
MDU2LjAsIDQyODMuMCwgNTA0Mi4wLCA0Mjg1LjBdLCBbNDI4MC4wLCA1MDU1LjAsIDQyODEuMCwg
NTA1NS4wLCA0Mjg2LjBdLCBbNDI1Mi4wLCA1MDM0LjAsIDQyNjcuMCwgNTAzNS4wLCA0MjczLjBd
XX19fX19fSwgImRlc2NyaXB0aW9uIjogIldpdGggcGF0Y2giLCAiYnVpbGRUaW1lIjogIjIwMTMt
MDQtMThUMTU6MDA6NDkuMTQxMTYxIiwgInJldmlzaW9ucyI6IHsiV2ViS2l0IjogeyJ0aW1lc3Rh
bXAiOiAiMjAxMy0wNC0xOFQwNzoyNjozNVoiLCAicmV2aXNpb24iOiAiMTQ4NjU5In19fSwgeyJ0
ZXN0cyI6IHsiUGFyc2VyIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2Vy
L3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvUGFyc2VyIiwgInRlc3RzIjogeyJpbm5lckhUTUwtc2V0
dGVyIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZv
cm1hbmNlVGVzdHMvUGFyc2VyL2lubmVySFRNTC1zZXR0ZXIuaHRtbCIsICJtZXRyaWNzIjogeyJN
YWxsb2MiOiB7ImN1cnJlbnQiOiBbWzMyMDAzMTIwLjAsIDMxOTg5Mjk2LjAsIDMxOTkxODg4LjAs
IDI5ODkxMDU2LjAsIDI5ODkxMTEyLjBdLCBbMjk5MDU5NjguMCwgMjk4OTIwODguMCwgMjk4OTQ2
NjQuMCwgMjk4OTUwMjQuMCwgMjk4OTUwMjQuMF0sIFszMzA1MzI5Ni4wLCAzMzAzOTQ3Mi4wLCAz
MzAzOTQyNC4wLCAzMzAzODMyMC4wLCAzMzAzODMyMC4wXSwgWzMyMDAzMTIwLjAsIDMxOTg5Mjk2
LjAsIDMxOTkxODg4LjAsIDI5ODk1MTUyLjAsIDI5ODk1MjA4LjBdXX0sICJSdW5zIjogeyJjdXJy
ZW50IjogW1syMzYuODQyMTA1MjYzMTU3OSwgMjM3Ljc4MDcxMzM0MjE0MDAyLCAyMzUuNjAyMDk0
MjQwODM3NywgMjM3LjE1NDE1MDE5NzYyODQ3LCAyMzYuNTMwODgwNDIwNDk5MzNdLCBbMjM1LjYw
MjA5NDI0MDgzNzcsIDIzNS42MDIwOTQyNDA4Mzc3LCAyMzQuMzc1LCAyMzQuMzc1LCAyMzUuNjAy
MDk0MjQwODM3N10sIFsyNDMuMzA5MDAyNDMzMDkwMDMsIDI0Mi43MTg0NDY2MDE5NDE3NCwgMjQz
LjMwOTAwMjQzMzA5MDAzLCAyNDMuNjA1MzU5MzE3OTA1LCAyNDMuNjA1MzU5MzE3OTA1XSwgWzIz
Ni41MzA4ODA0MjA0OTkzMywgMjM2LjIyMDQ3MjQ0MDk0NDksIDIzNC42ODA1NzM2NjM2MjQ1LCAy
MzYuODQyMTA1MjYzMTU3OSwgMjM3Ljc4MDcxMzM0MjE0MDAyXV19LCAiSlNIZWFwIjogeyJjdXJy
ZW50IjogW1s2MTUwNC4wLCA2Mzc2MC4wLCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2NC4wXSwgWzYx
NTA0LjAsIDYzNzYwLjAsIDYzODMyLjAsIDYzOTkyLjAsIDY0MDY0LjBdLCBbNjE1MDQuMCwgNjM3
NjAuMCwgNjM4MzIuMCwgNjM5OTIuMCwgNjQwNjQuMF0sIFs2MTUwNC4wLCA2Mzc2MC4wLCA2Mzgz
Mi4wLCA2Mzk5Mi4wLCA2NDA2NC4wXV19fX0sICJodG1sNS1mdWxsLXJlbmRlciI6IHsidXJsIjog
Imh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL1Bh
cnNlci9odG1sNS1mdWxsLXJlbmRlci5odG1sIiwgIm1ldHJpY3MiOiB7Ik1hbGxvYyI6IHsiY3Vy
cmVudCI6IFtbMTE2Nzg4ODMyLjAsIDExNjY0MDI4OC4wLCAxMTY3NDAzNjguMCwgMTE2Mzk2ODgw
LjAsIDExNjg3MTk0NC4wXSwgWzEyMzQ5Nzg0MC4wLCAxMTYxNDEzOTIuMCwgMTE2MDk2OTIwLjAs
IDExNjIzNjg0MC4wLCAxMTYwMzUyNTYuMF0sIFsxMTY3NDQwNDguMCwgMTE2NzIzNzg0LjAsIDEx
NzAwNzE0NC4wLCAxMTY3OTA0NTYuMCwgMTE2NDA3NDY0LjBdLCBbMTIzNzE1MzEyLjAsIDExNTk4
NDg2NC4wLCAxMTU5NTA2NTYuMCwgMTE2MDg5NTA0LjAsIDExNjI0MjA0OC4wXV19LCAiSlNIZWFw
IjogeyJjdXJyZW50IjogW1s3Mjc3Ni4wLCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3Ni4wLCA5NzQ1
Ni4wXSwgWzcyNzc2LjAsIDc5OTIwLjAsIDg0OTEyLjAsIDg5OTc2LjAsIDk3NDU2LjBdLCBbNzI3
NzYuMCwgNzk5MjAuMCwgODQ5MTIuMCwgODk5NzYuMCwgOTc0NTYuMF0sIFs3Mjc3Ni4wLCA3OTky
MC4wLCA4NDkxMi4wLCA4OTk3Ni4wLCA5NzQ1Ni4wXV19LCAiVGltZSI6IHsiY3VycmVudCI6IFtb
NDI1NC4wLCA1MDQ0LjAsIDQyNTEuMCwgNTAyNC4wLCA0MjU3LjBdLCBbNDI3Ni4wLCA1MDUyLjAs
IDQyODMuMCwgNTA1NC4wLCA0Mjg4LjBdLCBbNDI2Ny4wLCA1MDU2LjAsIDQyNTYuMCwgNTA3OS4w
LCA0MjcwLjBdLCBbNDI4NS4wLCA1MDY4LjAsIDQyODguMCwgNTA1NC4wLCA0Mjg4LjBdXX19fX19
fSwgInJldmlzaW9ucyI6IHsiV2ViS2l0IjogeyJ0aW1lc3RhbXAiOiAiMjAxMy0wNC0xOFQwNzoy
NjozNVoiLCAicmV2aXNpb24iOiAiMTQ4NjU5In19LCAiYnVpbGRUaW1lIjogIjIwMTMtMDQtMThU
MTU6MDA6NDkuMTQxMTYxIiwgImRlc2NyaXB0aW9uIjogIldpdGggcGF0Y2gifSwgeyJ0ZXN0cyI6
IHsiUGFyc2VyIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5r
L1BlcmZvcm1hbmNlVGVzdHMvUGFyc2VyIiwgInRlc3RzIjogeyJpbm5lckhUTUwtc2V0dGVyIjog
eyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNl
VGVzdHMvUGFyc2VyL2lubmVySFRNTC1zZXR0ZXIuaHRtbCIsICJtZXRyaWNzIjogeyJNYWxsb2Mi
OiB7ImN1cnJlbnQiOiBbWzI5OTA1OTY4LjAsIDI5ODkyMTQ0LjAsIDI5ODk0NzM2LjAsIDI5ODk1
MTUyLjAsIDI5ODk1MTUyLjBdLCBbMzIwMDMxMjAuMCwgMzE5ODkyOTYuMCwgMzE5ODc3OTIuMCwg
Mjk4OTEwNTYuMCwgMjk4OTEwNTYuMF0sIFszMjAwMzEyMC4wLCAzMTk4NTIwMC4wLCAzMTk4Nzc5
Mi4wLCAyOTg5MTA1Ni4wLCAyOTg5MTA1Ni4wXSwgWzMyMDAzMTIwLjAsIDMxOTg5Mjk2LjAsIDMx
OTkxODg4LjAsIDI5ODk1MDk2LjAsIDI5ODkxMDQwLjBdXX0sICJSdW5zIjogeyJjdXJyZW50Ijog
W1syMzIuMjU4MDY0NTE2MTI5MDIsIDIzMS42NjAyMzE2NjAyMzE2NiwgMjMxLjA2NTQ2ODU0OTQy
MjM1LCAyMzIuNTU4MTM5NTM0ODgzNywgMjMyLjU1ODEzOTUzNDg4MzddLCBbMjM3LjE1NDE1MDE5
NzYyODQ3LCAyMzcuNzgwNzEzMzQyMTQwMDIsIDIzNi44NDIxMDUyNjMxNTc5LCAyMzguNzI2Nzkw
NDUwOTI4MzgsIDIzOC43MjY3OTA0NTA5MjgzOF0sIFsyMzcuMTU0MTUwMTk3NjI4NDcsIDIzNi41
MzA4ODA0MjA0OTkzMywgMjM1LjI5NDExNzY0NzA1ODgsIDIzNS45MTA4NzgxMTI3MTI5NiwgMjM2
LjUzMDg4MDQyMDQ5OTMzXSwgWzIzOC40MTA1OTYwMjY0OTAwNSwgMjM5LjY4MDQyNjA5ODUzNTMs
IDIzOC43MjY3OTA0NTA5MjgzOCwgMjM5LjY4MDQyNjA5ODUzNTMsIDI0MC4wXV19LCAiSlNIZWFw
IjogeyJjdXJyZW50IjogW1s2MTUwNC4wLCA2Mzc2MC4wLCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2
NC4wXSwgWzYxNTA0LjAsIDYzNzYwLjAsIDYzODMyLjAsIDYzOTkyLjAsIDY0MDY0LjBdLCBbNjE1
MDQuMCwgNjM3NjAuMCwgNjM4MzIuMCwgNjM5OTIuMCwgNjQwNjQuMF0sIFs2MTUwNC4wLCA2Mzc2
MC4wLCA2MzgzMi4wLCA2Mzk5Mi4wLCA2NDA2NC4wXV19fX0sICJodG1sNS1mdWxsLXJlbmRlciI6
IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5j
ZVRlc3RzL1BhcnNlci9odG1sNS1mdWxsLXJlbmRlci5odG1sIiwgIm1ldHJpY3MiOiB7Ik1hbGxv
YyI6IHsiY3VycmVudCI6IFtbMTE1OTA0NDU2LjAsIDExNTY4MzQ3Mi4wLCAxMTU3NzIzODQuMCwg
MTE1NjA3NDY0LjAsIDExNTY2ODA1Ni4wXSwgWzExNzMzNDIzMi4wLCAxMTc0NzEyODAuMCwgMTE3
MTkyNTUyLjAsIDExNzE4Mzk1Mi4wLCAxMTcyMjA5ODQuMF0sIFsxMjM2NzE5NzYuMCwgMTE2NDg0
NjE2LjAsIDExNjM0MDM1Mi4wLCAxMTY1MTk0NzIuMCwgMTE2MTE1MDU2LjBdLCBbMTE2ODUwOTUy
LjAsIDExNzAxNjcyOC4wLCAxMTY3ODUzMjAuMCwgMTE3NTk3NTg0LjAsIDExNjY5MzAwOC4wXV19
LCAiSlNIZWFwIjogeyJjdXJyZW50IjogW1s3Mjc3Ni4wLCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3
Ni4wLCA5NzQ1Ni4wXSwgWzcyNzc2LjAsIDc5OTIwLjAsIDg0OTEyLjAsIDg5OTc2LjAsIDk3NDU2
LjBdLCBbNzI3NzYuMCwgNzk5MjAuMCwgODQ5MTIuMCwgODk5NzYuMCwgOTc0NTYuMF0sIFs3Mjc3
Ni4wLCA3OTkyMC4wLCA4NDkxMi4wLCA4OTk3Ni4wLCA5NzQ1Ni4wXV19LCAiVGltZSI6IHsiY3Vy
cmVudCI6IFtbNDIzNy4wLCA1MDEyLjAsIDQyNDAuMCwgNTAwNS4wLCA0MjQ3LjBdLCBbNDQzNy4w
LCA1MTI4LjAsIDQ0NTEuMCwgNTMzMC4wLCA0NDM0LjBdLCBbNDI0NS4wLCA1MDQ0LjAsIDQyNTUu
MCwgNTAyMC4wLCA0MjY0LjBdLCBbNDI1OS4wLCA1MDIyLjAsIDQyNDkuMCwgNTAyNi4wLCA0MjU3
LjBdXX19fX19fSwgImJ1aWxkVGltZSI6ICIyMDEzLTA0LTE4VDE1OjAwOjQ5LjE0MTE2MSIsICJk
ZXNjcmlwdGlvbiI6ICJXaXRoIHBhdGNoIiwgInJldmlzaW9ucyI6IHsiV2ViS2l0IjogeyJ0aW1l
c3RhbXAiOiAiMjAxMy0wNC0xOFQwNzoyNjozNVoiLCAicmV2aXNpb24iOiAiMTQ4NjU5In19fV08
L3NjcmlwdD4KCgo8c2NyaXB0IGFzeW5jPSIiIHNyYz0iL1ZvbHVtZXMvSEREL05vblBlcmZvcmNl
L1dlYktpdC9QZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9qcXVlcnkuZmxvdC5taW4uanMiPjwv
c2NyaXB0PjxzY3JpcHQgYXN5bmM9IiIgc3JjPSIvVm9sdW1lcy9IREQvTm9uUGVyZm9yY2UvV2Vi
S2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4uanMi
Pjwvc2NyaXB0PjxzY3JpcHQgYXN5bmM9IiIgc3JjPSIvVm9sdW1lcy9IREQvTm9uUGVyZm9yY2Uv
V2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMiPjwvc2NyaXB0
PjwvYm9keT48L2h0bWw+WXRleHQvaHRtbFVVVEYtOFBfECtmaWxlOi8vL1VzZXJzL2FidWN1ci9E
b2N1bWVudHMvcmVzdWx0cy5odG1sAAAACAAAAA0AAAAfAAAAMQAAADYAAAA/AAAAVQAAAGcAAAB9
AAAAjAAAAvkABcw+AAXMUAAFzLwABczFAAXPGwAGYdIABmHkAAZiOwAGYkQABmShAAalLQAGpT8A
BqWdAAalpgAGp/cABsr0AAbLBgAGy1gABstjAAbLgQAGy5gAB47xAAeO+wAHjwEAB48CAAAAAAAA
BAEAAAAAAAAAJAAAAAAAAAAAAAAAAAAHjzA=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198893</attachid>
            <date>2013-04-19 09:56:49 -0700</date>
            <delta_ts>2013-04-19 10:24:42 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-113433-20130419195617.patch</filename>
            <type>text/plain</type>
            <size>3532</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4NzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg0NTBiNTNiZTUzOTZk
ZjhjNzQ1YzcyZjIxYzMzNGJlZTY4NWM3OS4uMjAxZmYzODg3MjBjNmY2NDQ1MWFhNTM3ZjViOGUx
OGEwZTUxMTE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEzLTA0LTE5ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIENvbnRhaW5lck5vZGU6OnJl
bW92ZUNoaWxkcmVuIHNob3VsZCBmaXJzdCBkZXRhY2ggdGhlIGNoaWxkcmVuIHRoZW4gcmVtb3Zl
IHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MzQzMworCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICBDdXJy
ZW50bHksIENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkcmVuIGluaXRpYWxseSByZW1vdmVzIHRo
ZSBub2RlcyBmcm9tIHRoZSBET00gdHJlZSBhbmQgdGhlbgorICAgICAgICBjYWxscyBkZXRhY2go
KSBvbiBlYWNoIG9mIHRoZW0uIFRoaXMgaXMgYW50aS1pbnR1aXRpdmUgYW5kIGNhbiBsZWFkIHRv
IHN1YnRsZSBidWdzIGJlY2F1c2UgdGhlCisgICAgICAgIGRldGFjaGVkIHJlbmRlcmVycyBhcmUg
bm90IGJhY2tlZCBieSBhIHZhbGlkIERPTSB0cmVlIGFueSBtb3JlLiBXaXRoIHRoZSBwYXRjaCwg
dGhlIG5vZGVzIGFyZSBmaXJzdAorICAgICAgICBkZXRhY2hlZCBhbmQgdGhlbiByZW1vdmVkIGZy
b20gdGhlIERPTS4KKyAgICAgICAgVGhlIHBhdGNoIGFsc28gbGV0cyB0aGUgdHJlZSBpbiBhIGNv
bnNpc3RlbnQgc3RhdGUgYWZ0ZXIgZWFjaCBub2RlIHJlbW92YWwgYnkgY2xlYXJpbmcgdGhlIHBy
ZXZpb3VzCisgICAgICAgIHNpYmxpbmcgcG9pbnRlciBvZiB0aGUgbm9kZSBmb2xsb3dpbmcgdGhl
IG9uZSByZW1vdmVkLgorICAgICAgICBJIGhhdmVuJ3QgZm91bmQgYW55IHByb29mIHRoZSBwZXJm
b3JtYW5jZSB3aWxsIGdldCB3b3JzZSBpZiB0aGUgZGV0YWNobWVudCBoYXBwZW5zIHdoZW4gdGhl
IGNoaWxkcmVuCisgICAgICAgIGFyZSBzdGlsbCBpbiB0aGUgRE9NIHRyZWUuCisKKyAgICAgICAg
VGVzdHM6IE5vIGNoYW5nZWQgdmlzaWJsZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogZG9t
L0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cmVt
b3ZlQ2hpbGRyZW4pOgorCiAyMDEzLTA0LTE5ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTWFjXSBDb21wbGV4VGV4dENvbnRyb2xsZXIgaXMgc2xvdyB3aXRo
IGxhcmdlIG51bWJlcnMgb2YgdGV4dCBydW5zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
Y3BwCmluZGV4IGY2Y2ZmZmVlNmMzZGVjY2ExYmEzY2YwZTE4NzQ5YWY3MTk5ZDQ1MTkuLjc3NDY2
ZGZkOTE5OTI4Y2NhYzYyNjQ0ODc0ZmU4MWU3MDFlNGZlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAKQEAgLTYxNiw5ICs2MTYsOSBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnJl
bW92ZUNoaWxkcmVuKCkKICAgICAgICAgICAgIHdoaWxlIChSZWZQdHI8Tm9kZT4gbiA9IG1fZmly
c3RDaGlsZCkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5leHQgPSBuLT5uZXh0U2libGluZygp
OwogCi0gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBub2RlIGZyb20gdGhlIHRyZWUgYmVm
b3JlIGNhbGxpbmcgZGV0YWNoIG9yIHJlbW92ZWRGcm9tRG9jdW1lbnQgKDQ0MjcwMjQsIDQxMjk3
NDQpLgotICAgICAgICAgICAgICAgIC8vIHJlbW92ZUNoaWxkKCkgZG9lcyB0aGlzIGFmdGVyIGNh
bGxpbmcgZGV0YWNoKCkuIFRoZXJlIGlzIG5vIGV4cGxhbmF0aW9uIGZvcgotICAgICAgICAgICAg
ICAgIC8vIHRoaXMgZGlzY3JlcGFuY3kgYmV0d2VlbiByZW1vdmVDaGlsZCgpIGFuZCBpdHMgb3B0
aW1pemVkIHZlcnNpb24gcmVtb3ZlQ2hpbGRyZW4oKS4KKyAgICAgICAgICAgICAgICBpZiAobi0+
YXR0YWNoZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgbi0+ZGV0YWNoKCk7CisKICAgICAgICAg
ICAgICAgICBuLT5zZXRQcmV2aW91c1NpYmxpbmcoMCk7CiAgICAgICAgICAgICAgICAgbi0+c2V0
TmV4dFNpYmxpbmcoMCk7CiAgICAgICAgICAgICAgICAgbi0+c2V0UGFyZW50T3JTaGFkb3dIb3N0
Tm9kZSgwKTsKQEAgLTYyNywxOSArNjI3LDEwIEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cmVtb3Zl
Q2hpbGRyZW4oKQogICAgICAgICAgICAgICAgIG1fZmlyc3RDaGlsZCA9IG5leHQ7CiAgICAgICAg
ICAgICAgICAgaWYgKG4gPT0gbV9sYXN0Q2hpbGQpCiAgICAgICAgICAgICAgICAgICAgIG1fbGFz
dENoaWxkID0gMDsKLSAgICAgICAgICAgICAgICByZW1vdmVkQ2hpbGRyZW4uYXBwZW5kKG4ucmVs
ZWFzZSgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIG1fZmlyc3RDaGlsZC0+c2V0UHJldmlvdXNTaWJsaW5nKDApOwogCi0gICAgICAg
ICAgICAvLyBEZXRhY2ggdGhlIG5vZGVzIG9ubHkgYWZ0ZXIgcHJvcGVybHkgcmVtb3ZlZCBmcm9t
IHRoZSB0cmVlIGJlY2F1c2UKLSAgICAgICAgICAgIC8vIGEuIGRldGFjaGluZyByZXF1aXJlcyBh
IHByb3BlciBET00gdHJlZSAoZm9yIGNvdW50ZXJzIGFuZCBxdW90ZXMgZm9yCi0gICAgICAgICAg
ICAvLyBleGFtcGxlKSBhbmQgZHVyaW5nIHRoZSBwcmV2aW91cyBsb29wIHRoZSBuZXh0IHNpYmxp
bmcgc3RpbGwgcG9pbnRzIHRvCi0gICAgICAgICAgICAvLyB0aGUgbm9kZSBiZWluZyByZW1vdmVk
IHdoaWxlIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQgZG9lcyBub3QgcG9pbnQgYmFjawotICAgICAg
ICAgICAgLy8gYW5kIGRvZXMgbm90IHBvaW50IHRvIHRoZSBzYW1lIHBhcmVudCBhcyBpdHMgbmV4
dCBzaWJsaW5nLgotICAgICAgICAgICAgLy8gYi4gZGVzdHJveWluZyBSZW5kZXJlcnMgb2Ygc3Rh
bmRhbG9uZSBub2RlcyBpcyBzb21ldGltZXMgZmFzdGVyLgotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZW1vdmVkQ2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBOb2RlKiByZW1vdmVkQ2hpbGQgPSByZW1vdmVkQ2hpbGRyZW5baV0uZ2V0KCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJlbW92ZWRDaGlsZC0+YXR0YWNoZWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmVtb3ZlZENoaWxkLT5kZXRhY2goKTsKKyAgICAgICAgICAgICAgICByZW1vdmVkQ2hp
bGRyZW4uYXBwZW5kKG4ucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>