<?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>92025</bug_id>
          
          <creation_ts>2012-07-23 14:08:03 -0700</creation_ts>
          <short_desc>SVG animation not working for elements inserted after parsing is finished</short_desc>
          <delta_ts>2012-08-03 09:51:52 -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>SVG</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Florin Malita">fmalita</reporter>
          <assigned_to name="Florin Malita">fmalita</assigned_to>
          <cc>krit</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>stevebrooks000</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>675987</commentid>
    <comment_count>0</comment_count>
      <attachid>153859</attachid>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-07-23 14:08:03 -0700</bug_when>
    <thetext>Created attachment 153859
Fill animation not working

Animation is activated from Document::implicitClose(), but deferred element insertion doesn&apos;t seem to hit that path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684273</commentid>
    <comment_count>1</comment_count>
      <attachid>155829</attachid>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-08-01 10:16:39 -0700</bug_when>
    <thetext>Created attachment 155829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684327</commentid>
    <comment_count>2</comment_count>
      <attachid>155829</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-08-01 11:04:06 -0700</bug_when>
    <thetext>Comment on attachment 155829
Patch

Looks sane, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684329</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-08-01 11:05:22 -0700</bug_when>
    <thetext>Dicsussing this patch on IRC now. At least the layout test needs an update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684337</commentid>
    <comment_count>4</comment_count>
      <attachid>155829</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-08-01 11:10:56 -0700</bug_when>
    <thetext>Comment on attachment 155829
Patch

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

&gt; LayoutTests/svg/animations/deferred-insertion.html:16
&gt; +    if (window.layoutTestController)
&gt; +        layoutTestController.waitUntilDone();

We discussed the patch online during your review Niko. I am fine with the patch as well, but window.layoutTestController needs to be replaced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684373</commentid>
    <comment_count>5</comment_count>
      <attachid>155847</attachid>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-08-01 11:34:23 -0700</bug_when>
    <thetext>Created attachment 155847
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684376</commentid>
    <comment_count>6</comment_count>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-08-01 11:35:32 -0700</bug_when>
    <thetext>Thanks for reviewing this Niko &amp; Dirk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684489</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-08-01 12:52:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; We discussed the patch online during your review Niko. I am fine with the patch as well, but window.layoutTestController needs to be replaced.
Good catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684575</commentid>
    <comment_count>8</comment_count>
      <attachid>155847</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-01 14:24:45 -0700</bug_when>
    <thetext>Comment on attachment 155847
Patch for landing

Clearing flags on attachment: 155847

Committed r124369: &lt;http://trac.webkit.org/changeset/124369&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684576</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-01 14:24:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685773</commentid>
    <comment_count>10</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-08-02 13:50:46 -0700</bug_when>
    <thetext>I think this change may have introduced a performance regression:
http://webkit-perf.appspot.com/graph.html#tests=[[1610803,2001,173262]]&amp;sel=none&amp;displayrange=7&amp;datatype=running

Pageload time went from 88ms to 92ms average. None of the boolean checks added in this patch are more than just local variable reads, so I don&apos;t know what&apos;s up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686844</commentid>
    <comment_count>11</comment_count>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-08-03 09:41:29 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I think this change may have introduced a performance regression:
&gt; http://webkit-perf.appspot.com/graph.html#tests=[[1610803,2001,173262]]&amp;sel=none&amp;displayrange=7&amp;datatype=running
&gt; 
&gt; Pageload time went from 88ms to 92ms average. None of the boolean checks added in this patch are more than just local variable reads, so I don&apos;t know what&apos;s up.

This seems unlikely not only because it&apos;s a lightweight test, but also because that code path is only hit on &lt;svg&gt; element insertion. And for this particular perftest, the conditional gets shortcut on the first test (document()-&gt;parsing() is true) as the SVG element is inserted during parsing.

Have you ruled out all the other changes in range?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686862</commentid>
    <comment_count>12</comment_count>
      <attachid>156402</attachid>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-08-03 09:51:52 -0700</bug_when>
    <thetext>Created attachment 156402
crawfish2_ganson.svg perftest run

I ran the perftest locally, see attached graph. First 40 runs are without this patch, last 40 with it - I cannot see a difference.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>153859</attachid>
            <date>2012-07-23 14:08:03 -0700</date>
            <delta_ts>2012-07-23 14:08:03 -0700</delta_ts>
            <desc>Fill animation not working</desc>
            <filename>deferred-animation.html</filename>
            <type>text/html</type>
            <size>428</size>
            <attacher name="Florin Malita">fmalita</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5PgoKPGRpdiBpZD0iY29udGFpbmVyIj48L2Rpdj4KCjxzY3JpcHQ+CiAgZnVu
Y3Rpb24gZ28oKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuaW5u
ZXJIVE1MID0gJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4
PSI4MCIgeT0gIjgwIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgc3R5bGU9ImZpbGw6cmdiKDM0
LDAsMjU1KTsiID48YW5pbWF0ZSBkdXI9IjJzIiBhdHRyaWJ1dGVOYW1lPSJmaWxsIiBmcm9tPSIj
ZmYwMDAwIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgdG89IiMwMDAwZmYiIGJlZ2luPSIwcyIv
PjwvcmVjdD48L3N2Zz4nOwogIH0KCiAgc2V0VGltZW91dCgnZ28oKTsnLCAxMDApOwogIC8vZ28o
KTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155829</attachid>
            <date>2012-08-01 10:16:39 -0700</date>
            <delta_ts>2012-08-01 11:34:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92025-20120801131621.patch</filename>
            <type>text/plain</type>
            <size>6375</size>
            <attacher name="Florin Malita">fmalita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2ZjNTBkYTYwMTVlZThm
NjJkNTNmMGFlMzAwYzFmNWVhNjgzZjQ2Zi4uYjE4YTU0YTQ4MDAzNmY4YzNjOGYyNTM4NWQ5YmNh
YTljNjJhZWI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA4LTAxICBGbG9y
aW4gTWFsaXRhICA8Zm1hbGl0YUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU1ZHIGFuaW1hdGlv
biBub3Qgd29ya2luZyBmb3IgZWxlbWVudHMgaW5zZXJ0ZWQgYWZ0ZXIgcGFyc2luZyBpcyBmaW5p
c2hlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIw
MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaW1l
IGNvbnRhaW5lcnMgZm9yIFNWRyBlbGVtZW50cyBpbnNlcnRlZCBhZnRlciBkb2N1bWVudCBwYXJz
aW5nIGlzIGZpbmlzaGVkIG5lZWQgdG8gYmUKKyAgICAgICAgaW5pdGlhbGl6ZWQgb24gaW5zZXJ0
aW9uIChzaW5jZSB0aGV5J3ZlIG1pc3NlZCB0aGUgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKSBp
bml0aWFsaXphdGlvbgorICAgICAgICBwb2ludCkuCisKKyAgICAgICAgVGVzdDogc3ZnL2FuaW1h
dGlvbnMvZGVmZXJyZWQtaW5zZXJ0aW9uLmh0bWwKKworICAgICAgICAqIHN2Zy9TVkdTVkdFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6Omluc2VydGVkSW50byk6
CisKIDIwMTItMDgtMDEgIEFsZXhlaSBGaWxpcHBvdiAgPGFsZXhlaWZAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNvdW50IERPTSBzdG9yYWdlIGNhY2hlIG1lbW9yeSBm
b3IgbmF0aXZlIHNuYXBzaG90CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKaW5kZXgg
OGNkZTdkNTE2YzZhMjEwYjQzN2M3MjUyYmNlNDBiYzBiMTk3Njg3NS4uY2RlOWFhNjY0ZjcxZTk3
OGM4NjY3ZGQ1ZTgyNTA2ZTA3MDkxMjJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50
LmNwcApAQCAtNDc0LDggKzQ3NCwxNSBAQCBSZW5kZXJPYmplY3QqIFNWR1NWR0VsZW1lbnQ6OmNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogCiBOb2RlOjpJ
bnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1NWR0VsZW1lbnQ6Omluc2VydGVkSW50byhD
b250YWluZXJOb2RlKiByb290UGFyZW50KQogewotICAgIGlmIChyb290UGFyZW50LT5pbkRvY3Vt
ZW50KCkpCisgICAgaWYgKHJvb3RQYXJlbnQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICBkb2N1
bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPmFkZFRpbWVDb250YWluZXIodGhpcyk7CisK
KyAgICAgICAgLy8gQW5pbWF0aW9ucyBhcmUgc3RhcnRlZCBhdCB0aGUgZW5kIG9mIGRvY3VtZW50
IHBhcnNpbmcgYW5kIGFmdGVyIGZpcmluZyB0aGUgbG9hZCBldmVudCwKKyAgICAgICAgLy8gYnV0
IGlmIHdlIG1pc3MgdGhhdCB0cmFpbiAoZGVmZXJyZWQgcHJvZ3JhbW1hdGljIGVsZW1lbnQgaW5z
ZXJ0aW9uIGZvciBleGFtcGxlKSB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGluaXRpYWxpemUgdGhl
IHRpbWUgY29udGFpbmVyIGhlcmUuCisgICAgICAgIGlmICghZG9jdW1lbnQoKS0+cGFyc2luZygp
ICYmICFkb2N1bWVudCgpLT5wcm9jZXNzaW5nTG9hZEV2ZW50KCkgJiYgZG9jdW1lbnQoKS0+bG9h
ZEV2ZW50RmluaXNoZWQoKSkKKyAgICAgICAgICAgIHRpbWVDb250YWluZXIoKS0+YmVnaW4oKTsK
KyAgICB9CiAgICAgcmV0dXJuIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6Omluc2VydGVkSW50
byhyb290UGFyZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY1MzEwZjUxMzQ4ZWZiYmEzMDNhNzQ4NzE3OGUy
MDIzM2NmOTRkNzUuLmYxNjY2Njk3MzY1MDQxNWJjZWMwYTlmYjE5NTBhMzVkNzFiZmJlMTUgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wOC0wMSAgRmxvcmluIE1hbGl0YSAgPGZtYWxpdGFA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFNWRyBhbmltYXRpb24gbm90IHdvcmtpbmcgZm9yIGVs
ZW1lbnRzIGluc2VydGVkIGFmdGVyIHBhcnNpbmcgaXMgZmluaXNoZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyMDI1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9kZWZlcnJl
ZC1pbnNlcnRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9u
cy9kZWZlcnJlZC1pbnNlcnRpb24uaHRtbDogQWRkZWQuCisKIDIwMTItMDgtMDEgIEtlaXNoaSBI
YXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXR0ZW1wdCB0byBmaXggZmxh
a2luZXNzIG9mIGNvbG9yLXN1Z2dlc3Rpb24tcGlja2VyLWFwcGVhcmFuY2UuaHRtbApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvZGVmZXJyZWQtaW5zZXJ0aW9uLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2RlZmVycmVkLWluc2VydGlvbi1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNkNGFkMzNhZWNiM2RkNDRiZmU1ZmYyM2I4MDIyNzhl
MTdiYWUzMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2Rl
ZmVycmVkLWluc2VydGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorU1ZHIDEuMSBk
eW5hbWljIGFuaW1hdGlvbiB0ZXN0cworCitUZXN0IGZvciBhbmltYXRpb24gb24gZWxlbWVudHMg
aW5zZXJ0ZWQgcHJvZ3JhbW1hdGljYWxseS4gU2hvdWxkIHJlc3VsdCBpbiBhIDIwMHgyMDAgcmVj
dCBhbmQgb25seSBQQVNTIG1lc3NhZ2VzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIHJlY3Qud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAyMDAKK1BBU1MgcmVjdC53aWR0aC5i
YXNlVmFsLnZhbHVlIGlzIDIwMAorUEFTUyByZWN0LndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTUw
CitQQVNTIHJlY3Qud2lkdGguYmFzZVZhbC52YWx1ZSBpcyAyMDAKK1BBU1MgcmVjdC53aWR0aC5h
bmltVmFsLnZhbHVlIGlzIDEwMAorUEFTUyByZWN0LndpZHRoLmJhc2VWYWwudmFsdWUgaXMgMjAw
CitQQVNTIHJlY3Qud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAyMDAKK1BBU1MgcmVjdC53aWR0aC5i
YXNlVmFsLnZhbHVlIGlzIDIwMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2Rl
ZmVycmVkLWluc2VydGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvZGVmZXJy
ZWQtaW5zZXJ0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDRhNGY2NmEwZDRmNTFhY2ZlODg2ZGZhNjcy
MzQyZDg1N2I3NmI5NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRp
b25zL2RlZmVycmVkLWluc2VydGlvbi5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL2R5bmFtaWMtdXBkYXRlcy9yZXNvdXJjZXMvU1ZHVGVzdENhc2Uu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9TVkdBbmltYXRpb25UZXN0Q2Fz
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InNjaGVkdWxlVGVzdCgpIj4K
KzxoMT5TVkcgMS4xIGR5bmFtaWMgYW5pbWF0aW9uIHRlc3RzPC9oMT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCitmdW5jdGlv
biBzY2hlZHVsZVRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgc2V0
VGltZW91dChzdGFydFRlc3QsIDApOworfQorCitmdW5jdGlvbiBzdGFydFRlc3QoKSB7CisgICAg
ZGVzY3JpcHRpb24oIlRlc3QgZm9yIGFuaW1hdGlvbiBvbiBlbGVtZW50cyBpbnNlcnRlZCBwcm9n
cmFtbWF0aWNhbGx5LiBTaG91bGQgcmVzdWx0IGluIGEgMjAweDIwMCByZWN0IGFuZCBvbmx5IFBB
U1MgbWVzc2FnZXMiKTsKKyAgICBjcmVhdGVTVkdUZXN0Q2FzZSgpOworCisgICAgLy8gU2V0dXAg
dGVzdCBkb2N1bWVudAorICAgIHZhciByZWN0ID0gY3JlYXRlU1ZHRWxlbWVudCgicmVjdCIpOwor
ICAgIHJlY3Quc2V0QXR0cmlidXRlKCJpZCIsICJyZWN0Iik7CisgICAgcmVjdC5zZXRBdHRyaWJ1
dGUoIndpZHRoIiwgIjIwMCIpOworICAgIHJlY3Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCAiMjAw
Iik7CisgICAgcmVjdC5zZXRBdHRyaWJ1dGUoImZpbGwiLCAiZ3JlZW4iKTsKKyAgICByZWN0LnNl
dEF0dHJpYnV0ZSgib25jbGljayIsICJleGVjdXRlVGVzdCgpIik7CisKKyAgICB2YXIgYW5pbWF0
ZSA9IGNyZWF0ZVNWR0VsZW1lbnQoImFuaW1hdGUiKTsKKyAgICBhbmltYXRlLnNldEF0dHJpYnV0
ZSgiaWQiLCAiYW5pbWF0aW9uIik7CisgICAgYW5pbWF0ZS5zZXRBdHRyaWJ1dGUoImF0dHJpYnV0
ZU5hbWUiLCAid2lkdGgiKTsKKyAgICBhbmltYXRlLnNldEF0dHJpYnV0ZSgiZnJvbSIsICIyMDAi
KTsKKyAgICBhbmltYXRlLnNldEF0dHJpYnV0ZSgidG8iLCAiMTAwIik7CisgICAgYW5pbWF0ZS5z
ZXRBdHRyaWJ1dGUoImJlZ2luIiwgImNsaWNrIik7CisgICAgYW5pbWF0ZS5zZXRBdHRyaWJ1dGUo
ImR1ciIsICI0cyIpOworICAgIHJlY3QuYXBwZW5kQ2hpbGQoYW5pbWF0ZSk7CisgICAgcm9vdFNW
R0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVjdCk7CisKKyAgICBydW5TTUlMVGVzdCgpOworfQorCitm
dW5jdGlvbiBzYW1wbGUxKCkgeworICAgIC8vIENoZWNrIGluaXRpYWwvZW5kIGNvbmRpdGlvbnMK
KyAgICBzaG91bGRCZUNsb3NlRW5vdWdoKCJyZWN0LndpZHRoLmFuaW1WYWwudmFsdWUiLCAiMjAw
Iik7CisgICAgc2hvdWxkQmUoInJlY3Qud2lkdGguYmFzZVZhbC52YWx1ZSIsICIyMDAiKTsKK30K
KworZnVuY3Rpb24gc2FtcGxlMigpIHsKKyAgICAvLyBDaGVjayBoYWxmLXRpbWUgY29uZGl0aW9u
cworICAgIHNob3VsZEJlQ2xvc2VFbm91Z2goInJlY3Qud2lkdGguYW5pbVZhbC52YWx1ZSIsICIx
NTAiKTsKKyAgICBzaG91bGRCZSgicmVjdC53aWR0aC5iYXNlVmFsLnZhbHVlIiwgIjIwMCIpOwor
fQorCitmdW5jdGlvbiBzYW1wbGUzKCkgeworICAgIC8vIENoZWNrIGp1c3QgYmVmb3JlLWVuZCBj
b25kaXRpb25zCisgICAgc2hvdWxkQmVDbG9zZUVub3VnaCgicmVjdC53aWR0aC5hbmltVmFsLnZh
bHVlIiwgIjEwMCIpOworICAgIHNob3VsZEJlKCJyZWN0LndpZHRoLmJhc2VWYWwudmFsdWUiLCAi
MjAwIik7Cit9CisKK2Z1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgeworICAgIGNvbnN0IGV4cGVjdGVk
VmFsdWVzID0gWworICAgICAgICAvLyBbYW5pbWF0aW9uSWQsIHRpbWUsIHNhbXBsZUNhbGxiYWNr
XQorICAgICAgICBbImFuaW1hdGlvbiIsIDAuMCwgICBzYW1wbGUxXSwKKyAgICAgICAgWyJhbmlt
YXRpb24iLCAyLjAsICAgc2FtcGxlMl0sCisgICAgICAgIFsiYW5pbWF0aW9uIiwgMy45OTksIHNh
bXBsZTNdLAorICAgICAgICBbImFuaW1hdGlvbiIsIDQuMDAxLCBzYW1wbGUxXQorICAgIF07CisK
KyAgICBydW5BbmltYXRpb25UZXN0KGV4cGVjdGVkVmFsdWVzKTsKK30KKwordmFyIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155847</attachid>
            <date>2012-08-01 11:34:23 -0700</date>
            <delta_ts>2012-08-01 14:24:45 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-92025-20120801143405.patch</filename>
            <type>text/plain</type>
            <size>6363</size>
            <attacher name="Florin Malita">fmalita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2ZjNTBkYTYwMTVlZThm
NjJkNTNmMGFlMzAwYzFmNWVhNjgzZjQ2Zi4uOTgzY2UxMGY5NzBkZjc3MDAyMDEwYjQzNmVjZDM4
OGQyNzU3MzU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA4LTAxICBGbG9y
aW4gTWFsaXRhICA8Zm1hbGl0YUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU1ZHIGFuaW1hdGlv
biBub3Qgd29ya2luZyBmb3IgZWxlbWVudHMgaW5zZXJ0ZWQgYWZ0ZXIgcGFyc2luZyBpcyBmaW5p
c2hlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIw
MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCisKKyAgICAgICAg
VGltZSBjb250YWluZXJzIGZvciBTVkcgZWxlbWVudHMgaW5zZXJ0ZWQgYWZ0ZXIgZG9jdW1lbnQg
cGFyc2luZyBpcyBmaW5pc2hlZCBuZWVkIHRvIGJlCisgICAgICAgIGluaXRpYWxpemVkIG9uIGlu
c2VydGlvbiAoc2luY2UgdGhleSd2ZSBtaXNzZWQgdGhlIERvY3VtZW50OjppbXBsaWNpdENsb3Nl
KCkgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgcG9pbnQpLgorCisgICAgICAgIFRlc3Q6IHN2Zy9h
bmltYXRpb25zL2RlZmVycmVkLWluc2VydGlvbi5odG1sCisKKyAgICAgICAgKiBzdmcvU1ZHU1ZH
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjppbnNlcnRlZElu
dG8pOgorCiAyMDEyLTA4LTAxICBBbGV4ZWkgRmlsaXBwb3YgIDxhbGV4ZWlmQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBjb3VudCBET00gc3RvcmFnZSBjYWNoZSBtZW1v
cnkgZm9yIG5hdGl2ZSBzbmFwc2hvdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCmlu
ZGV4IDhjZGU3ZDUxNmM2YTIxMGI0MzdjNzI1MmJjZTQwYmMwYjE5NzY4NzUuLmNkZTlhYTY2NGY3
MWU5NzhjODY2N2RkNWU4MjUwNmUwNzA5MTIyZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAKQEAgLTQ3NCw4ICs0NzQsMTUgQEAgUmVuZGVyT2JqZWN0KiBTVkdTVkdFbGVtZW50
OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKIAogTm9k
ZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdTVkdFbGVtZW50OjppbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kZSogcm9vdFBhcmVudCkKIHsKLSAgICBpZiAocm9vdFBhcmVudC0+aW5E
b2N1bWVudCgpKQorICAgIGlmIChyb290UGFyZW50LT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAg
ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRUaW1lQ29udGFpbmVyKHRoaXMp
OworCisgICAgICAgIC8vIEFuaW1hdGlvbnMgYXJlIHN0YXJ0ZWQgYXQgdGhlIGVuZCBvZiBkb2N1
bWVudCBwYXJzaW5nIGFuZCBhZnRlciBmaXJpbmcgdGhlIGxvYWQgZXZlbnQsCisgICAgICAgIC8v
IGJ1dCBpZiB3ZSBtaXNzIHRoYXQgdHJhaW4gKGRlZmVycmVkIHByb2dyYW1tYXRpYyBlbGVtZW50
IGluc2VydGlvbiBmb3IgZXhhbXBsZSkgd2UgbmVlZAorICAgICAgICAvLyB0byBpbml0aWFsaXpl
IHRoZSB0aW1lIGNvbnRhaW5lciBoZXJlLgorICAgICAgICBpZiAoIWRvY3VtZW50KCktPnBhcnNp
bmcoKSAmJiAhZG9jdW1lbnQoKS0+cHJvY2Vzc2luZ0xvYWRFdmVudCgpICYmIGRvY3VtZW50KCkt
PmxvYWRFdmVudEZpbmlzaGVkKCkpCisgICAgICAgICAgICB0aW1lQ29udGFpbmVyKCktPmJlZ2lu
KCk7CisgICAgfQogICAgIHJldHVybiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjppbnNlcnRl
ZEludG8ocm9vdFBhcmVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2NTMxMGY1MTM0OGVmYmJhMzAzYTc0ODcx
NzhlMjAyMzNjZjk0ZDc1Li42NzUxOGRkYmVlMTkxMTMzZGE3MTI1MjExM2QzZDJiY2NiMjYwOTY1
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDgtMDEgIEZsb3JpbiBNYWxpdGEgIDxmbWFs
aXRhQGNocm9taXVtLm9yZz4KKworICAgICAgICBTVkcgYW5pbWF0aW9uIG5vdCB3b3JraW5nIGZv
ciBlbGVtZW50cyBpbnNlcnRlZCBhZnRlciBwYXJzaW5nIGlzIGZpbmlzaGVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjAyNQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KKworICAgICAgICAqIHN2Zy9hbmltYXRpb25z
L2RlZmVycmVkLWluc2VydGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9h
bmltYXRpb25zL2RlZmVycmVkLWluc2VydGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wOC0wMSAg
S2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBBdHRlbXB0IHRv
IGZpeCBmbGFraW5lc3Mgb2YgY29sb3Itc3VnZ2VzdGlvbi1waWNrZXItYXBwZWFyYW5jZS5odG1s
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9kZWZlcnJlZC1pbnNlcnRp
b24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvZGVmZXJyZWQtaW5z
ZXJ0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lY2Q0YWQzM2FlY2IzZGQ0NGJmZTVmZjIz
YjgwMjI3OGUxN2JhZTMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1h
dGlvbnMvZGVmZXJyZWQtaW5zZXJ0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE5IEBACitT
VkcgMS4xIGR5bmFtaWMgYW5pbWF0aW9uIHRlc3RzCisKK1Rlc3QgZm9yIGFuaW1hdGlvbiBvbiBl
bGVtZW50cyBpbnNlcnRlZCBwcm9ncmFtbWF0aWNhbGx5LiBTaG91bGQgcmVzdWx0IGluIGEgMjAw
eDIwMCByZWN0IGFuZCBvbmx5IFBBU1MgbWVzc2FnZXMKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgcmVjdC53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDIwMAorUEFTUyByZWN0
LndpZHRoLmJhc2VWYWwudmFsdWUgaXMgMjAwCitQQVNTIHJlY3Qud2lkdGguYW5pbVZhbC52YWx1
ZSBpcyAxNTAKK1BBU1MgcmVjdC53aWR0aC5iYXNlVmFsLnZhbHVlIGlzIDIwMAorUEFTUyByZWN0
LndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAwCitQQVNTIHJlY3Qud2lkdGguYmFzZVZhbC52YWx1
ZSBpcyAyMDAKK1BBU1MgcmVjdC53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDIwMAorUEFTUyByZWN0
LndpZHRoLmJhc2VWYWwudmFsdWUgaXMgMjAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1h
dGlvbnMvZGVmZXJyZWQtaW5zZXJ0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9u
cy9kZWZlcnJlZC1pbnNlcnRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZTU3MGI3NzkzODJiZmRjNGYw
ZDM0NzJlNzJjOWJkOGFlY2JiMzAxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvZGVmZXJyZWQtaW5zZXJ0aW9uLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZHluYW1pYy11cGRhdGVzL3Jlc291cmNlcy9TVkdU
ZXN0Q2FzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL1NWR0FuaW1hdGlv
blRlc3RDYXNlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ic2NoZWR1bGVU
ZXN0KCkiPgorPGgxPlNWRyAxLjEgZHluYW1pYyBhbmltYXRpb24gdGVzdHM8L2gxPgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisK
K2Z1bmN0aW9uIHNjaGVkdWxlVGVzdCgpIHsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgc2V0VGltZW91dChzdGFy
dFRlc3QsIDApOworfQorCitmdW5jdGlvbiBzdGFydFRlc3QoKSB7CisgICAgZGVzY3JpcHRpb24o
IlRlc3QgZm9yIGFuaW1hdGlvbiBvbiBlbGVtZW50cyBpbnNlcnRlZCBwcm9ncmFtbWF0aWNhbGx5
LiBTaG91bGQgcmVzdWx0IGluIGEgMjAweDIwMCByZWN0IGFuZCBvbmx5IFBBU1MgbWVzc2FnZXMi
KTsKKyAgICBjcmVhdGVTVkdUZXN0Q2FzZSgpOworCisgICAgLy8gU2V0dXAgdGVzdCBkb2N1bWVu
dAorICAgIHZhciByZWN0ID0gY3JlYXRlU1ZHRWxlbWVudCgicmVjdCIpOworICAgIHJlY3Quc2V0
QXR0cmlidXRlKCJpZCIsICJyZWN0Iik7CisgICAgcmVjdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwg
IjIwMCIpOworICAgIHJlY3Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCAiMjAwIik7CisgICAgcmVj
dC5zZXRBdHRyaWJ1dGUoImZpbGwiLCAiZ3JlZW4iKTsKKyAgICByZWN0LnNldEF0dHJpYnV0ZSgi
b25jbGljayIsICJleGVjdXRlVGVzdCgpIik7CisKKyAgICB2YXIgYW5pbWF0ZSA9IGNyZWF0ZVNW
R0VsZW1lbnQoImFuaW1hdGUiKTsKKyAgICBhbmltYXRlLnNldEF0dHJpYnV0ZSgiaWQiLCAiYW5p
bWF0aW9uIik7CisgICAgYW5pbWF0ZS5zZXRBdHRyaWJ1dGUoImF0dHJpYnV0ZU5hbWUiLCAid2lk
dGgiKTsKKyAgICBhbmltYXRlLnNldEF0dHJpYnV0ZSgiZnJvbSIsICIyMDAiKTsKKyAgICBhbmlt
YXRlLnNldEF0dHJpYnV0ZSgidG8iLCAiMTAwIik7CisgICAgYW5pbWF0ZS5zZXRBdHRyaWJ1dGUo
ImJlZ2luIiwgImNsaWNrIik7CisgICAgYW5pbWF0ZS5zZXRBdHRyaWJ1dGUoImR1ciIsICI0cyIp
OworICAgIHJlY3QuYXBwZW5kQ2hpbGQoYW5pbWF0ZSk7CisgICAgcm9vdFNWR0VsZW1lbnQuYXBw
ZW5kQ2hpbGQocmVjdCk7CisKKyAgICBydW5TTUlMVGVzdCgpOworfQorCitmdW5jdGlvbiBzYW1w
bGUxKCkgeworICAgIC8vIENoZWNrIGluaXRpYWwvZW5kIGNvbmRpdGlvbnMKKyAgICBzaG91bGRC
ZUNsb3NlRW5vdWdoKCJyZWN0LndpZHRoLmFuaW1WYWwudmFsdWUiLCAiMjAwIik7CisgICAgc2hv
dWxkQmUoInJlY3Qud2lkdGguYmFzZVZhbC52YWx1ZSIsICIyMDAiKTsKK30KKworZnVuY3Rpb24g
c2FtcGxlMigpIHsKKyAgICAvLyBDaGVjayBoYWxmLXRpbWUgY29uZGl0aW9ucworICAgIHNob3Vs
ZEJlQ2xvc2VFbm91Z2goInJlY3Qud2lkdGguYW5pbVZhbC52YWx1ZSIsICIxNTAiKTsKKyAgICBz
aG91bGRCZSgicmVjdC53aWR0aC5iYXNlVmFsLnZhbHVlIiwgIjIwMCIpOworfQorCitmdW5jdGlv
biBzYW1wbGUzKCkgeworICAgIC8vIENoZWNrIGp1c3QgYmVmb3JlLWVuZCBjb25kaXRpb25zCisg
ICAgc2hvdWxkQmVDbG9zZUVub3VnaCgicmVjdC53aWR0aC5hbmltVmFsLnZhbHVlIiwgIjEwMCIp
OworICAgIHNob3VsZEJlKCJyZWN0LndpZHRoLmJhc2VWYWwudmFsdWUiLCAiMjAwIik7Cit9CisK
K2Z1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgeworICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gWwor
ICAgICAgICAvLyBbYW5pbWF0aW9uSWQsIHRpbWUsIHNhbXBsZUNhbGxiYWNrXQorICAgICAgICBb
ImFuaW1hdGlvbiIsIDAuMCwgICBzYW1wbGUxXSwKKyAgICAgICAgWyJhbmltYXRpb24iLCAyLjAs
ICAgc2FtcGxlMl0sCisgICAgICAgIFsiYW5pbWF0aW9uIiwgMy45OTksIHNhbXBsZTNdLAorICAg
ICAgICBbImFuaW1hdGlvbiIsIDQuMDAxLCBzYW1wbGUxXQorICAgIF07CisKKyAgICBydW5Bbmlt
YXRpb25UZXN0KGV4cGVjdGVkVmFsdWVzKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>156402</attachid>
            <date>2012-08-03 09:51:52 -0700</date>
            <delta_ts>2012-08-03 09:51:52 -0700</delta_ts>
            <desc>crawfish2_ganson.svg perftest run</desc>
            <filename>results80.html</filename>
            <type>text/html</type>
            <size>448429</size>
            <attacher name="Florin Malita">fmalita</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwMjYpZmlsZTovLy90bXAvdC9y
ZXN1bHRzLmh0bWwgLS0+CjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlw
ZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgo8dGl0bGU+V2ViS2l0
IFBlcmZvcm1hbmNlIFRlc3QgUmVzdWx0czwvdGl0bGU+CjxzY3JpcHQ+LyohCiAqIGpRdWVyeSBK
YXZhU2NyaXB0IExpYnJhcnkgdjEuNi40CiAqIGh0dHA6Ly9qcXVlcnkuY29tLwogKgogKiBDb3B5
cmlnaHQgMjAxMSwgSm9obiBSZXNpZwogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3Ig
R1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgog
KiBJbmNsdWRlcyBTaXp6bGUuanMKICogaHR0cDovL3NpenpsZWpzLmNvbS8KICogQ29weXJpZ2h0
IDIwMTEsIFRoZSBEb2pvIEZvdW5kYXRpb24KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNE
LCBhbmQgR1BMIExpY2Vuc2VzLgogKgogKiBEYXRlOiBNb24gU2VwIDEyIDE4OjU0OjQ4IDIwMTEg
LTA0MDAKICovCihmdW5jdGlvbiggd2luZG93LCB1bmRlZmluZWQgKSB7CgovLyBVc2UgdGhlIGNv
cnJlY3QgZG9jdW1lbnQgYWNjb3JkaW5nbHkgd2l0aCB3aW5kb3cgYXJndW1lbnQgKHNhbmRib3gp
CnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudCwKICAgICAgICBuYXZpZ2F0b3IgPSB3aW5k
b3cubmF2aWdhdG9yLAogICAgICAgIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uOwp2YXIgalF1
ZXJ5ID0gKGZ1bmN0aW9uKCkgewoKLy8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnkKdmFy
IGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKICAgICAgICAgICAgICAg
IC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0
b3IgJ2VuaGFuY2VkJwogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCgg
c2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnkgKTsKICAgICAgICB9LAoKICAgICAgICAvLyBN
YXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKICAgICAgICBfalF1ZXJ5ID0gd2lu
ZG93LmpRdWVyeSwKCiAgICAgICAgLy8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3Jp
dGUKICAgICAgICBfJCA9IHdpbmRvdy4kLAoKICAgICAgICAvLyBBIGNlbnRyYWwgcmVmZXJlbmNl
IHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKICAgICAgICByb290alF1ZXJ5LAoKICAgICAg
ICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5ncyBvciBJRCBzdHJpbmdz
CiAgICAgICAgLy8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxv
Y2F0aW9uLmhhc2ggKCM5NTIxKQogICAgICAgIHF1aWNrRXhwciA9IC9eKD86W14jPF0qKDxbXHdc
V10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLywKCiAgICAgICAgLy8gQ2hlY2sgaWYgYSBzdHJpbmcg
aGFzIGEgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIGl0CiAgICAgICAgcm5vdHdoaXRlID0g
L1xTLywKCiAgICAgICAgLy8gVXNlZCBmb3IgdHJpbW1pbmcgd2hpdGVzcGFjZQogICAgICAgIHRy
aW1MZWZ0ID0gL15ccysvLAogICAgICAgIHRyaW1SaWdodCA9IC9ccyskLywKCiAgICAgICAgLy8g
Q2hlY2sgZm9yIGRpZ2l0cwogICAgICAgIHJkaWdpdCA9IC9cZC8sCgogICAgICAgIC8vIE1hdGNo
IGEgc3RhbmRhbG9uZSB0YWcKICAgICAgICByc2luZ2xlVGFnID0gL148KFx3KylccypcLz8+KD86
PFwvXDE+KT8kLywKCiAgICAgICAgLy8gSlNPTiBSZWdFeHAKICAgICAgICBydmFsaWRjaGFycyA9
IC9eW1xdLDp7fVxzXSokLywKICAgICAgICBydmFsaWRlc2NhcGUgPSAvXFwoPzpbIlxcXC9iZm5y
dF18dVswLTlhLWZBLUZdezR9KS9nLAogICAgICAgIHJ2YWxpZHRva2VucyA9IC8iW14iXFxcblxy
XSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZywK
ICAgICAgICBydmFsaWRicmFjZXMgPSAvKD86Xnw6fCwpKD86XHMqXFspKy9nLAoKICAgICAgICAv
LyBVc2VyYWdlbnQgUmVnRXhwCiAgICAgICAgcndlYmtpdCA9IC8od2Via2l0KVsgXC9dKFtcdy5d
KykvLAogICAgICAgIHJvcGVyYSA9IC8ob3BlcmEpKD86Lip2ZXJzaW9uKT9bIFwvXShbXHcuXSsp
LywKICAgICAgICBybXNpZSA9IC8obXNpZSkgKFtcdy5dKykvLAogICAgICAgIHJtb3ppbGxhID0g
Lyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKSk/LywKCiAgICAgICAgLy8gTWF0Y2hlcyBkYXNo
ZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nCiAgICAgICAgcmRhc2hBbHBoYSA9IC8tKFthLXpdfFsw
LTldKS9pZywKICAgICAgICBybXNQcmVmaXggPSAvXi1tcy0vLAoKICAgICAgICAvLyBVc2VkIGJ5
IGpRdWVyeS5jYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpCiAgICAgICAgZmNhbWVs
Q2FzZSA9IGZ1bmN0aW9uKCBhbGwsIGxldHRlciApIHsKICAgICAgICAgICAgICAgIHJldHVybiAo
IGxldHRlciArICIiICkudG9VcHBlckNhc2UoKTsKICAgICAgICB9LAoKICAgICAgICAvLyBLZWVw
IGEgVXNlckFnZW50IHN0cmluZyBmb3IgdXNlIHdpdGggalF1ZXJ5LmJyb3dzZXIKICAgICAgICB1
c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LAoKICAgICAgICAvLyBGb3IgbWF0Y2hpbmcg
dGhlIGVuZ2luZSBhbmQgdmVyc2lvbiBvZiB0aGUgYnJvd3NlcgogICAgICAgIGJyb3dzZXJNYXRj
aCwKCiAgICAgICAgLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5CiAgICAgICAgcmVh
ZHlMaXN0LAoKICAgICAgICAvLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlcgogICAgICAgIERPTUNv
bnRlbnRMb2FkZWQsCgogICAgICAgIC8vIFNhdmUgYSByZWZlcmVuY2UgdG8gc29tZSBjb3JlIG1l
dGhvZHMKICAgICAgICB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsCiAgICAg
ICAgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwKICAgICAgICBwdXNo
ID0gQXJyYXkucHJvdG90eXBlLnB1c2gsCiAgICAgICAgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UsCiAgICAgICAgdHJpbSA9IFN0cmluZy5wcm90b3R5cGUudHJpbSwKICAgICAgICBpbmRl
eE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YsCgogICAgICAgIC8vIFtbQ2xhc3NdXSAtPiB0
eXBlIHBhaXJzCiAgICAgICAgY2xhc3MydHlwZSA9IHt9OwoKalF1ZXJ5LmZuID0galF1ZXJ5LnBy
b3RvdHlwZSA9IHsKICAgICAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5LAogICAgICAgIGluaXQ6IGZ1
bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeSApIHsKICAgICAgICAgICAgICAg
IHZhciBtYXRjaCwgZWxlbSwgcmV0LCBkb2M7CgogICAgICAgICAgICAgICAgLy8gSGFuZGxlICQo
IiIpLCAkKG51bGwpLCBvciAkKHVuZGVmaW5lZCkKICAgICAgICAgICAgICAgIGlmICggIXNlbGVj
dG9yICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgJChET01FbGVtZW50KQogICAgICAgICAg
ICAgICAgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5jb250ZXh0ID0gdGhpc1swXSA9IHNlbGVjdG9yOwogICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmxlbmd0aCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFRoZSBib2R5IGVsZW1lbnQgb25s
eSBleGlzdHMgb25jZSwgb3B0aW1pemUgZmluZGluZyBpdAogICAgICAgICAgICAgICAgaWYgKCBz
ZWxlY3RvciA9PT0gImJvZHkiICYmICFjb250ZXh0ICYmIGRvY3VtZW50LmJvZHkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGRvY3VtZW50OwogICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzWzBdID0gZG9jdW1lbnQuYm9keTsKICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Lmxlbmd0aCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQXJlIHdlIGRlYWxpbmcgd2l0aCBIVE1MIHN0cmluZyBvciBhbiBJ
RD8KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxlY3Rvci5jaGFyQXQoMCkgPT09ICI8
IiAmJiBzZWxlY3Rvci5jaGFyQXQoIHNlbGVjdG9yLmxlbmd0aCAtIDEgKSA9PT0gIj4iICYmIHNl
bGVjdG9yLmxlbmd0aCA+PSAzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwg
YW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07CgogICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcXVpY2tF
eHByLmV4ZWMoIHNlbGVjdG9yICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFZlcmlmeSBhIG1hdGNoLCBhbmQgdGhhdCBubyBjb250ZXh0IHdh
cyBzcGVjaWZpZWQgZm9yICNpZAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoICYm
IChtYXRjaFsxXSB8fCAhY29udGV4dCkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbWF0Y2hbMV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRb
MF0gOiBjb250ZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9j
ID0gKGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIHNpbmds
ZSBzdHJpbmcgaXMgcGFzc2VkIGluIGFuZCBpdCdzIGEgc2luZ2xlIHRhZwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBkbyBhIGNyZWF0ZUVsZW1lbnQgYW5k
IHNraXAgdGhlIHJlc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dCA9IHJzaW5nbGVUYWcuZXhlYyggc2VsZWN0b3IgKTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHJldCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCAp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdG9yID0gWyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCByZXRbMV0gKSBdOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5mbi5hdHRyLmNhbGwoIHNlbGVjdG9yLCBjb250ZXh0LCB0cnVlICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gWyBk
b2MuY3JlYXRlRWxlbWVudCggcmV0WzFdICkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldCA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBbIG1hdGNoWzFdIF0sIFsgZG9jIF0g
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
b3IgPSAocmV0LmNhY2hlYWJsZSA/IGpRdWVyeS5jbG9uZShyZXQuZnJhZ21lbnQpIDogcmV0LmZy
YWdtZW50KS5jaGlsZE5vZGVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkubWVyZ2UoIHRoaXMsIHNlbGVjdG9yICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEhBTkRMRTogJCgiI2lkIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsyXSApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFj
a2JlcnJ5IDQuNiByZXR1cm5zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJl
bnROb2RlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5kIE9wZXJhIHJldHVybiBpdGVtcwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBuYW1lIGlu
c3RlYWQgb2YgSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLmlkICE9PSBtYXRjaFsyXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9vdGpRdWVyeS5maW5kKCBz
ZWxlY3RvciApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBP
dGhlcndpc2UsIHdlIGluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkg
b2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMubGVuZ3RoID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpc1swXSA9IGVsZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250
ZXh0ID0gZG9jdW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKQogICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNvbnRleHQgfHwgcm9v
dGpRdWVyeSkuZmluZCggc2VsZWN0b3IgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhB
TkRMRTogJChleHByLCBjb250ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAvLyAod2hpY2gg
aXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcikKICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoZnVuY3Rpb24p
CiAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9vdGpRdWVyeS5yZWFkeSggc2VsZWN0b3IgKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3Iuc2VsZWN0b3Ig
IT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0g
c2VsZWN0b3Iuc2VsZWN0b3I7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9
IHNlbGVjdG9yLmNvbnRleHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0
dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0eSBzZWxlY3RvcgogICAgICAgIHNlbGVjdG9yOiAiIiwK
CiAgICAgICAgLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZAogICAg
ICAgIGpxdWVyeTogIjEuNi40IiwKCiAgICAgICAgLy8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEg
alF1ZXJ5IG9iamVjdCBpcyAwCiAgICAgICAgbGVuZ3RoOiAwLAoKICAgICAgICAvLyBUaGUgbnVt
YmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldAogICAg
ICAgIHNpemU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3Ro
OwogICAgICAgIH0sCgogICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgcmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMsIDAgKTsKICAgICAgICB9LAoKICAgICAgICAvLyBH
ZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SCiAgICAgICAg
Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXkKICAg
ICAgICBnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVtID09
IG51bGwgPwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIGEgJ2NsZWFuJyBhcnJh
eQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvQXJyYXkoKSA6CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBSZXR1cm4ganVzdCB0aGUgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICggbnVtIDwgMCA/IHRoaXNbIHRoaXMubGVuZ3RoICsgbnVtIF0gOiB0aGlzWyBudW0gXSAp
OwogICAgICAgIH0sCgogICAgICAgIC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1
c2ggaXQgb250byB0aGUgc3RhY2sKICAgICAgICAvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hl
ZCBlbGVtZW50IHNldCkKICAgICAgICBwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcywgbmFtZSwg
c2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAgICAvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hl
ZCBlbGVtZW50IHNldAogICAgICAgICAgICAgICAgdmFyIHJldCA9IHRoaXMuY29uc3RydWN0b3Io
KTsKCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBlbGVtcyApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXQsIGVsZW1zICk7CgogICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQs
IGVsZW1zICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBv
bGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSkKICAgICAgICAgICAgICAg
IHJldC5wcmV2T2JqZWN0ID0gdGhpczsKCiAgICAgICAgICAgICAgICByZXQuY29udGV4dCA9IHRo
aXMuY29udGV4dDsKCiAgICAgICAgICAgICAgICBpZiAoIG5hbWUgPT09ICJmaW5kIiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArICh0aGlz
LnNlbGVjdG9yID8gIiAiIDogIiIpICsgc2VsZWN0b3I7CiAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBuYW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQuc2VsZWN0b3IgPSB0aGlz
LnNlbGVjdG9yICsgIi4iICsgbmFtZSArICIoIiArIHNlbGVjdG9yICsgIikiOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1l
bnQgc2V0CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIC8v
IEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQu
CiAgICAgICAgLy8gKFlvdSBjYW4gc2VlZCB0aGUgYXJndW1lbnRzIHdpdGggYW4gYXJyYXkgb2Yg
YXJncywgYnV0IHRoaXMgaXMKICAgICAgICAvLyBvbmx5IHVzZWQgaW50ZXJuYWxseS4pCiAgICAg
ICAgZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrLCBhcmdzICkgewogICAgICAgICAgICAgICAgcmV0
dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjaywgYXJncyApOwogICAgICAgIH0sCgogICAg
ICAgIHJlYWR5OiBmdW5jdGlvbiggZm4gKSB7CiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggdGhl
IGxpc3RlbmVycwogICAgICAgICAgICAgICAgalF1ZXJ5LmJpbmRSZWFkeSgpOwoKICAgICAgICAg
ICAgICAgIC8vIEFkZCB0aGUgY2FsbGJhY2sKICAgICAgICAgICAgICAgIHJlYWR5TGlzdC5kb25l
KCBmbiApOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAg
IGVxOiBmdW5jdGlvbiggaSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBpID09PSAtMSA/CiAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpY2UoIGkgKSA6CiAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuc2xpY2UoIGksICtpICsgMSApOwogICAgICAgIH0sCgogICAgICAgIGZpcnN0
OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVxKCAwICk7CiAgICAg
ICAgfSwKCiAgICAgICAgbGFzdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5lcSggLTEgKTsKICAgICAgICB9LAoKICAgICAgICBzbGljZTogZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBh
cmd1bWVudHMgKSwKICAgICAgICAgICAgICAgICAgICAgICAgInNsaWNlIiwgc2xpY2UuY2FsbChh
cmd1bWVudHMpLmpvaW4oIiwiKSApOwogICAgICAgIH0sCgogICAgICAgIG1hcDogZnVuY3Rpb24o
IGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVl
cnkubWFwKHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApOwogICAgICAgICAgICAgICAg
fSkpOwogICAgICAgIH0sCgogICAgICAgIGVuZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCk7CiAgICAg
ICAgfSwKCiAgICAgICAgLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgogICAgICAgIC8vIEJlaGF2
ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLgogICAg
ICAgIHB1c2g6IHB1c2gsCiAgICAgICAgc29ydDogW10uc29ydCwKICAgICAgICBzcGxpY2U6IFtd
LnNwbGljZQp9OwoKLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlw
ZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgpqUXVlcnkuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVl
cnkuZm47CgpqUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkgewog
ICAgICAgIHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSwK
ICAgICAgICAgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSwKICAgICAgICAgICAg
ICAgIGkgPSAxLAogICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKICAg
ICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKCiAgICAgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5
IHNpdHVhdGlvbgogICAgICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgewog
ICAgICAgICAgICAgICAgZGVlcCA9IHRhcmdldDsKICAgICAgICAgICAgICAgIHRhcmdldCA9IGFy
Z3VtZW50c1sxXSB8fCB7fTsKICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIGJvb2xlYW4gYW5k
IHRoZSB0YXJnZXQKICAgICAgICAgICAgICAgIGkgPSAyOwogICAgICAgIH0KCiAgICAgICAgLy8g
SGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJs
ZSBpbiBkZWVwIGNvcHkpCiAgICAgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAib2JqZWN0IiAm
JiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHsKICAgICAgICAgICAgICAgIHRhcmdldCA9
IHt9OwogICAgICAgIH0KCiAgICAgICAgLy8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBv
bmUgYXJndW1lbnQgaXMgcGFzc2VkCiAgICAgICAgaWYgKCBsZW5ndGggPT09IGkgKSB7CiAgICAg
ICAgICAgICAgICB0YXJnZXQgPSB0aGlzOwogICAgICAgICAgICAgICAgLS1pOwogICAgICAgIH0K
CiAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAvLyBP
bmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzCiAgICAgICAgICAgICAgICBp
ZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51bGwgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNyYyA9IHRhcmdldFsgbmFtZSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvcHkgPSBvcHRpb25zWyBuYW1lIF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3AKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHRhcmdldCA9PT0gY29weSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJn
aW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAo
Y29weUlzQXJyYXkgPSBqUXVlcnkuaXNBcnJheShjb3B5KSkgKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29weUlzQXJyYXkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlJc0FycmF5ID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0g
c3JjICYmIGpRdWVyeS5pc0FycmF5KHNyYykgPyBzcmMgOiBbXTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVj
dChzcmMpID8gc3JjIDoge307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV2ZXIgbW92
ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25l
LCBjb3B5ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGJyaW5n
IGluIHVuZGVmaW5lZCB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGNvcHk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdAogICAgICAg
IHJldHVybiB0YXJnZXQ7Cn07CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICBub0NvbmZsaWN0OiBm
dW5jdGlvbiggZGVlcCApIHsKICAgICAgICAgICAgICAgIGlmICggd2luZG93LiQgPT09IGpRdWVy
eSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiQgPSBfJDsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1
ZXJ5ICkgewogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5OwogICAgICAg
IH0sCgogICAgICAgIC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUg
b25jZSBpdCBvY2N1cnMuCiAgICAgICAgaXNSZWFkeTogZmFsc2UsCgogICAgICAgIC8vIEEgY291
bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKICAgICAgICAv
LyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MQogICAgICAgIHJlYWR5V2FpdDogMSwK
CiAgICAgICAgLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50CiAgICAgICAgaG9s
ZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHsKICAgICAgICAgICAgICAgIGlmICggaG9sZCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlYWR5V2FpdCsrOwogICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlYWR5KCB0cnVlICk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gSGFuZGxlIHdoZW4gdGhl
IERPTSBpcyByZWFkeQogICAgICAgIHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKICAgICAgICAg
ICAgICAgIC8vIEVpdGhlciBhIHJlbGVhc2VkIGhvbGQgb3IgYW4gRE9NcmVhZHkvbG9hZCBldmVu
dCBhbmQgbm90IHlldCByZWFkeQogICAgICAgICAgICAgICAgaWYgKCAod2FpdCA9PT0gdHJ1ZSAm
JiAhLS1qUXVlcnkucmVhZHlXYWl0KSB8fCAod2FpdCAhPT0gdHJ1ZSAmJiAhalF1ZXJ5LmlzUmVh
ZHkpICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgYm9keSBleGlzdHMs
IGF0IGxlYXN0LCBpbiBjYXNlIElFIGdldHMgYSBsaXR0bGUgb3ZlcnplYWxvdXMgKHRpY2tldCAj
NTQ0MykuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWRvY3VtZW50LmJvZHkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGpRdWVyeS5y
ZWFkeSwgMSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHkKICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmlzUmVhZHkgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlm
IG5lZWQgYmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0t
alF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0g
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2
ZW50cwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5mbi50cmlnZ2VyICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggZG9jdW1lbnQgKS50cmlnZ2Vy
KCAicmVhZHkiICkudW5iaW5kKCAicmVhZHkiICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBiaW5kUmVhZHk6IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgaWYgKCByZWFkeUxpc3QgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZWFkeUxp
c3QgPSBqUXVlcnkuX0RlZmVycmVkKCk7CgogICAgICAgICAgICAgICAgLy8gQ2F0Y2ggY2FzZXMg
d2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWQgYWZ0ZXIgdGhlCiAgICAgICAgICAg
ICAgICAvLyBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgogICAgICAgICAgICAg
ICAgaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0
cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHkKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSwgMSApOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIE1vemlsbGEsIE9wZXJhIGFuZCB3ZWJraXQgbmlnaHRsaWVzIGN1
cnJlbnRseSBzdXBwb3J0IHRoaXMgZXZlbnQKICAgICAgICAgICAgICAgIGlmICggZG9jdW1lbnQu
YWRkRXZlbnRMaXN0ZW5lciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBo
YW5keSBldmVudCBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRF
dmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNl
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxv
YWQsIHRoYXQgd2lsbCBhbHdheXMgd29yawogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBqUXVlcnkucmVhZHksIGZhbHNlICk7CgogICAgICAg
ICAgICAgICAgLy8gSWYgSUUgZXZlbnQgbW9kZWwgaXMgdXNlZAogICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggZG9jdW1lbnQuYXR0YWNoRXZlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGVuc3VyZSBmaXJpbmcgYmVmb3JlIG9ubG9hZCwKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbWF5YmUgbGF0ZSBidXQgc2FmZSBhbHNvIGZvciBpZnJhbWVzCiAgICAgICAgICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29u
dGVudExvYWRlZCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBmYWxsYmFjayB0byB3
aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKICAgICAgICAgICAgICAgICAgICAg
ICAgd2luZG93LmF0dGFjaEV2ZW50KCAib25sb2FkIiwgalF1ZXJ5LnJlYWR5ICk7CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBJRSBhbmQgbm90IGEgZnJhbWUKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gY29udGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVudCBpcyBy
ZWFkeQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9wbGV2ZWwgPSBmYWxzZTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9wbGV2ZWwgPSB3aW5kb3cuZnJhbWVFbGVtZW50ID09IG51bGw7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gY2F0Y2goZSkge30KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICYmIHRvcGxldmVsICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvU2Nyb2xsQ2hlY2soKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIFNlZSB0ZXN0L3Vu
aXQvY29yZS5qcyBmb3IgZGV0YWlscyBjb25jZXJuaW5nIGlzRnVuY3Rpb24uCiAgICAgICAgLy8g
U2luY2UgdmVyc2lvbiAxLjMsIERPTSBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbGlrZSBhbGVydAog
ICAgICAgIC8vIGFyZW4ndCBzdXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2
OCkuCiAgICAgICAgaXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAgICAg
IHJldHVybiBqUXVlcnkudHlwZShvYmopID09PSAiZnVuY3Rpb24iOwogICAgICAgIH0sCgogICAg
ICAgIGlzQXJyYXk6IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkudHlwZShvYmopID09PSAiYXJyYXkiOwogICAgICAgIH0sCgog
ICAgICAgIC8vIEEgY3J1ZGUgd2F5IG9mIGRldGVybWluaW5nIGlmIGFuIG9iamVjdCBpcyBhIHdp
bmRvdwogICAgICAgIGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkgewogICAgICAgICAgICAgICAg
cmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiAmJiAic2V0SW50ZXJ2YWwiIGlu
IG9iajsKICAgICAgICB9LAoKICAgICAgICBpc05hTjogZnVuY3Rpb24oIG9iaiApIHsKICAgICAg
ICAgICAgICAgIHJldHVybiBvYmogPT0gbnVsbCB8fCAhcmRpZ2l0LnRlc3QoIG9iaiApIHx8IGlz
TmFOKCBvYmogKTsKICAgICAgICB9LAoKICAgICAgICB0eXBlOiBmdW5jdGlvbiggb2JqICkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8KICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nKCBvYmogKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzMnR5cGVbIHRv
U3RyaW5nLmNhbGwob2JqKSBdIHx8ICJvYmplY3QiOwogICAgICAgIH0sCgogICAgICAgIGlzUGxh
aW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICAvLyBNdXN0IGJlIGFu
IE9iamVjdC4KICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgSUUsIHdlIGFsc28gaGF2ZSB0
byBjaGVjayB0aGUgcHJlc2VuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LgogICAgICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgRE9NIG5vZGVzIGFuZCB3aW5kb3cgb2JqZWN0cyBk
b24ndCBwYXNzIHRocm91Z2gsIGFzIHdlbGwKICAgICAgICAgICAgICAgIGlmICggIW9iaiB8fCBq
UXVlcnkudHlwZShvYmopICE9PSAib2JqZWN0IiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5Lmlz
V2luZG93KCBvYmogKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3QKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBvYmouY29uc3RydWN0b3IgJiYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAhaGFzT3duLmNhbGwob2JqLCAiY29uc3RydWN0b3IiKSAmJgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoYXNPd24uY2FsbChvYmouY29uc3RydWN0
b3IucHJvdG90eXBlLCAiaXNQcm90b3R5cGVPZiIpICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfSBjYXRjaCAoIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFOCw5
IFdpbGwgdGhyb3cgZXhjZXB0aW9ucyBvbiBjZXJ0YWluIGhvc3Qgb2JqZWN0cyAjOTg5NwogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gT3duIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28g
dG8gc3BlZWQgdXAsCiAgICAgICAgICAgICAgICAvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4g
YWxsIHByb3BlcnRpZXMgYXJlIG93bi4KCiAgICAgICAgICAgICAgICB2YXIga2V5OwogICAgICAg
ICAgICAgICAgZm9yICgga2V5IGluIG9iaiApIHt9CgogICAgICAgICAgICAgICAgcmV0dXJuIGtl
eSA9PT0gdW5kZWZpbmVkIHx8IGhhc093bi5jYWxsKCBvYmosIGtleSApOwogICAgICAgIH0sCgog
ICAgICAgIGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgbmFtZSBpbiBvYmogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgIH0sCgogICAgICAgIGVycm9yOiBmdW5jdGlvbiggbXNnICkgewogICAgICAgICAgICAgICAg
dGhyb3cgbXNnOwogICAgICAgIH0sCgogICAgICAgIHBhcnNlSlNPTjogZnVuY3Rpb24oIGRhdGEg
KSB7CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiB8fCAhZGF0
YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVz
cGFjZSBpcyByZW1vdmVkIChJRSBjYW4ndCBoYW5kbGUgaXQpCiAgICAgICAgICAgICAgICBkYXRh
ID0galF1ZXJ5LnRyaW0oIGRhdGEgKTsKCiAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHBh
cnNlIHVzaW5nIHRoZSBuYXRpdmUgSlNPTiBwYXJzZXIgZmlyc3QKICAgICAgICAgICAgICAgIGlm
ICggd2luZG93LkpTT04gJiYgd2luZG93LkpTT04ucGFyc2UgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB3aW5kb3cuSlNPTi5wYXJzZSggZGF0YSApOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgZGF0YSBpcyBhY3R1
YWwgSlNPTgogICAgICAgICAgICAgICAgLy8gTG9naWMgYm9ycm93ZWQgZnJvbSBodHRwOi8vanNv
bi5vcmcvanNvbjIuanMKICAgICAgICAgICAgICAgIGlmICggcnZhbGlkY2hhcnMudGVzdCggZGF0
YS5yZXBsYWNlKCBydmFsaWRlc2NhcGUsICJAIiApCiAgICAgICAgICAgICAgICAgICAgICAgIC5y
ZXBsYWNlKCBydmFsaWR0b2tlbnMsICJdIiApCiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBs
YWNlKCBydmFsaWRicmFjZXMsICIiKSkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKG5ldyBGdW5jdGlvbiggInJldHVybiAiICsgZGF0YSApKSgpOwoKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggIkludmFsaWQgSlNPTjogIiArIGRhdGEg
KTsKICAgICAgICB9LAoKICAgICAgICAvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCiAgICAg
ICAgcGFyc2VYTUw6IGZ1bmN0aW9uKCBkYXRhICkgewogICAgICAgICAgICAgICAgdmFyIHhtbCwg
dG1wOwogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3
aW5kb3cuRE9NUGFyc2VyICkgeyAvLyBTdGFuZGFyZAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRtcCA9IG5ldyBET01QYXJzZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4bWwgPSB0bXAucGFyc2VGcm9tU3RyaW5nKCBkYXRhICwgInRleHQveG1sIiApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBJRQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhtbCA9IG5ldyBBY3RpdmVYT2JqZWN0KCAiTWljcm9zb2Z0LlhNTERPTSIgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwuYXN5bmMgPSAiZmFsc2UiOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbC5sb2FkWE1MKCBkYXRhICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHhtbCA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIGlmICggIXhtbCB8fCAheG1sLmRvY3VtZW50RWxlbWVudCB8fCB4bWwuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoICJwYXJzZXJlcnJvciIgKS5sZW5ndGggKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5lcnJvciggIkludmFsaWQgWE1MOiAiICsgZGF0YSApOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHhtbDsKICAgICAgICB9LAoKICAgICAg
ICBub29wOiBmdW5jdGlvbigpIHt9LAoKICAgICAgICAvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4g
YSBnbG9iYWwgY29udGV4dAogICAgICAgIC8vIFdvcmthcm91bmRzIGJhc2VkIG9uIGZpbmRpbmdz
IGJ5IEppbSBEcmlzY29sbAogICAgICAgIC8vIGh0dHA6Ly93ZWJsb2dzLmphdmEubmV0L2Jsb2cv
ZHJpc2NvbGwvYXJjaGl2ZS8yMDA5LzA5LzA4L2V2YWwtamF2YXNjcmlwdC1nbG9iYWwtY29udGV4
dAogICAgICAgIGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBkYXRhICkgewogICAgICAgICAgICAgICAg
aWYgKCBkYXRhICYmIHJub3R3aGl0ZS50ZXN0KCBkYXRhICkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIHVzZSBleGVjU2NyaXB0IG9uIEludGVybmV0IEV4cGxvcmVyCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gc28gdGhhdCBj
b250ZXh0IGlzIHdpbmRvdwogICAgICAgICAgICAgICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBq
UXVlcnkgaW4gRmlyZWZveAogICAgICAgICAgICAgICAgICAgICAgICAoIHdpbmRvdy5leGVjU2Ny
aXB0IHx8IGZ1bmN0aW9uKCBkYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdpbmRvd1sgImV2YWwiIF0uY2FsbCggd2luZG93LCBkYXRhICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gKSggZGF0YSApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAg
IC8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRh
IG1vZHVsZXMKICAgICAgICAvLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9y
IHByZWZpeCAoIzk1NzIpCiAgICAgICAgY2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsICJtcy0iICku
cmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApOwogICAgICAgIH0sCgogICAgICAgIG5v
ZGVOYW1lOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gbmFtZS50b1Vw
cGVyQ2FzZSgpOwogICAgICAgIH0sCgogICAgICAgIC8vIGFyZ3MgaXMgZm9yIGludGVybmFsIHVz
YWdlIG9ubHkKICAgICAgICBlYWNoOiBmdW5jdGlvbiggb2JqZWN0LCBjYWxsYmFjaywgYXJncyAp
IHsKICAgICAgICAgICAgICAgIHZhciBuYW1lLCBpID0gMCwKICAgICAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgaXNPYmog
PSBsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNGdW5jdGlvbiggb2JqZWN0ICk7Cgog
ICAgICAgICAgICAgICAgaWYgKCBhcmdzICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGlzT2JqICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4g
b2JqZWN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBj
YWxsYmFjay5hcHBseSggb2JqZWN0WyBuYW1lIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7ICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5hcHBseSggb2JqZWN0WyBp
KysgXSwgYXJncyApID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQSBzcGVjaWFsLCBmYXN0LCBjYXNlIGZv
ciB0aGUgbW9zdCBjb21tb24gdXNlIG9mIGVhY2gKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNPYmogKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvYmplY3QgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmNhbGwoIG9iamVjdFsgbmFtZSBdLCBu
YW1lLCBvYmplY3RbIG5hbWUgXSApID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmNhbGwoIG9iamVjdFsgaSBdLCBpLCBvYmplY3RbIGkr
KyBdICkgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Owog
ICAgICAgIH0sCgogICAgICAgIC8vIFVzZSBuYXRpdmUgU3RyaW5nLnRyaW0gZnVuY3Rpb24gd2hl
cmV2ZXIgcG9zc2libGUKICAgICAgICB0cmltOiB0cmltID8KICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKCB0ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dCA9PSBudWxs
ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiA6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJpbS5jYWxsKCB0ZXh0ICk7CiAgICAgICAgICAgICAgICB9IDoKCiAg
ICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdXNlIG91ciBvd24gdHJpbW1pbmcgZnVuY3Rpb25h
bGl0eQogICAgICAgICAgICAgICAgZnVuY3Rpb24oIHRleHQgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0ZXh0ID09IG51bGwgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIiIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnRvU3RyaW5nKCku
cmVwbGFjZSggdHJpbUxlZnQsICIiICkucmVwbGFjZSggdHJpbVJpZ2h0LCAiIiApOwogICAgICAg
ICAgICAgICAgfSwKCiAgICAgICAgLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25s
eQogICAgICAgIG1ha2VBcnJheTogZnVuY3Rpb24oIGFycmF5LCByZXN1bHRzICkgewogICAgICAg
ICAgICAgICAgdmFyIHJldCA9IHJlc3VsdHMgfHwgW107CgogICAgICAgICAgICAgICAgaWYgKCBh
cnJheSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgd2luZG93LCBz
dHJpbmdzIChhbmQgZnVuY3Rpb25zKSBhbHNvIGhhdmUgJ2xlbmd0aCcKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlIGV4dHJhIHR5cGVvZiBmdW5jdGlvbiBjaGVjayBpcyB0byBwcmV2ZW50
IGNyYXNoZXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gU2FmYXJpIDIgKFNlZTogIzMw
MzkpCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR3ZWFrZWQgbG9naWMgc2xpZ2h0bHkgdG8g
aGFuZGxlIEJsYWNrYmVycnkgNC43IFJlZ0V4cCBpc3N1ZXMgIzY5MzAKICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHR5cGUgPSBqUXVlcnkudHlwZSggYXJyYXkgKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggYXJyYXkubGVuZ3RoID09IG51bGwgfHwgdHlwZSA9PT0gInN0cmluZyIg
fHwgdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlID09PSAicmVnZXhwIiB8fCBqUXVlcnkuaXNX
aW5kb3coIGFycmF5ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5j
YWxsKCByZXQsIGFycmF5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsIGFycmF5ICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVt
LCBhcnJheSApIHsKICAgICAgICAgICAgICAgIGlmICggIWFycmF5ICkgewogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
aWYgKCBpbmRleE9mICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhPZi5j
YWxsKCBhcnJheSwgZWxlbSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJyYXlbIGkgXSA9PT0gZWxlbSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAg
ICAgICB9LAoKICAgICAgICBtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7CiAgICAg
ICAgICAgICAgICB2YXIgaSA9IGZpcnN0Lmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
aiA9IDA7CgogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2Vjb25kLmxlbmd0aCA9PT0gIm51
bWJlciIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBsID0gc2Vjb25kLmxl
bmd0aDsgaiA8IGw7IGorKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dFsgaSsrIF0gPSBzZWNvbmRbIGogXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggc2Vjb25k
W2pdICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmly
c3RbIGkrKyBdID0gc2Vjb25kWyBqKysgXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZpcnN0Lmxlbmd0aCA9IGk7CgogICAgICAg
ICAgICAgICAgcmV0dXJuIGZpcnN0OwogICAgICAgIH0sCgogICAgICAgIGdyZXA6IGZ1bmN0aW9u
KCBlbGVtcywgY2FsbGJhY2ssIGludiApIHsKICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXSwg
cmV0VmFsOwogICAgICAgICAgICAgICAgaW52ID0gISFpbnY7CgogICAgICAgICAgICAgICAgLy8g
R28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcwogICAgICAgICAgICAg
ICAgLy8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb24KICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0s
IGkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnYgIT09IHJldFZhbCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggZWxlbXNbIGkgXSApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
cmV0dXJuIHJldDsKICAgICAgICB9LAoKICAgICAgICAvLyBhcmcgaXMgZm9yIGludGVybmFsIHVz
YWdlIG9ubHkKICAgICAgICBtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHsK
ICAgICAgICAgICAgICAgIHZhciB2YWx1ZSwga2V5LCByZXQgPSBbXSwKICAgICAgICAgICAgICAg
ICAgICAgICAgaSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1zLmxl
bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8ganF1ZXJ5IG9iamVjdHMgYXJlIHRyZWF0
ZWQgYXMgYXJyYXlzCiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXJyYXkgPSBlbGVtcyBpbnN0
YW5jZW9mIGpRdWVyeSB8fCBsZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbGVuZ3RoID09
PSAibnVtYmVyIiAmJiAoICggbGVuZ3RoID4gMCAmJiBlbGVtc1sgMCBdICYmIGVsZW1zWyBsZW5n
dGggLTEgXSApIHx8IGxlbmd0aCA9PT0gMCB8fCBqUXVlcnkuaXNBcnJheSggZWxlbXMgKSApIDsK
CiAgICAgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFj
aCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIKICAgICAgICAgICAgICAgIGlmICggaXNBcnJheSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwg
aSwgYXJnICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0g
bnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFsgcmV0
Lmxlbmd0aCBdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBldmVy
eSBrZXkgb24gdGhlIG9iamVjdCwKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIGtleSBpbiBlbGVtcyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sga2V5IF0sIGtleSwgYXJnICk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxlbmd0aCBdID0g
dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRmxhdHRlbiBh
bnkgbmVzdGVkIGFycmF5cwogICAgICAgICAgICAgICAgcmV0dXJuIHJldC5jb25jYXQuYXBwbHko
IFtdLCByZXQgKTsKICAgICAgICB9LAoKICAgICAgICAvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIg
Zm9yIG9iamVjdHMKICAgICAgICBndWlkOiAxLAoKICAgICAgICAvLyBCaW5kIGEgZnVuY3Rpb24g
dG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnkKICAgICAgICAv
LyBhcmd1bWVudHMuCiAgICAgICAgcHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHsKICAg
ICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09ICJzdHJpbmciICkgewogICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdG1wID0gZm5bIGNvbnRleHQgXTsKICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dCA9IGZuOwogICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHRtcDsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBRdWljayBjaGVjayB0byBkZXRl
cm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYwogICAgICAgICAgICAgICAg
Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVm
aW5lZC4KICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlZCBiaW5kCiAgICAgICAgICAgICAgICB2YXIg
YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApLAogICAgICAgICAgICAgICAgICAgICAg
ICBwcm94eSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmbi5hcHBseSggY29udGV4dCwgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50
cyApICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBT
ZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFu
ZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWQKICAgICAgICAgICAgICAgIHByb3h5Lmd1aWQgPSBm
bi5ndWlkID0gZm4uZ3VpZCB8fCBwcm94eS5ndWlkIHx8IGpRdWVyeS5ndWlkKys7CgogICAgICAg
ICAgICAgICAgcmV0dXJuIHByb3h5OwogICAgICAgIH0sCgogICAgICAgIC8vIE11dGlmdW5jdGlv
bmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgdG8gYSBjb2xsZWN0aW9uCiAgICAgICAg
Ly8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0
aW9uCiAgICAgICAgYWNjZXNzOiBmdW5jdGlvbiggZWxlbXMsIGtleSwgdmFsdWUsIGV4ZWMsIGZu
LCBwYXNzICkgewogICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsKCiAg
ICAgICAgICAgICAgICAvLyBTZXR0aW5nIG1hbnkgYXR0cmlidXRlcwogICAgICAgICAgICAgICAg
aWYgKCB0eXBlb2Yga2V5ID09PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggdmFyIGsgaW4ga2V5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5hY2Nlc3MoIGVsZW1zLCBrLCBrZXlba10sIGV4ZWMsIGZuLCB2YWx1ZSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtczsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIG9uZSBhdHRyaWJ1
dGUKICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gT3B0aW9uYWxseSwgZnVuY3Rpb24gdmFsdWVzIGdldCBleGVjdXRl
ZCBpZiBleGVjIGlzIHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyA9ICFwYXNzICYm
IGV4ZWMgJiYgalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm4oIGVsZW1zW2ldLCBrZXksIGV4ZWMgPyB2YWx1ZS5jYWxsKCBlbGVt
c1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApIDogdmFsdWUsIHBhc3MgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1zOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEdldHRpbmcgYW4gYXR0cmlidXRl
CiAgICAgICAgICAgICAgICByZXR1cm4gbGVuZ3RoID8gZm4oIGVsZW1zWzBdLCBrZXkgKSA6IHVu
ZGVmaW5lZDsKICAgICAgICB9LAoKICAgICAgICBub3c6IGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgICAgcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CiAgICAgICAgfSwKCiAgICAgICAg
Ly8gVXNlIG9mIGpRdWVyeS5icm93c2VyIGlzIGZyb3duZWQgdXBvbi4KICAgICAgICAvLyBNb3Jl
IGRldGFpbHM6IGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVXRpbGl0aWVzL2pRdWVyeS5icm93c2Vy
CiAgICAgICAgdWFNYXRjaDogZnVuY3Rpb24oIHVhICkgewogICAgICAgICAgICAgICAgdWEgPSB1
YS50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHJ3ZWJraXQuZXhl
YyggdWEgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICByb3BlcmEuZXhlYyggdWEgKSB8fAog
ICAgICAgICAgICAgICAgICAgICAgICBybXNpZS5leGVjKCB1YSApIHx8CiAgICAgICAgICAgICAg
ICAgICAgICAgIHVhLmluZGV4T2YoImNvbXBhdGlibGUiKSA8IDAgJiYgcm1vemlsbGEuZXhlYygg
dWEgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICBbXTsKCiAgICAgICAgICAgICAgICByZXR1
cm4geyBicm93c2VyOiBtYXRjaFsxXSB8fCAiIiwgdmVyc2lvbjogbWF0Y2hbMl0gfHwgIjAiIH07
CiAgICAgICAgfSwKCiAgICAgICAgc3ViOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGZ1
bmN0aW9uIGpRdWVyeVN1Yiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgalF1ZXJ5U3ViLmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0cnVlLCBq
UXVlcnlTdWIsIHRoaXMgKTsKICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5zdXBlcmNsYXNzID0g
dGhpczsKICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5mbiA9IGpRdWVyeVN1Yi5wcm90b3R5cGUg
PSB0aGlzKCk7CiAgICAgICAgICAgICAgICBqUXVlcnlTdWIuZm4uY29uc3RydWN0b3IgPSBqUXVl
cnlTdWI7CiAgICAgICAgICAgICAgICBqUXVlcnlTdWIuc3ViID0gdGhpcy5zdWI7CiAgICAgICAg
ICAgICAgICBqUXVlcnlTdWIuZm4uaW5pdCA9IGZ1bmN0aW9uIGluaXQoIHNlbGVjdG9yLCBjb250
ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQgJiYgY29udGV4dCBp
bnN0YW5jZW9mIGpRdWVyeSAmJiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBqUXVlcnlTdWIoIGNvbnRl
eHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5mbi5pbml0LmNhbGwoIHRoaXMsIHNlbGVjdG9yLCBjb250ZXh0LCByb290
alF1ZXJ5U3ViICk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgalF1ZXJ5U3Vi
LmZuLmluaXQucHJvdG90eXBlID0galF1ZXJ5U3ViLmZuOwogICAgICAgICAgICAgICAgdmFyIHJv
b3RqUXVlcnlTdWIgPSBqUXVlcnlTdWIoZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgcmV0dXJu
IGpRdWVyeVN1YjsKICAgICAgICB9LAoKICAgICAgICBicm93c2VyOiB7fQp9KTsKCi8vIFBvcHVs
YXRlIHRoZSBjbGFzczJ0eXBlIG1hcApqUXVlcnkuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5n
IEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSwgZnVuY3Rpb24o
aSwgbmFtZSkgewogICAgICAgIGNsYXNzMnR5cGVbICJbb2JqZWN0ICIgKyBuYW1lICsgIl0iIF0g
PSBuYW1lLnRvTG93ZXJDYXNlKCk7Cn0pOwoKYnJvd3Nlck1hdGNoID0galF1ZXJ5LnVhTWF0Y2go
IHVzZXJBZ2VudCApOwppZiAoIGJyb3dzZXJNYXRjaC5icm93c2VyICkgewogICAgICAgIGpRdWVy
eS5icm93c2VyWyBicm93c2VyTWF0Y2guYnJvd3NlciBdID0gdHJ1ZTsKICAgICAgICBqUXVlcnku
YnJvd3Nlci52ZXJzaW9uID0gYnJvd3Nlck1hdGNoLnZlcnNpb247Cn0KCi8vIERlcHJlY2F0ZWQs
IHVzZSBqUXVlcnkuYnJvd3Nlci53ZWJraXQgaW5zdGVhZAppZiAoIGpRdWVyeS5icm93c2VyLndl
YmtpdCApIHsKICAgICAgICBqUXVlcnkuYnJvd3Nlci5zYWZhcmkgPSB0cnVlOwp9CgovLyBJRSBk
b2Vzbid0IG1hdGNoIG5vbi1icmVha2luZyBzcGFjZXMgd2l0aCBccwppZiAoIHJub3R3aGl0ZS50
ZXN0KCAiXHhBMCIgKSApIHsKICAgICAgICB0cmltTGVmdCA9IC9eW1xzXHhBMF0rLzsKICAgICAg
ICB0cmltUmlnaHQgPSAvW1xzXHhBMF0rJC87Cn0KCi8vIEFsbCBqUXVlcnkgb2JqZWN0cyBzaG91
bGQgcG9pbnQgYmFjayB0byB0aGVzZQpyb290alF1ZXJ5ID0galF1ZXJ5KGRvY3VtZW50KTsKCi8v
IENsZWFudXAgZnVuY3Rpb25zIGZvciB0aGUgZG9jdW1lbnQgcmVhZHkgbWV0aG9kCmlmICggZG9j
dW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKICAgICAgICBET01Db250ZW50TG9hZGVkID0gZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAi
RE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7CiAgICAgICAgICAg
ICAgICBqUXVlcnkucmVhZHkoKTsKICAgICAgICB9OwoKfSBlbHNlIGlmICggZG9jdW1lbnQuYXR0
YWNoRXZlbnQgKSB7CiAgICAgICAgRE9NQ29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4gY2FzZSBJ
RSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMpLgogICAgICAgICAgICAg
ICAgaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIs
IERPTUNvbnRlbnRMb2FkZWQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlYWR5
KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKfQoKLy8gVGhlIERPTSByZWFkeSBjaGVj
ayBmb3IgSW50ZXJuZXQgRXhwbG9yZXIKZnVuY3Rpb24gZG9TY3JvbGxDaGVjaygpIHsKICAgICAg
ICBpZiAoIGpRdWVyeS5pc1JlYWR5ICkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
IH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIElmIElFIGlzIHVzZWQsIHVzZSB0
aGUgdHJpY2sgYnkgRGllZ28gUGVyaW5pCiAgICAgICAgICAgICAgICAvLyBodHRwOi8vamF2YXNj
cmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkLwogICAgICAgICAgICAgICAgZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iik7CiAgICAgICAgfSBjYXRjaChlKSB7CiAg
ICAgICAgICAgICAgICBzZXRUaW1lb3V0KCBkb1Njcm9sbENoZWNrLCAxICk7CiAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBhbmQgZXhlY3V0ZSBhbnkgd2FpdGlu
ZyBmdW5jdGlvbnMKICAgICAgICBqUXVlcnkucmVhZHkoKTsKfQoKcmV0dXJuIGpRdWVyeTsKCn0p
KCk7CgoKdmFyIC8vIFByb21pc2UgbWV0aG9kcwogICAgICAgIHByb21pc2VNZXRob2RzID0gImRv
bmUgZmFpbCBpc1Jlc29sdmVkIGlzUmVqZWN0ZWQgcHJvbWlzZSB0aGVuIGFsd2F5cyBwaXBlIi5z
cGxpdCggIiAiICksCiAgICAgICAgLy8gU3RhdGljIHJlZmVyZW5jZSB0byBzbGljZQogICAgICAg
IHNsaWNlRGVmZXJyZWQgPSBbXS5zbGljZTsKCmpRdWVyeS5leHRlbmQoewogICAgICAgIC8vIENy
ZWF0ZSBhIHNpbXBsZSBkZWZlcnJlZCAob25lIGNhbGxiYWNrcyBsaXN0KQogICAgICAgIF9EZWZl
cnJlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgLy8gY2FsbGJhY2tzIGxpc3QK
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzID0gW10sCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHN0b3JlZCBbIGNvbnRleHQgLCBhcmdzIF0KICAgICAgICAgICAgICAgICAgICAg
ICAgZmlyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGZpcmluZyB3aGVu
IGFscmVhZHkgZG9pbmcgc28KICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nLAogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmbGFnIHRvIGtub3cgaWYgdGhlIGRlZmVycmVkIGhhcyBiZWVu
IGNhbmNlbGxlZAogICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxsZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBkZWZlcnJlZCBpdHNlbGYKICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQgID0gewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb25l
KCBmMSwgZjIsIC4uLikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNh
bmNlbGxlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9maXJlZDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJlZCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
ZmlyZWQgPSBmaXJlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXJlZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSA9IDAsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBp
KysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbSA9IGFyZ3NbIGkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0galF1ZXJ5LnR5cGUoIGVsZW0gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5
cGUgPT09ICJhcnJheSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5kb25lLmFwcGx5KCBkZWZlcnJlZCwg
ZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICJmdW5jdGlvbiIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
a3MucHVzaCggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIF9maXJlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggX2ZpcmVkWyAwIF0sIF9maXJl
ZFsgMSBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJl
c29sdmUgd2l0aCBnaXZlbiBjb250ZXh0IGFuZCBhcmdzCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY2FuY2VsbGVkICYmICFmaXJl
ZCAmJiAhZmlyaW5nICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBtYWtlIHN1cmUgYXJncyBhcmUgYXZhaWxhYmxlICgjODQyMSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MgfHwgW107
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZyA9
IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUoIGNhbGxiYWNrc1sgMCBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkuYXBwbHko
IGNvbnRleHQsIGFyZ3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmluYWxseSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmlyZWQgPSBbIGNvbnRleHQsIGFyZ3MgXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmcgPSAwOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHdpdGggdGhpcyBh
cyBjb250ZXh0IGFuZCBnaXZlbiBhcmd1bWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNvbHZlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEhhcyB0aGlzIGRlZmVycmVkIGJlZW4gcmVzb2x2ZWQ/CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNSZXNvbHZlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gISEoIGZpcmluZyB8fCBmaXJlZCApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENhbmNlbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxs
ZWQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tz
ID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH07CgogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgICAgIH0sCgogICAg
ICAgIC8vIEZ1bGwgZmxlZGdlZCBkZWZlcnJlZCAodHdvIGNhbGxiYWNrcyBsaXN0KQogICAgICAg
IERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHsKICAgICAgICAgICAgICAgIHZhciBkZWZlcnJl
ZCA9IGpRdWVyeS5fRGVmZXJyZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgZmFpbERlZmVy
cmVkID0galF1ZXJ5Ll9EZWZlcnJlZCgpLAogICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNl
OwogICAgICAgICAgICAgICAgLy8gQWRkIGVycm9yRGVmZXJyZWQgbWV0aG9kcywgdGhlbiBhbmQg
cHJvbWlzZQogICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCggZGVmZXJyZWQsIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgdGhlbjogZnVuY3Rpb24oIGRvbmVDYWxsYmFja3MsIGZhaWxDYWxs
YmFja3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQuZG9uZSgg
ZG9uZUNhbGxiYWNrcyApLmZhaWwoIGZhaWxDYWxsYmFja3MgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAg
ICAgICAgICAgICAgICAgICAgICAgYWx3YXlzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQuZG9uZS5hcHBseSggZGVmZXJyZWQsIGFy
Z3VtZW50cyApLmZhaWwuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBmYWlsOiBmYWlsRGVmZXJyZWQuZG9u
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0V2l0aDogZmFpbERlZmVycmVkLnJlc29s
dmVXaXRoLAogICAgICAgICAgICAgICAgICAgICAgICByZWplY3Q6IGZhaWxEZWZlcnJlZC5yZXNv
bHZlLAogICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWlsRGVmZXJyZWQuaXNS
ZXNvbHZlZCwKICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTogZnVuY3Rpb24oIGZuRG9uZSwg
Zm5GYWlsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnku
RGVmZXJyZWQoZnVuY3Rpb24oIG5ld0RlZmVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9uZTogWyBmbkRvbmUsICJyZXNvbHZlIiBdLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsOiBbIGZuRmFpbCwg
InJlamVjdCIgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVu
Y3Rpb24oIGhhbmRsZXIsIGRhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBmbiA9IGRhdGFbIDAgXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSBkYXRhWyAxIF0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRbIGhhbmRsZXIgXShmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybmVkID0gZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSAp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC5wcm9taXNlKCkudGhlbiggbmV3RGVmZXIucmVz
b2x2ZSwgbmV3RGVmZXIucmVqZWN0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdEZWZlclsgYWN0aW9uICsgIldpdGgiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gbmV3RGVmZXIg
OiB0aGlzLCBbIHJldHVybmVkIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFsgaGFuZGxlciBdKCBu
ZXdEZWZlclsgYWN0aW9uIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkucHJvbWlzZSgpOwogICAgICAgICAg
ICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYSBwcm9taXNl
IGZvciB0aGlzIGRlZmVycmVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG9iaiBpcyBw
cm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3QKICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG9iaiA9PSBudWxsICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwcm9taXNlICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByb21pc2UgPSBvYmogPSB7fTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBwcm9t
aXNlTWV0aG9kcy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUo
IGktLSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialsgcHJv
bWlzZU1ldGhvZHNbaV0gXSA9IGRlZmVycmVkWyBwcm9taXNlTWV0aG9kc1tpXSBdOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gb2JqOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBvbmx5IG9uZSBjYWxsYmFjayBsaXN0IHdp
bGwgYmUgdXNlZAogICAgICAgICAgICAgICAgZGVmZXJyZWQuZG9uZSggZmFpbERlZmVycmVkLmNh
bmNlbCApLmZhaWwoIGRlZmVycmVkLmNhbmNlbCApOwogICAgICAgICAgICAgICAgLy8gVW5leHBv
c2UgY2FuY2VsCiAgICAgICAgICAgICAgICBkZWxldGUgZGVmZXJyZWQuY2FuY2VsOwogICAgICAg
ICAgICAgICAgLy8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueQogICAgICAgICAgICAgICAgaWYgKCBm
dW5jICkgewogICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZl
cnJlZCApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVk
OwogICAgICAgIH0sCgogICAgICAgIC8vIERlZmVycmVkIGhlbHBlcgogICAgICAgIHdoZW46IGZ1
bmN0aW9uKCBmaXJzdFBhcmFtICkgewogICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVu
dHMsCiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgICAgICAg
ICBsZW5ndGggPSBhcmdzLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBs
ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkID0gbGVuZ3RoIDw9IDEgJiYg
Zmlyc3RQYXJhbSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZmlyc3RQYXJhbS5wcm9taXNlICkgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UGFyYW0gOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5EZWZlcnJlZCgpOwogICAgICAgICAgICAgICAgZnVu
Y3Rpb24gcmVzb2x2ZUZ1bmMoIGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiggdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sg
aSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZURlZmVycmVkLmNhbGwoIGFyZ3VtZW50
cywgMCApIDogdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCAt
LWNvdW50ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBT
dHJhbmdlIGJ1ZyBpbiBGRjQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBWYWx1ZXMgY2hhbmdlZCBvbnRvIHRoZSBhcmd1bWVudHMgb2JqZWN0IHNvbWV0aW1lcyBl
bmQgdXAgYXMgdW5kZWZpbmVkIHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gb3V0c2lkZSB0aGUgJC53aGVuIG1ldGhvZC4gQ2xvbmluZyB0aGUgb2JqZWN0
IGludG8gYSBmcmVzaCBhcnJheSBzb2x2ZXMgdGhlIGlzc3VlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVmZXJyZWQsIHNsaWNl
RGVmZXJyZWQuY2FsbCggYXJncywgMCApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgaWYgKCBsZW5ndGggPiAxICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3Io
IDsgaSA8IGxlbmd0aDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggYXJnc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBhcmdzWyBpIF0ucHJvbWlzZSApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sgaSBdLnByb21p
c2UoKS50aGVuKCByZXNvbHZlRnVuYyhpKSwgZGVmZXJyZWQucmVqZWN0ICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0tY291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNv
dW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVX
aXRoKCBkZWZlcnJlZCwgYXJncyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCBkZWZlcnJlZCAhPT0gZmlyc3RQYXJhbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGRlZmVycmVkLCBsZW5ndGggPyBb
IGZpcnN0UGFyYW0gXSA6IFtdICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpOwogICAgICAgIH0KfSk7CgoKCmpRdWVyeS5zdXBwb3J0
ID0gKGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggImRpdiIgKSwKICAgICAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudCwKICAgICAgICAgICAgICAgIGFsbCwKICAgICAgICAgICAgICAgIGEsCiAg
ICAgICAgICAgICAgICBzZWxlY3QsCiAgICAgICAgICAgICAgICBvcHQsCiAgICAgICAgICAgICAg
ICBpbnB1dCwKICAgICAgICAgICAgICAgIG1hcmdpbkRpdiwKICAgICAgICAgICAgICAgIHN1cHBv
cnQsCiAgICAgICAgICAgICAgICBmcmFnbWVudCwKICAgICAgICAgICAgICAgIGJvZHksCiAgICAg
ICAgICAgICAgICB0ZXN0RWxlbWVudFBhcmVudCwKICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50
LAogICAgICAgICAgICAgICAgdGVzdEVsZW1lbnRTdHlsZSwKICAgICAgICAgICAgICAgIHRkcywK
ICAgICAgICAgICAgICAgIGV2ZW50cywKICAgICAgICAgICAgICAgIGV2ZW50TmFtZSwKICAgICAg
ICAgICAgICAgIGksCiAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZDsKCiAgICAgICAgLy8gUHJl
bGltaW5hcnkgdGVzdHMKICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCAidCIp
OwogICAgICAgIGRpdi5pbm5lckhUTUwgPSAiICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhy
ZWY9Jy9hJyBzdHlsZT0ndG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjU1Oyc+YTwvYT48aW5w
dXQgdHlwZT0nY2hlY2tib3gnLz4iOwoKCiAgICAgICAgYWxsID0gZGl2LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCAiKiIgKTsKICAgICAgICBhID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiYSIg
KVsgMCBdOwoKICAgICAgICAvLyBDYW4ndCBnZXQgYmFzaWMgdGVzdCBzdXBwb3J0CiAgICAgICAg
aWYgKCAhYWxsIHx8ICFhbGwubGVuZ3RoIHx8ICFhICkgewogICAgICAgICAgICAgICAgcmV0dXJu
IHt9OwogICAgICAgIH0KCiAgICAgICAgLy8gRmlyc3QgYmF0Y2ggb2Ygc3VwcG9ydHMgdGVzdHMK
ICAgICAgICBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2VsZWN0IiApOwogICAg
ICAgIG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0
aW9uIikgKTsKICAgICAgICBpbnB1dCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggImlucHV0
IiApWyAwIF07CgogICAgICAgIHN1cHBvcnQgPSB7CiAgICAgICAgICAgICAgICAvLyBJRSBzdHJp
cHMgbGVhZGluZyB3aGl0ZXNwYWNlIHdoZW4gLmlubmVySFRNTCBpcyB1c2VkCiAgICAgICAgICAg
ICAgICBsZWFkaW5nV2hpdGVzcGFjZTogKCBkaXYuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMyAp
LAoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRib2R5IGVsZW1lbnRzIGFyZW4n
dCBhdXRvbWF0aWNhbGx5IGluc2VydGVkCiAgICAgICAgICAgICAgICAvLyBJRSB3aWxsIGluc2Vy
dCB0aGVtIGludG8gZW1wdHkgdGFibGVzCiAgICAgICAgICAgICAgICB0Ym9keTogIWRpdi5nZXRF
bGVtZW50c0J5VGFnTmFtZSggInRib2R5IiApLmxlbmd0aCwKCiAgICAgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCBsaW5rIGVsZW1lbnRzIGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBp
bm5lckhUTUwKICAgICAgICAgICAgICAgIC8vIFRoaXMgcmVxdWlyZXMgYSB3cmFwcGVyIGVsZW1l
bnQgaW4gSUUKICAgICAgICAgICAgICAgIGh0bWxTZXJpYWxpemU6ICEhZGl2LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCAibGluayIgKS5sZW5ndGgsCgogICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBz
dHlsZSBpbmZvcm1hdGlvbiBmcm9tIGdldEF0dHJpYnV0ZQogICAgICAgICAgICAgICAgLy8gKElF
IHVzZXMgLmNzc1RleHQgaW5zdGVhZCkKICAgICAgICAgICAgICAgIHN0eWxlOiAvdG9wLy50ZXN0
KCBhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSApLAoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IFVSTHMgYXJlbid0IG1hbmlwdWxhdGVkCiAgICAgICAgICAgICAgICAvLyAoSUUgbm9y
bWFsaXplcyBpdCBieSBkZWZhdWx0KQogICAgICAgICAgICAgICAgaHJlZk5vcm1hbGl6ZWQ6ICgg
YS5nZXRBdHRyaWJ1dGUoICJocmVmIiApID09PSAiL2EiICksCgogICAgICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgZWxlbWVudCBvcGFjaXR5IGV4aXN0cwogICAgICAgICAgICAgICAgLy8g
KElFIHVzZXMgZmlsdGVyIGluc3RlYWQpCiAgICAgICAgICAgICAgICAvLyBVc2UgYSByZWdleCB0
byB3b3JrIGFyb3VuZCBhIFdlYktpdCBpc3N1ZS4gU2VlICM1MTQ1CiAgICAgICAgICAgICAgICBv
cGFjaXR5OiAvXjAuNTUkLy50ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKSwKCiAgICAgICAgICAgICAg
ICAvLyBWZXJpZnkgc3R5bGUgZmxvYXQgZXhpc3RlbmNlCiAgICAgICAgICAgICAgICAvLyAoSUUg
dXNlcyBzdHlsZUZsb2F0IGluc3RlYWQgb2YgY3NzRmxvYXQpCiAgICAgICAgICAgICAgICBjc3NG
bG9hdDogISFhLnN0eWxlLmNzc0Zsb2F0LAoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCBmb3IgYSBjaGVja2JveAogICAgICAgICAgICAg
ICAgLy8gdGhhdCBpdCBkZWZhdWx0cyB0byAib24iLgogICAgICAgICAgICAgICAgLy8gKFdlYktp
dCBkZWZhdWx0cyB0byAiIiBpbnN0ZWFkKQogICAgICAgICAgICAgICAgY2hlY2tPbjogKCBpbnB1
dC52YWx1ZSA9PT0gIm9uIiApLAoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGEg
c2VsZWN0ZWQtYnktZGVmYXVsdCBvcHRpb24gaGFzIGEgd29ya2luZyBzZWxlY3RlZCBwcm9wZXJ0
eS4KICAgICAgICAgICAgICAgIC8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFsc2UgaW5zdGVhZCBv
ZiB0cnVlLCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3JvdXApCiAgICAgICAgICAgICAgICBv
cHRTZWxlY3RlZDogb3B0LnNlbGVjdGVkLAoKICAgICAgICAgICAgICAgIC8vIFRlc3Qgc2V0QXR0
cmlidXRlIG9uIGNhbWVsQ2FzZSBjbGFzcy4gSWYgaXQgd29ya3MsIHdlIG5lZWQgYXR0ckZpeGVz
IHdoZW4gZG9pbmcgZ2V0L3NldEF0dHJpYnV0ZSAoaWU2LzcpCiAgICAgICAgICAgICAgICBnZXRT
ZXRBdHRyaWJ1dGU6IGRpdi5jbGFzc05hbWUgIT09ICJ0IiwKCiAgICAgICAgICAgICAgICAvLyBX
aWxsIGJlIGRlZmluZWQgbGF0ZXIKICAgICAgICAgICAgICAgIHN1Ym1pdEJ1YmJsZXM6IHRydWUs
CiAgICAgICAgICAgICAgICBjaGFuZ2VCdWJibGVzOiB0cnVlLAogICAgICAgICAgICAgICAgZm9j
dXNpbkJ1YmJsZXM6IGZhbHNlLAogICAgICAgICAgICAgICAgZGVsZXRlRXhwYW5kbzogdHJ1ZSwK
ICAgICAgICAgICAgICAgIG5vQ2xvbmVFdmVudDogdHJ1ZSwKICAgICAgICAgICAgICAgIGlubGlu
ZUJsb2NrTmVlZHNMYXlvdXQ6IGZhbHNlLAogICAgICAgICAgICAgICAgc2hyaW5rV3JhcEJsb2Nr
czogZmFsc2UsCiAgICAgICAgICAgICAgICByZWxpYWJsZU1hcmdpblJpZ2h0OiB0cnVlCiAgICAg
ICAgfTsKCiAgICAgICAgLy8gTWFrZSBzdXJlIGNoZWNrZWQgc3RhdHVzIGlzIHByb3Blcmx5IGNs
b25lZAogICAgICAgIGlucHV0LmNoZWNrZWQgPSB0cnVlOwogICAgICAgIHN1cHBvcnQubm9DbG9u
ZUNoZWNrZWQgPSBpbnB1dC5jbG9uZU5vZGUoIHRydWUgKS5jaGVja2VkOwoKICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgb3B0aW9ucyBpbnNpZGUgZGlzYWJsZWQgc2VsZWN0cyBhcmVuJ3Qg
bWFya2VkIGFzIGRpc2FibGVkCiAgICAgICAgLy8gKFdlYktpdCBtYXJrcyB0aGVtIGFzIGRpc2Fi
bGVkKQogICAgICAgIHNlbGVjdC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgc3VwcG9ydC5vcHRE
aXNhYmxlZCA9ICFvcHQuZGlzYWJsZWQ7CgogICAgICAgIC8vIFRlc3QgdG8gc2VlIGlmIGl0J3Mg
cG9zc2libGUgdG8gZGVsZXRlIGFuIGV4cGFuZG8gZnJvbSBhbiBlbGVtZW50CiAgICAgICAgLy8g
RmFpbHMgaW4gSW50ZXJuZXQgRXhwbG9yZXIKICAgICAgICB0cnkgewogICAgICAgICAgICAgICAg
ZGVsZXRlIGRpdi50ZXN0OwogICAgICAgIH0gY2F0Y2goIGUgKSB7CiAgICAgICAgICAgICAgICBz
dXBwb3J0LmRlbGV0ZUV4cGFuZG8gPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmICggIWRp
di5hZGRFdmVudExpc3RlbmVyICYmIGRpdi5hdHRhY2hFdmVudCAmJiBkaXYuZmlyZUV2ZW50ICkg
ewogICAgICAgICAgICAgICAgZGl2LmF0dGFjaEV2ZW50KCAib25jbGljayIsIGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9uaW5nIGEgbm9kZSBzaG91bGRuJ3QgY29w
eSBvdmVyIGFueQogICAgICAgICAgICAgICAgICAgICAgICAvLyBib3VuZCBldmVudCBoYW5kbGVy
cyAoSUUgZG9lcyB0aGlzKQogICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0Lm5vQ2xvbmVF
dmVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBkaXYuY2xv
bmVOb2RlKCB0cnVlICkuZmlyZUV2ZW50KCAib25jbGljayIgKTsKICAgICAgICB9CgogICAgICAg
IC8vIENoZWNrIGlmIGEgcmFkaW8gbWFpbnRhaW5zIGl0J3MgdmFsdWUKICAgICAgICAvLyBhZnRl
ciBiZWluZyBhcHBlbmRlZCB0byB0aGUgRE9NCiAgICAgICAgaW5wdXQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbnB1dCIpOwogICAgICAgIGlucHV0LnZhbHVlID0gInQiOwogICAgICAgIGlu
cHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJyYWRpbyIpOwogICAgICAgIHN1cHBvcnQucmFkaW9W
YWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7CgogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgi
Y2hlY2tlZCIsICJjaGVja2VkIik7CiAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApOwog
ICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAg
ICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBkaXYuZmlyc3RDaGlsZCApOwoKICAgICAgICAvLyBX
ZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHMK
ICAgICAgICBzdXBwb3J0LmNoZWNrQ2xvbmUgPSBmcmFnbWVudC5jbG9uZU5vZGUoIHRydWUgKS5j
bG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDsKCiAgICAgICAgZGl2LmlubmVySFRN
TCA9ICIiOwoKICAgICAgICAvLyBGaWd1cmUgb3V0IGlmIHRoZSBXM0MgYm94IG1vZGVsIHdvcmtz
IGFzIGV4cGVjdGVkCiAgICAgICAgZGl2LnN0eWxlLndpZHRoID0gZGl2LnN0eWxlLnBhZGRpbmdM
ZWZ0ID0gIjFweCI7CgogICAgICAgIGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSggImJvZHkiIClbIDAgXTsKICAgICAgICAvLyBXZSB1c2Ugb3VyIG93biwgaW52aXNpYmxlLCBi
b2R5IHVubGVzcyB0aGUgYm9keSBpcyBhbHJlYWR5IHByZXNlbnQKICAgICAgICAvLyBpbiB3aGlj
aCBjYXNlIHdlIHVzZSBhIGRpdiAoIzkyMzkpCiAgICAgICAgdGVzdEVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCBib2R5ID8gImRpdiIgOiAiYm9keSIgKTsKICAgICAgICB0ZXN0RWxl
bWVudFN0eWxlID0gewogICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogImhpZGRlbiIsCiAgICAg
ICAgICAgICAgICB3aWR0aDogMCwKICAgICAgICAgICAgICAgIGhlaWdodDogMCwKICAgICAgICAg
ICAgICAgIGJvcmRlcjogMCwKICAgICAgICAgICAgICAgIG1hcmdpbjogMCwKICAgICAgICAgICAg
ICAgIGJhY2tncm91bmQ6ICJub25lIgogICAgICAgIH07CiAgICAgICAgaWYgKCBib2R5ICkgewog
ICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGVzdEVsZW1lbnRTdHlsZSwgewogICAgICAg
ICAgICAgICAgICAgICAgICBwb3NpdGlvbjogImFic29sdXRlIiwKICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdDogIi0xMDAwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICB0b3A6ICItMTAw
MHB4IgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGZvciAoIGkgaW4gdGVz
dEVsZW1lbnRTdHlsZSApIHsKICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlWyBpIF0g
PSB0ZXN0RWxlbWVudFN0eWxlWyBpIF07CiAgICAgICAgfQogICAgICAgIHRlc3RFbGVtZW50LmFw
cGVuZENoaWxkKCBkaXYgKTsKICAgICAgICB0ZXN0RWxlbWVudFBhcmVudCA9IGJvZHkgfHwgZG9j
dW1lbnRFbGVtZW50OwogICAgICAgIHRlc3RFbGVtZW50UGFyZW50Lmluc2VydEJlZm9yZSggdGVz
dEVsZW1lbnQsIHRlc3RFbGVtZW50UGFyZW50LmZpcnN0Q2hpbGQgKTsKCiAgICAgICAgLy8gQ2hl
Y2sgaWYgYSBkaXNjb25uZWN0ZWQgY2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNrZWQKICAg
ICAgICAvLyB2YWx1ZSBvZiB0cnVlIGFmdGVyIGFwcGVuZGVkIHRvIHRoZSBET00gKElFNi83KQog
ICAgICAgIHN1cHBvcnQuYXBwZW5kQ2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7CgogICAgICAgIHN1
cHBvcnQuYm94TW9kZWwgPSBkaXYub2Zmc2V0V2lkdGggPT09IDI7CgogICAgICAgIGlmICggInpv
b20iIGluIGRpdi5zdHlsZSApIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIG5hdGl2ZWx5
IGJsb2NrLWxldmVsIGVsZW1lbnRzIGFjdCBsaWtlIGlubGluZS1ibG9jawogICAgICAgICAgICAg
ICAgLy8gZWxlbWVudHMgd2hlbiBzZXR0aW5nIHRoZWlyIGRpc3BsYXkgdG8gJ2lubGluZScgYW5k
IGdpdmluZwogICAgICAgICAgICAgICAgLy8gdGhlbSBsYXlvdXQKICAgICAgICAgICAgICAgIC8v
IChJRSA8IDggZG9lcyB0aGlzKQogICAgICAgICAgICAgICAgZGl2LnN0eWxlLmRpc3BsYXkgPSAi
aW5saW5lIjsKICAgICAgICAgICAgICAgIGRpdi5zdHlsZS56b29tID0gMTsKICAgICAgICAgICAg
ICAgIHN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCA9ICggZGl2Lm9mZnNldFdpZHRoID09
PSAyICk7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudHMgd2l0aCBsYXlvdXQg
c2hyaW5rLXdyYXAgdGhlaXIgY2hpbGRyZW4KICAgICAgICAgICAgICAgIC8vIChJRSA2IGRvZXMg
dGhpcykKICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgICAg
ICAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXYgc3R5bGU9J3dpZHRoOjRweDsnPjwvZGl2PiI7CiAg
ICAgICAgICAgICAgICBzdXBwb3J0LnNocmlua1dyYXBCbG9ja3MgPSAoIGRpdi5vZmZzZXRXaWR0
aCAhPT0gMiApOwogICAgICAgIH0KCiAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8dGFibGU+PHRy
Pjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwv
dGQ+PC90cj48L3RhYmxlPiI7CiAgICAgICAgdGRzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCAidGQiICk7CgogICAgICAgIC8vIENoZWNrIGlmIHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zm
c2V0V2lkdGgvSGVpZ2h0IHdoZW4gdGhleSBhcmUgc2V0CiAgICAgICAgLy8gdG8gZGlzcGxheTpu
b25lIGFuZCB0aGVyZSBhcmUgc3RpbGwgb3RoZXIgdmlzaWJsZSB0YWJsZSBjZWxscyBpbiBhCiAg
ICAgICAgLy8gdGFibGUgcm93OyBpZiBzbywgb2Zmc2V0V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVs
aWFibGUgZm9yIHVzZSB3aGVuCiAgICAgICAgLy8gZGV0ZXJtaW5pbmcgaWYgYW4gZWxlbWVudCBo
YXMgYmVlbiBoaWRkZW4gZGlyZWN0bHkgdXNpbmcKICAgICAgICAvLyBkaXNwbGF5Om5vbmUgKGl0
IGlzIHN0aWxsIHNhZmUgdG8gdXNlIG9mZnNldHMgaWYgYSBwYXJlbnQgZWxlbWVudCBpcwogICAg
ICAgIC8vIGhpZGRlbjsgZG9uIHNhZmV0eSBnb2dnbGVzIGFuZCBzZWUgYnVnICM0NTEyIGZvciBt
b3JlIGluZm9ybWF0aW9uKS4KICAgICAgICAvLyAob25seSBJRSA4IGZhaWxzIHRoaXMgdGVzdCkK
ICAgICAgICBpc1N1cHBvcnRlZCA9ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7Cgog
ICAgICAgIHRkc1sgMCBdLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICB0ZHNbIDEgXS5zdHls
ZS5kaXNwbGF5ID0gIm5vbmUiOwoKICAgICAgICAvLyBDaGVjayBpZiBlbXB0eSB0YWJsZSBjZWxs
cyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodAogICAgICAgIC8vIChJRSA8IDggZmFpbCB0
aGlzIHRlc3QpCiAgICAgICAgc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMgPSBpc1N1cHBv
cnRlZCAmJiAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCApOwogICAgICAgIGRpdi5pbm5l
ckhUTUwgPSAiIjsKCiAgICAgICAgLy8gQ2hlY2sgaWYgZGl2IHdpdGggZXhwbGljaXQgd2lkdGgg
YW5kIG5vIG1hcmdpbi1yaWdodCBpbmNvcnJlY3RseQogICAgICAgIC8vIGdldHMgY29tcHV0ZWQg
bWFyZ2luLXJpZ2h0IGJhc2VkIG9uIHdpZHRoIG9mIGNvbnRhaW5lci4gRm9yIG1vcmUKICAgICAg
ICAvLyBpbmZvIHNlZSBidWcgIzMzMzMKICAgICAgICAvLyBGYWlscyBpbiBXZWJLaXQgYmVmb3Jl
IEZlYiAyMDExIG5pZ2h0bGllcwogICAgICAgIC8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21w
dXRlZFN0eWxlIHJldHVybnMgd3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodAogICAgICAgIGlm
ICggZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0
ZWRTdHlsZSApIHsKICAgICAgICAgICAgICAgIG1hcmdpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoICJkaXYiICk7CiAgICAgICAgICAgICAgICBtYXJnaW5EaXYuc3R5bGUud2lkdGggPSAi
MCI7CiAgICAgICAgICAgICAgICBtYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSAiMCI7CiAg
ICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIG1hcmdpbkRpdiApOwogICAgICAgICAgICAg
ICAgc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ID0KICAgICAgICAgICAgICAgICAgICAgICAg
KCBwYXJzZUludCggKCBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKCBtYXJn
aW5EaXYsIG51bGwgKSB8fCB7IG1hcmdpblJpZ2h0OiAwIH0gKS5tYXJnaW5SaWdodCwgMTAgKSB8
fCAwICkgPT09IDA7CiAgICAgICAgfQoKICAgICAgICAvLyBSZW1vdmUgdGhlIGJvZHkgZWxlbWVu
dCB3ZSBhZGRlZAogICAgICAgIHRlc3RFbGVtZW50LmlubmVySFRNTCA9ICIiOwogICAgICAgIHRl
c3RFbGVtZW50UGFyZW50LnJlbW92ZUNoaWxkKCB0ZXN0RWxlbWVudCApOwoKICAgICAgICAvLyBU
ZWNobmlxdWUgZnJvbSBKdXJpeSBaYXl0c2V2CiAgICAgICAgLy8gaHR0cDovL3RoaW5rd2ViMi5j
b20vcHJvamVjdHMvcHJvdG90eXBlL2RldGVjdGluZy1ldmVudC1zdXBwb3J0LXdpdGhvdXQtYnJv
d3Nlci1zbmlmZmluZy8KICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGNhc2Ugd2hl
cmUgbm9uLXN0YW5kYXJkIGV2ZW50IHN5c3RlbXMKICAgICAgICAvLyBhcmUgdXNlZCwgbmFtZWx5
IGluIElFLiBTaG9ydC1jaXJjdWl0aW5nIGhlcmUgaGVscHMgdXMgdG8KICAgICAgICAvLyBhdm9p
ZCBhbiBldmFsIGNhbGwgKGluIHNldEF0dHJpYnV0ZSkgd2hpY2ggY2FuIGNhdXNlIENTUAogICAg
ICAgIC8vIHRvIGdvIGhheXdpcmUuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcv
ZW4vU2VjdXJpdHkvQ1NQCiAgICAgICAgaWYgKCBkaXYuYXR0YWNoRXZlbnQgKSB7CiAgICAgICAg
ICAgICAgICBmb3IoIGkgaW4gewogICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXQ6IDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogMSwKICAgICAgICAgICAgICAgICAgICAgICAg
Zm9jdXNpbjogMQogICAgICAgICAgICAgICAgfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnROYW1lID0gIm9uIiArIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VwcG9ydGVk
ID0gKCBldmVudE5hbWUgaW4gZGl2ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlz
U3VwcG9ydGVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5zZXRBdHRy
aWJ1dGUoIGV2ZW50TmFtZSwgInJldHVybjsiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXNTdXBwb3J0ZWQgPSAoIHR5cGVvZiBkaXZbIGV2ZW50TmFtZSBdID09PSAiZnVuY3Rp
b24iICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
c3VwcG9ydFsgaSArICJCdWJibGVzIiBdID0gaXNTdXBwb3J0ZWQ7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQoKICAgICAgICAvLyBOdWxsIGNvbm5lY3RlZCBlbGVtZW50cyB0byBhdm9pZCBs
ZWFrcyBpbiBJRQogICAgICAgIHRlc3RFbGVtZW50ID0gZnJhZ21lbnQgPSBzZWxlY3QgPSBvcHQg
PSBib2R5ID0gbWFyZ2luRGl2ID0gZGl2ID0gaW5wdXQgPSBudWxsOwoKICAgICAgICByZXR1cm4g
c3VwcG9ydDsKfSkoKTsKCi8vIEtlZXAgdHJhY2sgb2YgYm94TW9kZWwKalF1ZXJ5LmJveE1vZGVs
ID0galF1ZXJ5LnN1cHBvcnQuYm94TW9kZWw7CgoKCgp2YXIgcmJyYWNlID0gL14oPzpcey4qXH18
XFsuKlxdKSQvLAogICAgICAgIHJtdWx0aURhc2ggPSAvKFtBLVpdKS9nOwoKalF1ZXJ5LmV4dGVu
ZCh7CiAgICAgICAgY2FjaGU6IHt9LAoKICAgICAgICAvLyBQbGVhc2UgdXNlIHdpdGggY2F1dGlv
bgogICAgICAgIHV1aWQ6IDAsCgogICAgICAgIC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpR
dWVyeSBvbiB0aGUgcGFnZQogICAgICAgIC8vIE5vbi1kaWdpdHMgcmVtb3ZlZCB0byBtYXRjaCBy
aW5saW5lalF1ZXJ5CiAgICAgICAgZXhwYW5kbzogImpRdWVyeSIgKyAoIGpRdWVyeS5mbi5qcXVl
cnkgKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xEL2csICIiICksCgogICAgICAgIC8vIFRo
ZSBmb2xsb3dpbmcgZWxlbWVudHMgdGhyb3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UK
ICAgICAgICAvLyBhdHRlbXB0IHRvIGFkZCBleHBhbmRvIHByb3BlcnRpZXMgdG8gdGhlbS4KICAg
ICAgICBub0RhdGE6IHsKICAgICAgICAgICAgICAgICJlbWJlZCI6IHRydWUsCiAgICAgICAgICAg
ICAgICAvLyBCYW4gYWxsIG9iamVjdHMgZXhjZXB0IGZvciBGbGFzaCAod2hpY2ggaGFuZGxlIGV4
cGFuZG9zKQogICAgICAgICAgICAgICAgIm9iamVjdCI6ICJjbHNpZDpEMjdDREI2RS1BRTZELTEx
Y2YtOTZCOC00NDQ1NTM1NDAwMDAiLAogICAgICAgICAgICAgICAgImFwcGxldCI6IHRydWUKICAg
ICAgICB9LAoKICAgICAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAg
ICAgIGVsZW0gPSBlbGVtLm5vZGVUeXBlID8galF1ZXJ5LmNhY2hlWyBlbGVtW2pRdWVyeS5leHBh
bmRvXSBdIDogZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXTsKCiAgICAgICAgICAgICAgICByZXR1cm4g
ISFlbGVtICYmICFpc0VtcHR5RGF0YU9iamVjdCggZWxlbSApOwogICAgICAgIH0sCgogICAgICAg
IGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9u
bHkgKi8gKSB7CiAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSAp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgdmFyIHRoaXNDYWNoZSwgcmV0LAogICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAogICAgICAgICAgICAgICAgICAgICAgICBn
ZXRCeU5hbWUgPSB0eXBlb2YgbmFtZSA9PT0gInN0cmluZyIsCgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBoYXZlIHRvIGhhbmRsZSBET00gbm9kZXMgYW5kIEpTIG9iamVjdHMgZGlmZmVy
ZW50bHkgYmVjYXVzZSBJRTYtNwogICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4ndCBHQyBv
YmplY3QgcmVmZXJlbmNlcyBwcm9wZXJseSBhY3Jvc3MgdGhlIERPTS1KUyBib3VuZGFyeQogICAg
ICAgICAgICAgICAgICAgICAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gT25seSBET00gbm9kZXMgbmVlZCB0aGUgZ2xvYmFsIGpRdWVyeSBjYWNo
ZTsgSlMgb2JqZWN0IGRhdGEgaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXR0YWNoZWQg
ZGlyZWN0bHkgdG8gdGhlIG9iamVjdCBzbyBHQyBjYW4gb2NjdXIgYXV0b21hdGljYWxseQogICAg
ICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0s
CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGRlZmluaW5nIGFuIElEIGZvciBKUyBv
YmplY3RzIGlmIGl0cyBjYWNoZSBhbHJlYWR5IGV4aXN0cyBhbGxvd3MKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIGNvZGUgdG8gc2hvcnRjdXQgb24gdGhlIHNhbWUgcGF0aCBhcyBhIERP
TSBub2RlIHdpdGggbm8gY2FjaGUKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBpc05vZGUg
PyBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdIDogZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSAmJiBqUXVl
cnkuZXhwYW5kbzsKCiAgICAgICAgICAgICAgICAvLyBBdm9pZCBkb2luZyBhbnkgbW9yZSB3b3Jr
IHRoYW4gd2UgbmVlZCB0byB3aGVuIHRyeWluZyB0byBnZXQgZGF0YSBvbiBhbgogICAgICAgICAg
ICAgICAgLy8gb2JqZWN0IHRoYXQgaGFzIG5vIGRhdGEgYXQgYWxsCiAgICAgICAgICAgICAgICBp
ZiAoICghaWQgfHwgKHB2dCAmJiBpZCAmJiAoY2FjaGVbIGlkIF0gJiYgIWNhY2hlWyBpZCBdWyBp
bnRlcm5hbEtleSBdKSkpICYmIGdldEJ5TmFtZSAmJiBkYXRhID09PSB1bmRlZmluZWQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAoICFpZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBET00g
bm9kZXMgbmVlZCBhIG5ldyB1bmlxdWUgSUQgZm9yIGVhY2ggZWxlbWVudCBzaW5jZSB0aGVpciBk
YXRhCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgdXAgaW4gdGhlIGdsb2JhbCBjYWNo
ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzTm9kZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdID0gaWQgPSArK2pRdWVyeS51
dWlkOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlkID0galF1ZXJ5LmV4cGFuZG87CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICFjYWNoZVsgaWQgXSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSB7fTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIGZvciAxLjUgT05MWS4gQXZvaWRz
IGV4cG9zaW5nIGpRdWVyeQogICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXRhZGF0YSBvbiBw
bGFpbiBKUyBvYmplY3RzIHdoZW4gdGhlIG9iamVjdCBpcyBzZXJpYWxpemVkIHVzaW5nCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEpTT04uc3RyaW5naWZ5CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggIWlzTm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNo
ZVsgaWQgXS50b0pTT04gPSBqUXVlcnkubm9vcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFuIG9iamVjdCBjYW4gYmUgcGFz
c2VkIHRvIGpRdWVyeS5kYXRhIGluc3RlYWQgb2YgYSBrZXkvdmFsdWUgcGFpcjsgdGhpcyBnZXRz
CiAgICAgICAgICAgICAgICAvLyBzaGFsbG93IGNvcGllZCBvdmVyIG9udG8gdGhlIGV4aXN0aW5n
IGNhY2hlCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBuYW1lID09PSAib2JqZWN0IiB8fCB0
eXBlb2YgbmFtZSA9PT0gImZ1bmN0aW9uIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBwdnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF1bIGlu
dGVybmFsS2V5IF0gPSBqUXVlcnkuZXh0ZW5kKGNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdLCBu
YW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9IGpRdWVyeS5leHRlbmQoY2FjaGVbIGlkIF0sIG5h
bWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgdGhpc0NhY2hlID0gY2FjaGVbIGlkIF07CgogICAgICAgICAgICAgICAgLy8gSW50
ZXJuYWwgalF1ZXJ5IGRhdGEgaXMgc3RvcmVkIGluIGEgc2VwYXJhdGUgb2JqZWN0IGluc2lkZSB0
aGUgb2JqZWN0J3MgZGF0YQogICAgICAgICAgICAgICAgLy8gY2FjaGUgaW4gb3JkZXIgdG8gYXZv
aWQga2V5IGNvbGxpc2lvbnMgYmV0d2VlbiBpbnRlcm5hbCBkYXRhIGFuZCB1c2VyLWRlZmluZWQK
ICAgICAgICAgICAgICAgIC8vIGRhdGEKICAgICAgICAgICAgICAgIGlmICggcHZ0ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICF0aGlzQ2FjaGVbIGludGVybmFsS2V5IF0gKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NhY2hlWyBpbnRlcm5hbEtleSBdID0g
e307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXNDYWNoZSA9IHRoaXNDYWNoZVsgaW50ZXJuYWxLZXkgXTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICBpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sg
Zm9yIDEuNSBPTkxZLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gMS42LiBVc2VycyBzaG91bGQKICAg
ICAgICAgICAgICAgIC8vIG5vdCBhdHRlbXB0IHRvIGluc3BlY3QgdGhlIGludGVybmFsIGV2ZW50
cyBvYmplY3QgdXNpbmcgalF1ZXJ5LmRhdGEsIGFzIHRoaXMKICAgICAgICAgICAgICAgIC8vIGlu
dGVybmFsIGRhdGEgb2JqZWN0IGlzIHVuZG9jdW1lbnRlZCBhbmQgc3ViamVjdCB0byBjaGFuZ2Uu
CiAgICAgICAgICAgICAgICBpZiAoIG5hbWUgPT09ICJldmVudHMiICYmICF0aGlzQ2FjaGVbbmFt
ZV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzQ2FjaGVbIGludGVybmFs
S2V5IF0gJiYgdGhpc0NhY2hlWyBpbnRlcm5hbEtleSBdLmV2ZW50czsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgYm90aCBjb252ZXJ0ZWQtdG8tY2FtZWwg
YW5kIG5vbi1jb252ZXJ0ZWQgZGF0YSBwcm9wZXJ0eSBuYW1lcwogICAgICAgICAgICAgICAgLy8g
SWYgYSBkYXRhIHByb3BlcnR5IHdhcyBzcGVjaWZpZWQKICAgICAgICAgICAgICAgIGlmICggZ2V0
QnlOYW1lICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgVHJ5IHRvIGZpbmQg
YXMtaXMgcHJvcGVydHkgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzQ2Fj
aGVbIG5hbWUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgZm9yIG51bGx8dW5k
ZWZpbmVkIHByb3BlcnR5IGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgPT0g
bnVsbCApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQg
dGhlIGNhbWVsQ2FzZWQgcHJvcGVydHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXQgPSB0aGlzQ2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSBdOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXQgPSB0aGlzQ2FjaGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
cmV0dXJuIHJldDsKICAgICAgICB9LAoKICAgICAgICByZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxl
bSwgbmFtZSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgewogICAgICAgICAgICAgICAg
aWYgKCAhalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0aGlzQ2Fj
aGUsCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWZlcmVuY2UgdG8gaW50ZXJuYWwgZGF0
YSBjYWNoZSBrZXkKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxLZXkgPSBqUXVlcnku
ZXhwYW5kbywKCiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9kZSA9IGVsZW0ubm9kZVR5cGUs
CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5m
b3JtYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBpc05vZGUgPyBqUXVlcnku
Y2FjaGUgOiBlbGVtLAoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGpRdWVyeS5kYXRh
IGZvciBtb3JlIGluZm9ybWF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gaXNOb2Rl
ID8gZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSA6IGpRdWVyeS5leHBhbmRvOwoKICAgICAgICAgICAg
ICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgbm8gY2FjaGUgZW50cnkgZm9yIHRoaXMgb2JqZWN0
LCB0aGVyZSBpcyBubwogICAgICAgICAgICAgICAgLy8gcHVycG9zZSBpbiBjb250aW51aW5nCiAg
ICAgICAgICAgICAgICBpZiAoICFjYWNoZVsgaWQgXSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggbmFtZSAp
IHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNDYWNoZSA9IHB2dCA/IGNhY2hlWyBpZCBd
WyBpbnRlcm5hbEtleSBdIDogY2FjaGVbIGlkIF07CgogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHRoaXNDYWNoZSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3Vw
cG9ydCBpbnRlcm9wZXJhYmxlIHJlbW92YWwgb2YgaHlwaGVuYXRlZCBvciBjYW1lbGNhc2VkIGtl
eXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF0aGlzQ2FjaGVbIG5hbWUg
XSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVl
cnkuY2FtZWxDYXNlKCBuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc0NhY2hlWyBuYW1lIF07
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEg
bGVmdCBpbiB0aGUgY2FjaGUsIHdlIHdhbnQgdG8gY29udGludWUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhbmQgbGV0IHRoZSBjYWNoZSBvYmplY3QgaXRzZWxmIGdldCBkZXN0
cm95ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0VtcHR5RGF0YU9i
amVjdCh0aGlzQ2FjaGUpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNlZSBq
UXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgaWYgKCBwdnQg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsgaWQgXVsgaW50ZXJuYWxL
ZXkgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVu
dCBjYWNoZSB1bmxlc3MgdGhlIGludGVybmFsIGRhdGEgb2JqZWN0CiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGhhZCBiZWVuIHRoZSBvbmx5IHRoaW5nIGxlZnQgaW4gaXQKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhaXNFbXB0eURhdGFPYmplY3QoY2FjaGVbIGlkIF0pICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbENhY2hl
ID0gY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF07CgogICAgICAgICAgICAgICAgLy8gQnJvd3Nl
cnMgdGhhdCBmYWlsIGV4cGFuZG8gZGVsZXRpb24gYWxzbyByZWZ1c2UgdG8gZGVsZXRlIGV4cGFu
ZG9zIG9uCiAgICAgICAgICAgICAgICAvLyB0aGUgd2luZG93LCBidXQgaXQgd2lsbCBhbGxvdyBp
dCBvbiBhbGwgb3RoZXIgSlMgb2JqZWN0czsgb3RoZXIgYnJvd3NlcnMKICAgICAgICAgICAgICAg
IC8vIGRvbid0IGNhcmUKICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGBjYWNoZWAgaXMg
bm90IGEgd2luZG93IG9iamVjdCAjMTAwODAKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LnN1
cHBvcnQuZGVsZXRlRXhwYW5kbyB8fCAhY2FjaGUuc2V0SW50ZXJ2YWwgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsgaWQgXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdID0gbnVsbDsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAvLyBXZSBkZXN0cm95ZWQgdGhlIGVudGlyZSB1c2VyIGNh
Y2hlIGF0IG9uY2UgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuCiAgICAgICAgICAgICAgICAvLyBp
dGVyYXRpbmcgdGhyb3VnaCBlYWNoIGtleSwgYnV0IHdlIG5lZWQgdG8gY29udGludWUgdG8gcGVy
c2lzdCBpbnRlcm5hbAogICAgICAgICAgICAgICAgLy8gZGF0YSBpZiBpdCBleGlzdGVkCiAgICAg
ICAgICAgICAgICBpZiAoIGludGVybmFsQ2FjaGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGNhY2hlWyBpZCBdID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMg
aXMgYSBoYWNrIGZvciAxLjUgT05MWS4gQXZvaWRzIGV4cG9zaW5nIGpRdWVyeQogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBtZXRhZGF0YSBvbiBwbGFpbiBKUyBvYmplY3RzIHdoZW4gdGhlIG9i
amVjdCBpcyBzZXJpYWxpemVkIHVzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpTT04u
c3RyaW5naWZ5CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzTm9kZSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXS50b0pTT04gPSBqUXVlcnkubm9v
cDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY2Fj
aGVbIGlkIF1bIGludGVybmFsS2V5IF0gPSBpbnRlcm5hbENhY2hlOwoKICAgICAgICAgICAgICAg
IC8vIE90aGVyd2lzZSwgd2UgbmVlZCB0byBlbGltaW5hdGUgdGhlIGV4cGFuZG8gb24gdGhlIG5v
ZGUgdG8gYXZvaWQKICAgICAgICAgICAgICAgIC8vIGZhbHNlIGxvb2t1cHMgaW4gdGhlIGNhY2hl
IGZvciBlbnRyaWVzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0CiAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBpc05vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGRvZXMgbm90IGFs
bG93IHVzIHRvIGRlbGV0ZSBleHBhbmRvIHByb3BlcnRpZXMgZnJvbSBub2RlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbm9yIGRvZXMgaXQgaGF2ZSBhIHJlbW92ZUF0dHJpYnV0ZSBmdW5j
dGlvbiBvbiBEb2N1bWVudCBub2RlczsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbXVz
dCBoYW5kbGUgYWxsIG9mIHRoZXNlIGNhc2VzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggZWxlbS5yZW1vdmVBdHRyaWJ1dGUgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSA9IG51bGw7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBGb3IgaW50
ZXJuYWwgdXNlIG9ubHkuCiAgICAgICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRh
ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5kYXRhKCBlbGVtLCBuYW1lLCBkYXRh
LCB0cnVlICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5n
IGlmIGEgRE9NIG5vZGUgY2FuIGhhbmRsZSB0aGUgZGF0YSBleHBhbmRvCiAgICAgICAgYWNjZXB0
RGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZU5h
bWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGpRdWVyeS5ub0RhdGFb
IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISht
YXRjaCA9PT0gdHJ1ZSB8fCBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpICE9PSBtYXRjaCk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9Cn0pOwoKalF1ZXJ5LmZuLmV4dGVuZCh7CiAgICAg
ICAgZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0
YSA9IG51bGw7CgogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Yga2V5ID09PSAidW5kZWZpbmVk
IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5LmRhdGEoIHRoaXNbMF0gKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdLm5vZGVUeXBlID09
PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSB0aGlzWzBdLmF0
dHJpYnV0ZXMsIG5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIGwgPSBhdHRyLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJbaV0ubmFt
ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
bmFtZS5pbmRleE9mKCAiZGF0YS0iICkgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2Uo
IG5hbWUuc3Vic3RyaW5nKDUpICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFBdHRyKCB0aGlzWzBdLCBuYW1lLCBkYXRhWyBuYW1l
IF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGRhdGE7CgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlw
ZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmRhdGEoIHRoaXMsIGtleSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQoIi4iKTsK
ICAgICAgICAgICAgICAgIHBhcnRzWzFdID0gcGFydHNbMV0gPyAiLiIgKyBwYXJ0c1sxXSA6ICIi
OwoKICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiICsgcGFy
dHNbMV0gKyAiISIsIFtwYXJ0c1swXV0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5
IHRvIGZldGNoIGFueSBpbnRlcm5hbGx5IHN0b3JlZCBkYXRhIGZpcnN0CiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIHRoaXMubGVuZ3RoICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkuZGF0YSggdGhpc1swXSwg
a2V5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFBdHRyKCB0
aGlzWzBdLCBrZXksIGRhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBwYXJ0c1sxXSA/CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhKCBwYXJ0c1swXSApIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOwoKICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICR0aGlzID0galF1ZXJ5KCB0aGlz
ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gWyBwYXJ0
c1swXSwgdmFsdWUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMudHJp
Z2dlckhhbmRsZXIoICJzZXREYXRhIiArIHBhcnRzWzFdICsgIiEiLCBhcmdzICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIHRoaXMsIGtleSwgdmFsdWUgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy50cmlnZ2VySGFuZGxlciggImNo
YW5nZURhdGEiICsgcGFydHNbMV0gKyAiISIsIGFyZ3MgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgcmVtb3ZlRGF0YTog
ZnVuY3Rpb24oIGtleSApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCB0aGlzLCBr
ZXkgKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KfSk7CgpmdW5jdGlvbiBkYXRhQXR0
ciggZWxlbSwga2V5LCBkYXRhICkgewogICAgICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGlu
dGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnkKICAgICAgICAvLyBkYXRhIGZyb20gdGhlIEhUTUw1
IGRhdGEtKiBhdHRyaWJ1dGUKICAgICAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVt
Lm5vZGVUeXBlID09PSAxICkgewoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gImRhdGEtIiAr
IGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCAiLSQxIiApLnRvTG93ZXJDYXNlKCk7CgogICAgICAg
ICAgICAgICAgZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7CgogICAgICAgICAgICAg
ICAgaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgPT09
ICJ0cnVlIiA/IHRydWUgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPT09
ICJmYWxzZSIgPyBmYWxzZSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9
PT0gIm51bGwiID8gbnVsbCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWpRdWVy
eS5pc05hTiggZGF0YSApID8gcGFyc2VGbG9hdCggZGF0YSApIDoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJicmFjZS50ZXN0KCBkYXRhICkgPyBqUXVlcnkucGFyc2VK
U09OKCBkYXRhICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHt9CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5n
ZWQgbGF0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwg
ZGF0YSApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBy
ZXR1cm4gZGF0YTsKfQoKLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgZm9yIDEuNSBPTkxZIHRvIGFs
bG93IG9iamVjdHMgd2l0aCBhIHNpbmdsZSB0b0pTT04KLy8gcHJvcGVydHkgdG8gYmUgY29uc2lk
ZXJlZCBlbXB0eSBvYmplY3RzOyB0aGlzIHByb3BlcnR5IGFsd2F5cyBleGlzdHMgaW4KLy8gb3Jk
ZXIgdG8gbWFrZSBzdXJlIEpTT04uc3RyaW5naWZ5IGRvZXMgbm90IGV4cG9zZSBpbnRlcm5hbCBt
ZXRhZGF0YQpmdW5jdGlvbiBpc0VtcHR5RGF0YU9iamVjdCggb2JqICkgewogICAgICAgIGZvciAo
IHZhciBuYW1lIGluIG9iaiApIHsKICAgICAgICAgICAgICAgIGlmICggbmFtZSAhPT0gInRvSlNP
TiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwp9CgoKCgpmdW5jdGlvbiBoYW5k
bGVRdWV1ZU1hcmtEZWZlciggZWxlbSwgdHlwZSwgc3JjICkgewogICAgICAgIHZhciBkZWZlckRh
dGFLZXkgPSB0eXBlICsgImRlZmVyIiwKICAgICAgICAgICAgICAgIHF1ZXVlRGF0YUtleSA9IHR5
cGUgKyAicXVldWUiLAogICAgICAgICAgICAgICAgbWFya0RhdGFLZXkgPSB0eXBlICsgIm1hcmsi
LAogICAgICAgICAgICAgICAgZGVmZXIgPSBqUXVlcnkuZGF0YSggZWxlbSwgZGVmZXJEYXRhS2V5
LCB1bmRlZmluZWQsIHRydWUgKTsKICAgICAgICBpZiAoIGRlZmVyICYmCiAgICAgICAgICAgICAg
ICAoIHNyYyA9PT0gInF1ZXVlIiB8fCAhalF1ZXJ5LmRhdGEoIGVsZW0sIHF1ZXVlRGF0YUtleSwg
dW5kZWZpbmVkLCB0cnVlICkgKSAmJgogICAgICAgICAgICAgICAgKCBzcmMgPT09ICJtYXJrIiB8
fCAhalF1ZXJ5LmRhdGEoIGVsZW0sIG1hcmtEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSApICkg
ewogICAgICAgICAgICAgICAgLy8gR2l2ZSByb29tIGZvciBoYXJkLWNvZGVkIGNhbGxiYWNrcyB0
byBmaXJlIGZpcnN0CiAgICAgICAgICAgICAgICAvLyBhbmQgZXZlbnR1YWxseSBtYXJrL3F1ZXVl
IHNvbWV0aGluZyBlbHNlIG9uIHRoZSBlbGVtZW50CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0
KCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmRhdGEo
IGVsZW0sIHF1ZXVlRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgJiYKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAhalF1ZXJ5LmRhdGEoIGVsZW0sIG1hcmtEYXRhS2V5LCB1bmRlZmlu
ZWQsIHRydWUgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVt
b3ZlRGF0YSggZWxlbSwgZGVmZXJEYXRhS2V5LCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXIucmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9LCAwICk7CiAgICAgICAgfQp9CgpqUXVlcnkuZXh0ZW5kKHsKCiAgICAg
ICAgX21hcms6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgewogICAgICAgICAgICAgICAgaWYgKCBl
bGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gKHR5cGUgfHwgImZ4IikgKyAi
bWFyayI7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCB0eXBlLCAo
alF1ZXJ5LmRhdGEoZWxlbSx0eXBlLHVuZGVmaW5lZCx0cnVlKSB8fCAwKSArIDEsIHRydWUgKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBfdW5tYXJrOiBmdW5jdGlvbigg
Zm9yY2UsIGVsZW0sIHR5cGUgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGZvcmNlICE9PSB0cnVl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gZWxlbTsKICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbSA9IGZvcmNlOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JjZSA9IGZh
bHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewogICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwogICAgICAgICAgICAgICAg
ICAgICAgICB2YXIga2V5ID0gdHlwZSArICJtYXJrIiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudCA9IGZvcmNlID8gMCA6ICggKGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIHVu
ZGVmaW5lZCwgdHJ1ZSkgfHwgMSApIC0gMSApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGNvdW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBl
bGVtLCBrZXksIGNvdW50LCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0s
IGtleSwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVF1ZXVl
TWFya0RlZmVyKCBlbGVtLCB0eXBlLCAibWFyayIgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHF1ZXVlOiBmdW5jdGlvbigg
ZWxlbSwgdHlwZSwgZGF0YSApIHsKICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9ICh0eXBlIHx8ICJmeCIpICsgInF1ZXVlIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHEgPSBqUXVlcnkuZGF0YSggZWxlbSwgdHlwZSwgdW5kZWZp
bmVkLCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkIHVwIGRlcXVldWUg
YnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXAKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBkYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggIXEgfHwgalF1ZXJ5LmlzQXJyYXkoZGF0YSkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBxID0galF1ZXJ5LmRhdGEoIGVsZW0sIHR5cGUsIGpRdWVy
eS5tYWtlQXJyYXkoZGF0YSksIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5wdXNo
KCBkYXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBxIHx8IFtdOwogICAg
ICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVt
LCB0eXBlICkgewogICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKCiAgICAgICAg
ICAgICAgICB2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcjsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQs
IGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsCiAgICAgICAgICAgICAgICBpZiAo
IGZuID09PSAiaW5wcm9ncmVzcyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gcXVl
dWUuc2hpZnQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGZuICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBw
cmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBl
ID09PSAiZngiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnVuc2hp
ZnQoImlucHJvZ3Jlc3MiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgZm4uY2FsbChlbGVtLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZShlbGVtLCB0eXBlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhcXVl
dWUubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSgg
ZWxlbSwgdHlwZSArICJxdWV1ZSIsIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlUXVldWVNYXJrRGVmZXIoIGVsZW0sIHR5cGUsICJxdWV1ZSIgKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICB9Cn0pOwoKalF1ZXJ5LmZuLmV4dGVuZCh7CiAgICAgICAgcXVldWU6IGZ1bmN0
aW9uKCB0eXBlLCBkYXRhICkgewogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0g
InN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0eXBlOwogICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gImZ4IjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1swXSwgdHlwZSApOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRh
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgJiYgcXVldWVb
MF0gIT09ICJpbnByb2dyZXNzIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGRlcXVldWU6IGZ1bmN0aW9uKCB0
eXBlICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVn
aW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLgogICAgICAgIC8vIGh0dHA6Ly9i
bGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS8KICAgICAgICBk
ZWxheTogZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7CiAgICAgICAgICAgICAgICB0aW1lID0galF1
ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1t0aW1lXSB8fCB0aW1lIDogdGltZTsKICAgICAgICAg
ICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
cXVldWUoIHR5cGUsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxl
bSA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5
cGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZSApOwogICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgfSwKICAgICAgICBjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7CiAgICAg
ICAgfSwKICAgICAgICAvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEg
Y2VydGFpbiB0eXBlCiAgICAgICAgLy8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRl
ZmF1bHQpCiAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iamVjdCApIHsKICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3QgPSB0eXBlOwogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0g
dW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUg
fHwgImZ4IjsKICAgICAgICAgICAgICAgIHZhciBkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyA9IHRoaXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGkgPSBlbGVtZW50cy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50
ID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJEYXRhS2V5ID0gdHlwZSArICJkZWZl
ciIsCiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlRGF0YUtleSA9IHR5cGUgKyAicXVldWUi
LAogICAgICAgICAgICAgICAgICAgICAgICBtYXJrRGF0YUtleSA9IHR5cGUgKyAibWFyayIsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHRtcDsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29s
dmUoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISggLS1jb3VudCApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywg
WyBlbGVtZW50cyBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIHdoaWxlKCBpLS0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgoIHRtcCA9IGpRdWVyeS5kYXRhKCBlbGVtZW50c1sgaSBdLCBkZWZlckRhdGFLZXksIHVu
ZGVmaW5lZCwgdHJ1ZSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoIGpRdWVyeS5kYXRhKCBlbGVtZW50c1sgaSBdLCBxdWV1ZURhdGFLZXksIHVuZGVmaW5lZCwg
dHJ1ZSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5kYXRhKCBlbGVtZW50c1sgaSBdLCBtYXJrRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVl
ICkgKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRh
dGEoIGVsZW1lbnRzWyBpIF0sIGRlZmVyRGF0YUtleSwgalF1ZXJ5Ll9EZWZlcnJlZCgpLCB0cnVl
ICkgKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmRvbmUoIHJlc29sdmUgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmVzb2x2ZSgp
OwogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVyLnByb21pc2UoKTsKICAgICAgICB9Cn0pOwoK
CgoKdmFyIHJjbGFzcyA9IC9bXG5cdFxyXS9nLAogICAgICAgIHJzcGFjZSA9IC9ccysvLAogICAg
ICAgIHJyZXR1cm4gPSAvXHIvZywKICAgICAgICBydHlwZSA9IC9eKD86YnV0dG9ufGlucHV0KSQv
aSwKICAgICAgICByZm9jdXNhYmxlID0gL14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0
ZXh0YXJlYSkkL2ksCiAgICAgICAgcmNsaWNrYWJsZSA9IC9eYSg/OnJlYSk/JC9pLAogICAgICAg
IHJib29sZWFuID0gL14oPzphdXRvZm9jdXN8YXV0b3BsYXl8YXN5bmN8Y2hlY2tlZHxjb250cm9s
c3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVp
cmVkfHNjb3BlZHxzZWxlY3RlZCkkL2ksCiAgICAgICAgbm9kZUhvb2ssIGJvb2xIb29rOwoKalF1
ZXJ5LmZuLmV4dGVuZCh7CiAgICAgICAgYXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIG5hbWUsIHZhbHVlLCB0
cnVlLCBqUXVlcnkuYXR0ciApOwogICAgICAgIH0sCgogICAgICAgIHJlbW92ZUF0dHI6IGZ1bmN0
aW9uKCBuYW1lICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUg
KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgcHJvcDog
ZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5h
Y2Nlc3MoIHRoaXMsIG5hbWUsIHZhbHVlLCB0cnVlLCBqUXVlcnkucHJvcCApOwogICAgICAgIH0s
CiAgICAgICAgCiAgICAgICAgcmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7CiAgICAgICAg
ICAgICAgICBuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwogICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHJ5L2NhdGNoIGhhbmRsZXMgY2FzZXMgd2hlcmUgSUUgYmFsa3MgKHN1Y2ggYXMgcmVt
b3ZpbmcgYSBwcm9wZXJ0eSBvbiB3aW5kb3cpCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1sgbmFtZSBdID0gdW5kZWZpbmVk
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzWyBuYW1lIF07CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7fQogICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgfSwKCiAgICAgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKICAgICAg
ICAgICAgICAgIHZhciBjbGFzc05hbWVzLCBpLCBsLCBlbGVtLAogICAgICAgICAgICAgICAgICAg
ICAgICBzZXRDbGFzcywgYywgY2w7CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggdmFsdWUgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbiggaiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnko
IHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSkgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgaWYgKCB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBjbGFzc05hbWVzID0gdmFsdWUuc3BsaXQoIHJzcGFjZSApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7
IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBd
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09
IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFlbGVt
LmNsYXNzTmFtZSAmJiBjbGFzc05hbWVzLmxlbmd0aCA9PT0gMSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSB2YWx1ZTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDbGFzcyA9ICIgIiAr
IGVsZW0uY2xhc3NOYW1lICsgIiAiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggYyA9IDAsIGNsID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBj
bDsgYysrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIX5zZXRDbGFzcy5pbmRleE9mKCAiICIgKyBjbGFzc05hbWVzWyBjIF0g
KyAiICIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldENsYXNzICs9IGNsYXNzTmFtZXNbIGMgXSArICIgIjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBq
UXVlcnkudHJpbSggc2V0Q2xhc3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKICAgICAgICB9LAoKICAgICAgICByZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgewog
ICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZXMsIGksIGwsIGVsZW0sIGNsYXNzTmFtZSwgYywg
Y2w7CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFz
cyggdmFsdWUuY2FsbCh0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSkgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAodmFs
dWUgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9ICh2YWx1ZSB8fCAiIikuc3Bs
aXQoIHJzcGFjZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0
aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtID0gdGhpc1sgaSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgZWxlbS5jbGFzc05hbWUgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAoIiAiICsgZWxlbS5j
bGFzc05hbWUgKyAiICIpLnJlcGxhY2UoIHJjbGFzcywgIiAiICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IGNsYXNzTmFt
ZXMubGVuZ3RoOyBjIDwgY2w7IGMrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSgi
ICIgKyBjbGFzc05hbWVzWyBjIF0gKyAiICIsICIgIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBqUXVlcnkudHJpbSggY2xhc3NOYW1l
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05h
bWUgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoK
ICAgICAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHsKICAgICAg
ICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAg
ICBpc0Jvb2wgPSB0eXBlb2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIjsKCiAgICAgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMs
IGksIHRoaXMuY2xhc3NOYW1lLCBzdGF0ZVZhbCksIHN0YXRlVmFsICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9
PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9nZ2xl
IGluZGl2aWR1YWwgY2xhc3MgbmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgY2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9
IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmID0galF1ZXJ5
KCB0aGlzICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9
IHN0YXRlVmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NO
YW1lcyA9IHZhbHVlLnNwbGl0KCByc3BhY2UgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCAoY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZWFjaCBjbGFzc05hbWUg
Z2l2ZW4sIHNwYWNlIHNlcGVyYXRlZCBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZSA9IGlzQm9vbCA/IHN0YXRlIDogIXNlbGYuaGFzQ2xhc3MoIGNsYXNz
TmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZlsgc3Rh
dGUgPyAiYWRkQ2xhc3MiIDogInJlbW92ZUNsYXNzIiBdKCBjbGFzc05hbWUgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCB0eXBlID09PSAidW5kZWZpbmVkIiB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLmNsYXNzTmFtZSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGNsYXNzTmFtZSBpZiBz
ZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSgg
dGhpcywgIl9fY2xhc3NOYW1lX18iLCB0aGlzLmNsYXNzTmFtZSApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9n
Z2xlIHdob2xlIGNsYXNzTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
Y2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID8gIiIgOiBqUXVl
cnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiApIHx8ICIiOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICBoYXNDbGFz
czogZnVuY3Rpb24oIHNlbGVjdG9yICkgewogICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9
ICIgIiArIHNlbGVjdG9yICsgIiAiOwogICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdGhpc1tpXS5ub2RlVHlwZSA9PT0gMSAmJiAoIiAiICsgdGhpc1tpXS5jbGFzc05hbWUgKyAi
ICIpLnJlcGxhY2UocmNsYXNzLCAiICIpLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgfSwKCiAgICAgICAgdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7CiAgICAgICAg
ICAgICAgICB2YXIgaG9va3MsIHJldCwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRo
aXNbMF07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICggIWFyZ3VtZW50cy5s
ZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29r
cyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkpICE9PSB1bmRlZmluZWQgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gZWxlbS52YWx1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHR5cGVvZiByZXQgPT09ICJzdHJpbmciID8gCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucmVwbGFjZShycmV0dXJuLCAi
IikgOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBj
YXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlcgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID09IG51bGwgPyAiIiA6IHJldDsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5l
ZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGpR
dWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oIGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1
ZXJ5KHRoaXMpLCB2YWw7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5
cGUgIT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzRnVu
Y3Rpb24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsdWUuY2Fs
bCggdGhpcywgaSwgc2VsZi52YWwoKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVlOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBudWxsL3Vu
ZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHZhbCA9PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2Yg
dmFsID09PSAibnVtYmVyIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwg
Kz0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5
KCB2YWwgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBqUXVlcnku
bWFwKHZhbCwgZnVuY3Rpb24gKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSArICIiOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFs
bCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWhv
b2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAidmFsdWUi
ICkgPT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnZhbHVlID0gdmFsOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
KTsKICAgICAgICB9Cn0pOwoKalF1ZXJ5LmV4dGVuZCh7CiAgICAgICAgdmFsSG9va3M6IHsKICAg
ICAgICAgICAgICAgIG9wdGlvbjogewogICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0
ZXMudmFsdWUgaXMgdW5kZWZpbmVkIGluIEJsYWNrYmVycnkgNC43IGJ1dAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHVzZXMgLnZhbHVlLiBTZWUgIzY5MzIKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gZWxlbS5hdHRyaWJ1dGVzLnZhbHVlOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhdmFsIHx8IHZhbC5zcGVjaWZpZWQg
PyBlbGVtLnZhbHVlIDogZWxlbS50ZXh0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgc2VsZWN0OiB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXMgPSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvbmUgPSBlbGVtLnR5cGUgPT09ICJzZWxlY3Qtb25lIjsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90aGluZyB3YXMgc2VsZWN0ZWQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGV4IDwgMCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9vcCB0
aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gb25lID8gaW5kZXggOiAwLCBtYXggPSBvbmUgPyBpbmRleCAr
IDEgOiBvcHRpb25zLmxlbmd0aDsgaSA8IG1heDsgaSsrICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0
aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbi5zZWxlY3RlZCAmJiAoalF1ZXJ5
LnN1cHBvcnQub3B0RGlzYWJsZWQgPyAhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJp
YnV0ZSgiZGlzYWJsZWQiKSA9PT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVk
IHx8ICFqUXVlcnkubm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCAib3B0Z3JvdXAiICkpICkg
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0
IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvbgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0cwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uZSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpLVNlbGVjdHMgcmV0
dXJuIGFuIGFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlcy5wdXNoKCB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZXMgQnVnICMyNTUxIC0tIHNlbGVjdC52YWwoKSBi
cm9rZW4gaW4gSUUgYWZ0ZXIgZm9ybS5yZXNldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBvbmUgJiYgIXZhbHVlcy5sZW5ndGggJiYgb3B0aW9ucy5sZW5ndGggKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBvcHRp
b25zWyBpbmRleCBdICkudmFsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOwogICAgICAgICAg
ICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbigg
ZWxlbSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVl
cyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICk7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeShlbGVtKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGpRdWVy
eS5pbkFycmF5KCBqUXVlcnkodGhpcykudmFsKCksIHZhbHVlcyApID49IDA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIXZhbHVlcy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgog
ICAgICAgIGF0dHJGbjogewogICAgICAgICAgICAgICAgdmFsOiB0cnVlLAogICAgICAgICAgICAg
ICAgY3NzOiB0cnVlLAogICAgICAgICAgICAgICAgaHRtbDogdHJ1ZSwKICAgICAgICAgICAgICAg
IHRleHQ6IHRydWUsCiAgICAgICAgICAgICAgICBkYXRhOiB0cnVlLAogICAgICAgICAgICAgICAg
d2lkdGg6IHRydWUsCiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRydWUsCiAgICAgICAgICAgICAg
ICBvZmZzZXQ6IHRydWUKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGF0dHJGaXg6IHsKICAg
ICAgICAgICAgICAgIC8vIEFsd2F5cyBub3JtYWxpemUgdG8gZW5zdXJlIGhvb2sgdXNhZ2UKICAg
ICAgICAgICAgICAgIHRhYmluZGV4OiAidGFiSW5kZXgiCiAgICAgICAgfSwKICAgICAgICAKICAg
ICAgICBhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIHBhc3MgKSB7CiAgICAgICAg
ICAgICAgICB2YXIgblR5cGUgPSBlbGVtLm5vZGVUeXBlOwogICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAvLyBkb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBh
bmQgYXR0cmlidXRlIG5vZGVzCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09
PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IGlmICggcGFzcyAmJiBuYW1lIGluIGpRdWVyeS5hdHRyRm4gKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkoIGVsZW0gKVsgbmFtZSBdKCB2YWx1ZSApOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1
dGVzIGFyZSBub3Qgc3VwcG9ydGVkCiAgICAgICAgICAgICAgICBpZiAoICEoImdldEF0dHJpYnV0
ZSIgaW4gZWxlbSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkucHJv
cCggZWxlbSwgbmFtZSwgdmFsdWUgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICB2YXIgcmV0LCBob29rcywKICAgICAgICAgICAgICAgICAgICAgICAgbm90eG1sID0gblR5cGUg
IT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApOwoKICAgICAgICAgICAgICAgIC8vIE5v
cm1hbGl6ZSB0aGUgbmFtZSBpZiBuZWVkZWQKICAgICAgICAgICAgICAgIGlmICggbm90eG1sICkg
ewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmF0dHJGaXhbIG5hbWUgXSB8
fCBuYW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuYXR0ckhvb2tz
WyBuYW1lIF07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFob29rcyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgYm9vbEhvb2sgZm9yIGJvb2xlYW4gYXR0
cmlidXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmJvb2xlYW4udGVz
dCggbmFtZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9v
a3MgPSBib29sSG9vazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIG5v
ZGVIb29rIGlmIGF2YWlsYWJsZSggSUU2LzcgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIG5vZGVIb29rICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaG9va3MgPSBub2RlSG9vazsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CgogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHZhbHVlID09PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKCiAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmIG5vdHhtbCAmJiAocmV0ID0g
aG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CgogICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0
cmlidXRlKCBuYW1lLCAiIiArIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgbm90eG1sICYmIChyZXQg
PSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ug
bm9ybWFsaXplIHRvIHVuZGVmaW5lZAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0
ID09PSBudWxsID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9LAoKICAgICAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKICAg
ICAgICAgICAgICAgIHZhciBwcm9wTmFtZTsKICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2Rl
VHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5hdHRy
Rml4WyBuYW1lIF0gfHwgbmFtZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdHRy
KCBlbGVtLCBuYW1lLCAiIiApOwogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0
dHJpYnV0ZSggbmFtZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNvcnJlc3Bv
bmRpbmcgcHJvcGVydHkgdG8gZmFsc2UgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHJib29sZWFuLnRlc3QoIG5hbWUgKSAmJiAocHJvcE5hbWUgPSBq
UXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUpIGluIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgYXR0ckhv
b2tzOiB7CiAgICAgICAgICAgICAgICB0eXBlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNl
dDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGNhbid0IGFsbG93IHRoZSB0eXBlIHByb3BlcnR5IHRvIGJlIGNoYW5nZWQgKHNp
bmNlIGl0IGNhdXNlcyBwcm9ibGVtcyBpbiBJRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHJ0eXBlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLnBhcmVudE5vZGUg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3Io
ICJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFs
dWUgPT09ICJyYWRpbyIgJiYgalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJpbnB1dCIpICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgdHlwZSBv
biBhIHJhZGlvIGJ1dHRvbiBhZnRlciB0aGUgdmFsdWUgcmVzZXRzIHRoZSB2YWx1ZSBpbiBJRTYt
OQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdmFsdWUg
dG8gaXQncyBkZWZhdWx0IGluIGNhc2UgdHlwZSBpcyBzZXQgYWZ0ZXIgdmFsdWUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGVsZW1lbnQgY3Jl
YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBl
bGVtLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5z
ZXRBdHRyaWJ1dGUoICJ0eXBlIiwgdmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdmFsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIC8v
IFVzZSB0aGUgdmFsdWUgcHJvcGVydHkgZm9yIGJhY2sgY29tcGF0CiAgICAgICAgICAgICAgICAv
LyBVc2UgdGhlIG5vZGVIb29rIGZvciBidXR0b24gZWxlbWVudHMgaW4gSUU2LzcgKCMxOTU0KQog
ICAgICAgICAgICAgICAgdmFsdWU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5j
dGlvbiggZWxlbSwgbmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSG9vay5nZXQoIGVs
ZW0sIG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgaW4gZWxlbSA/CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnZhbHVlIDoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5
Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVIb29rLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRG9lcyBub3QgcmV0dXJuIHNvIHRoYXQgc2V0QXR0cmlidXRlIGlzIGFsc28g
dXNlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWx1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgog
ICAgICAgIHByb3BGaXg6IHsKICAgICAgICAgICAgICAgIHRhYmluZGV4OiAidGFiSW5kZXgiLAog
ICAgICAgICAgICAgICAgcmVhZG9ubHk6ICJyZWFkT25seSIsCiAgICAgICAgICAgICAgICAiZm9y
IjogImh0bWxGb3IiLAogICAgICAgICAgICAgICAgImNsYXNzIjogImNsYXNzTmFtZSIsCiAgICAg
ICAgICAgICAgICBtYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAogICAgICAgICAgICAgICAgY2VsbHNw
YWNpbmc6ICJjZWxsU3BhY2luZyIsCiAgICAgICAgICAgICAgICBjZWxscGFkZGluZzogImNlbGxQ
YWRkaW5nIiwKICAgICAgICAgICAgICAgIHJvd3NwYW46ICJyb3dTcGFuIiwKICAgICAgICAgICAg
ICAgIGNvbHNwYW46ICJjb2xTcGFuIiwKICAgICAgICAgICAgICAgIHVzZW1hcDogInVzZU1hcCIs
CiAgICAgICAgICAgICAgICBmcmFtZWJvcmRlcjogImZyYW1lQm9yZGVyIiwKICAgICAgICAgICAg
ICAgIGNvbnRlbnRlZGl0YWJsZTogImNvbnRlbnRFZGl0YWJsZSIKICAgICAgICB9LAogICAgICAg
IAogICAgICAgIHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKICAgICAgICAg
ICAgICAgIHZhciBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7CgogICAgICAgICAgICAgICAgLy8gZG9u
J3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rl
cwogICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0g
OCB8fCBuVHlwZSA9PT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcmV0LCBob29rcywK
ICAgICAgICAgICAgICAgICAgICAgICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5p
c1hNTERvYyggZWxlbSApOwoKICAgICAgICAgICAgICAgIGlmICggbm90eG1sICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCiAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAm
JiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CgogICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAoZWxlbVsgbmFtZSBdID0gdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob29r
cyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9
PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cgog
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtWyBuYW1lIF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIAogICAgICAgIHByb3BIb29rczogewog
ICAgICAgICAgICAgICAgdGFiSW5kZXg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBm
dW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGVt
LnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIGl0
IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0
dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlTm9kZSA9IGVsZW0uZ2V0QXR0
cmlidXRlTm9kZSgidGFiaW5kZXgiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQgPwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoIGF0dHJpYnV0ZU5vZGUu
dmFsdWUsIDEwICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmZv
Y3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgcmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5v
ZGVOYW1lICkgJiYgZWxlbS5ocmVmID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0KfSk7CgovLyBBZGQgdGhlIHRhYmluZGV4IHByb3BIb29rIHRvIGF0
dHJIb29rcyBmb3IgYmFjay1jb21wYXQKalF1ZXJ5LmF0dHJIb29rcy50YWJJbmRleCA9IGpRdWVy
eS5wcm9wSG9va3MudGFiSW5kZXg7CgovLyBIb29rIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKYm9v
bEhvb2sgPSB7CiAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKICAgICAgICAg
ICAgICAgIC8vIEFsaWduIGJvb2xlYW4gYXR0cmlidXRlcyB3aXRoIGNvcnJlc3BvbmRpbmcgcHJv
cGVydGllcwogICAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGF0dHJpYnV0ZSBwcmVzZW5j
ZSB3aGVyZSBzb21lIGJvb2xlYW5zIGFyZSBub3Qgc3VwcG9ydGVkCiAgICAgICAgICAgICAgICB2
YXIgYXR0ck5vZGU7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5h
bWUgKSA9PT0gdHJ1ZSB8fCAoIGF0dHJOb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1l
ICkgKSAmJiBhdHRyTm9kZS5ub2RlVmFsdWUgIT09IGZhbHNlID8KICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZS50b0xvd2VyQ2FzZSgpIDoKICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZp
bmVkOwogICAgICAgIH0sCiAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUg
KSB7CiAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWU7CiAgICAgICAgICAgICAgICBpZiAoIHZh
bHVlID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGJvb2xl
YW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgdHJ1ZSBzaW5jZSB3ZSBrbm93IGF0
IHRoaXMgcG9pbnQgaXQncyB0eXBlIGJvb2xlYW4gYW5kIG5vdCBmYWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTZXQgYm9vbGVhbiBhdHRyaWJ1dGVzIHRvIHRoZSBzYW1lIG5hbWUgYW5k
IHNldCB0aGUgRE9NIHByb3BlcnR5CiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BOYW1lID0g
alF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHByb3BOYW1lIGluIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gT25seSBzZXQgdGhlIElETCBzcGVjaWZpY2FsbHkgaWYgaXQgYWxyZWFkeSBleGlzdHMgb24g
dGhlIGVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBwcm9wTmFt
ZSBdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSApOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgICAgfQp9OwoK
Ly8gSUU2LzcgZG8gbm90IHN1cHBvcnQgZ2V0dGluZy9zZXR0aW5nIHNvbWUgYXR0cmlidXRlcyB3
aXRoIGdldC9zZXRBdHRyaWJ1dGUKaWYgKCAhalF1ZXJ5LnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRl
ICkgewogICAgICAgIAogICAgICAgIC8vIFVzZSB0aGlzIGZvciBhbnkgYXR0cmlidXRlIGluIElF
Ni83CiAgICAgICAgLy8gVGhpcyBmaXhlcyBhbG1vc3QgZXZlcnkgSUU2LzcgaXNzdWUKICAgICAg
ICBub2RlSG9vayA9IGpRdWVyeS52YWxIb29rcy5idXR0b24gPSB7CiAgICAgICAgICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIg
cmV0OwogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUo
IG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHVuZGVmaW5lZCBpZiBu
b2RlVmFsdWUgaXMgZW1wdHkgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXQgJiYgcmV0Lm5vZGVWYWx1ZSAhPT0gIiIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldC5ub2RlVmFsdWUgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVm
aW5lZDsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBl
bGVtLCB2YWx1ZSwgbmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBl
eGlzdGluZyBvciBjcmVhdGUgYSBuZXcgYXR0cmlidXRlIG5vZGUKICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFyZXQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCBuYW1lICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGVOb2RlKCByZXQgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldC5ub2Rl
VmFsdWUgPSB2YWx1ZSArICIiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAg
ICAvLyBTZXQgd2lkdGggYW5kIGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBz
dHJpbmcoIEJ1ZyAjODE1MCApCiAgICAgICAgLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKICAgICAg
ICBqUXVlcnkuZWFjaChbICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkg
ewogICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVu
ZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNl
dDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdmFsdWUgPT09ICIiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICJhdXRvIiApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgfSk7Cn0KCgovLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNp
YWwgY2FsbCBvbiBJRQppZiAoICFqUXVlcnkuc3VwcG9ydC5ocmVmTm9ybWFsaXplZCApIHsKICAg
ICAgICBqUXVlcnkuZWFjaChbICJocmVmIiwgInNyYyIsICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1
bmN0aW9uKCBpLCBuYW1lICkgewogICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFt
ZSBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCAyICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/IHVuZGVm
aW5lZCA6IHJldDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgfSk7Cn0KCmlmICggIWpRdWVyeS5zdXBwb3J0LnN0eWxlICkgewogICAgICAgIGpR
dWVyeS5hdHRySG9va3Muc3R5bGUgPSB7CiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBl
bGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIGluIHRo
ZSBjYXNlIG9mIGVtcHR5IHN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxp
emUgdG8gbG93ZXJjYXNlIHNpbmNlIElFIHVwcGVyY2FzZXMgY3NzIHByb3BlcnR5IG5hbWVzCiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnN0eWxlLmNzc1RleHQudG9Mb3dlckNh
c2UoKSB8fCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgc2V0
OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoZWxlbS5zdHlsZS5jc3NUZXh0ID0gIiIgKyB2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfTsKfQoKLy8gU2FmYXJpIG1pcy1yZXBvcnRzIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHBy
b3BlcnR5IG9mIGFuIG9wdGlvbgovLyBBY2Nlc3NpbmcgdGhlIHBhcmVudCdzIHNlbGVjdGVkSW5k
ZXggcHJvcGVydHkgZml4ZXMgaXQKaWYgKCAhalF1ZXJ5LnN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7
CiAgICAgICAgalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IGpRdWVyeS5leHRlbmQoIGpRdWVy
eS5wcm9wSG9va3Muc2VsZWN0ZWQsIHsKICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5v
ZGU7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJlbnQuc2VsZWN0ZWRJbmRleDsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaXQgYWxzbyB3b3JrcyB3aXRoIG9w
dGdyb3Vwcywgc2VlICM1NzAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBw
YXJlbnQucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0pOwp9CgovLyBS
YWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlcgppZiAoICFqUXVlcnkuc3VwcG9ydC5j
aGVja09uICkgewogICAgICAgIGpRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNoZWNrYm94IiBdLCBm
dW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0gewog
ICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBpbiBXZWJraXQg
IiIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiAib24iIGlmIGEgdmFsdWUgaXNuJ3Qgc3BlY2lmaWVk
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRl
KCJ2YWx1ZSIpID09PSBudWxsID8gIm9uIiA6IGVsZW0udmFsdWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgfSk7Cn0KalF1ZXJ5LmVhY2goWyAi
cmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewogICAgICAgIGpRdWVyeS52YWxIb29r
c1sgdGhpcyBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0sIHsKICAg
ICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXko
IGpRdWVyeShlbGVtKS52YWwoKSwgdmFsdWUgKSA+PSAwKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0pOwp9KTsKCgoKCnZhciBybmFtZXNwYWNl
cyA9IC9cLiguKikkLywKICAgICAgICByZm9ybUVsZW1zID0gL14oPzp0ZXh0YXJlYXxpbnB1dHxz
ZWxlY3QpJC9pLAogICAgICAgIHJwZXJpb2QgPSAvXC4vZywKICAgICAgICByc3BhY2VzID0gLyAv
ZywKICAgICAgICByZXNjYXBlID0gL1teXHdccy58YF0vZywKICAgICAgICBmY2xlYW51cCA9IGZ1
bmN0aW9uKCBubSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBubS5yZXBsYWNlKHJlc2NhcGUs
ICJcXCQmIik7CiAgICAgICAgfTsKCi8qCiAqIEEgbnVtYmVyIG9mIGhlbHBlciBmdW5jdGlvbnMg
dXNlZCBmb3IgbWFuYWdpbmcgZXZlbnRzLgogKiBNYW55IG9mIHRoZSBpZGVhcyBiZWhpbmQgdGhp
cyBjb2RlIG9yaWdpbmF0ZWQgZnJvbQogKiBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnku
CiAqLwpqUXVlcnkuZXZlbnQgPSB7CgogICAgICAgIC8vIEJpbmQgYW4gZXZlbnQgdG8gYW4gZWxl
bWVudAogICAgICAgIC8vIE9yaWdpbmFsIGJ5IERlYW4gRWR3YXJkcwogICAgICAgIGFkZDogZnVu
Y3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhICkgewogICAgICAgICAgICAgICAgaWYg
KCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBpZiAoIGhhbmRsZXIgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGVyID0gcmV0dXJuRmFsc2U7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhaGFuZGxlciAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZXMgYnVnICM3MjI5LiBGaXggcmVjb21t
ZW5kZWQgYnkgamRhbHRvbgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGhhbmRsZU9iakluLCBoYW5kbGVPYmo7Cgog
ICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZU9iakluID0gaGFuZGxlcjsKICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkIGhhcyBh
IHVuaXF1ZSBJRAogICAgICAgICAgICAgICAgaWYgKCAhaGFuZGxlci5ndWlkICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1
Y3R1cmUKICAgICAgICAgICAgICAgIHZhciBlbGVtRGF0YSA9IGpRdWVyeS5fZGF0YSggZWxlbSAp
OwoKICAgICAgICAgICAgICAgIC8vIElmIG5vIGVsZW1EYXRhIGlzIGZvdW5kIHRoZW4gd2UgbXVz
dCBiZSB0cnlpbmcgdG8gYmluZCB0byBvbmUgb2YgdGhlCiAgICAgICAgICAgICAgICAvLyBiYW5u
ZWQgbm9EYXRhIGVsZW1lbnRzCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtRGF0YSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHZhciBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlOwoKICAgICAgICAgICAgICAgIGlmICgg
IWV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbURhdGEuZXZlbnRzID0gZXZl
bnRzID0ge307CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhZXZlbnRI
YW5kbGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1EYXRhLmhhbmRsZSA9IGV2ZW50
SGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBh
bmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGFuIGV2ZW50IGlzIGNh
bGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09ICJ1bmRlZmluZWQiICYmICghZSB8fCBqUXVl
cnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUpID8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5oYW5kbGUuYXBwbHkoIGV2ZW50SGFuZGxlLmVs
ZW0sIGFyZ3VtZW50cyApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBBZGQgZWxlbSBhcyBhIHByb3BlcnR5IG9mIHRoZSBoYW5kbGUg
ZnVuY3Rpb24KICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gcHJldmVudCBhIG1lbW9yeSBs
ZWFrIHdpdGggbm9uLW5hdGl2ZSBldmVudHMgaW4gSUUuCiAgICAgICAgICAgICAgICBldmVudEhh
bmRsZS5lbGVtID0gZWxlbTsKCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgZXZl
bnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCiAgICAgICAgICAgICAgICAvLyBqUXVlcnkoLi4uKS5i
aW5kKCJtb3VzZW92ZXIgbW91c2VvdXQiLCBmbik7CiAgICAgICAgICAgICAgICB0eXBlcyA9IHR5
cGVzLnNwbGl0KCIgIik7CgogICAgICAgICAgICAgICAgdmFyIHR5cGUsIGkgPSAwLCBuYW1lc3Bh
Y2VzOwoKICAgICAgICAgICAgICAgIHdoaWxlICggKHR5cGUgPSB0eXBlc1sgaSsrIF0pICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBoYW5kbGVPYmpJbiA/CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCh7fSwgaGFuZGxlT2JqSW4pIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGhhbmRsZXI6IGhhbmRsZXIsIGRhdGE6
IGRhdGEgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgZXZlbnQgaGFu
ZGxlcnMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlLmluZGV4T2YoIi4iKSA+IC0x
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSB0eXBlLnNw
bGl0KCIuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG5hbWVzcGFj
ZXMuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmoubmFt
ZXNwYWNlID0gbmFtZXNwYWNlcy5zbGljZSgwKS5zb3J0KCkuam9pbigiLiIpOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lc3BhY2VzID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2Jq
Lm5hbWVzcGFjZSA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVPYmoudHlwZSA9IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIWhhbmRsZU9iai5ndWlkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRsZU9iai5ndWlkID0gaGFuZGxlci5ndWlkOwogICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbGlzdCBvZiBmdW5j
dGlvbnMgYm91bmQgdG8gdGhpcyBldmVudAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFu
ZGxlcnMgPSBldmVudHNbIHR5cGUgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
cGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhaGFuZGxlcnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgYSBzcGVjaWFsIGV2ZW50IGhhbmRsZXIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyL2F0
dGFjaEV2ZW50IGlmIHRoZSBzcGVjaWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIXNwZWNpYWwuc2V0dXAgfHwgc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBk
YXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpbmQgdGhlIGdsb2JhbCBldmVudCBoYW5k
bGVyIHRvIHRoZSBlbGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVu
dEhhbmRsZSwgZmFsc2UgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBlbGVtLmF0dGFjaEV2ZW50ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmF0dGFjaEV2ZW50KCAib24iICsgdHlwZSwg
ZXZlbnRIYW5kbGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbC5hZGQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2Jq
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWhhbmRsZU9iai5oYW5k
bGVyLmd1aWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdAog
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgYmVl
biB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gTnVsbGlmeSBlbGVtIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIGluIElF
CiAgICAgICAgICAgICAgICBlbGVtID0gbnVsbDsKICAgICAgICB9LAoKICAgICAgICBnbG9iYWw6
IHt9LAoKICAgICAgICAvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFu
IGVsZW1lbnQKICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwg
cG9zICkgewogICAgICAgICAgICAgICAgLy8gZG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNv
bW1lbnQgbm9kZXMKICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBl
bGVtLm5vZGVUeXBlID09PSA4ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyID09PSBmYWxzZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IHJldHVybkZhbHNlOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciByZXQsIHR5cGUsIGZuLCBqLCBpID0gMCwg
YWxsLCBuYW1lc3BhY2VzLCBuYW1lc3BhY2UsIHNwZWNpYWwsIGV2ZW50VHlwZSwgaGFuZGxlT2Jq
LCBvcmlnVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbURhdGEgPSBqUXVlcnkuaGFz
RGF0YSggZWxlbSApICYmIGpRdWVyeS5fZGF0YSggZWxlbSApLAogICAgICAgICAgICAgICAgICAg
ICAgICBldmVudHMgPSBlbGVtRGF0YSAmJiBlbGVtRGF0YS5ldmVudHM7CgogICAgICAgICAgICAg
ICAgaWYgKCAhZWxlbURhdGEgfHwgIWV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIHR5cGVzIGlzIGFj
dHVhbGx5IGFuIGV2ZW50IG9iamVjdCBoZXJlCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVzICYm
IHR5cGVzLnR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSB0eXBlcy5o
YW5kbGVyOwogICAgICAgICAgICAgICAgICAgICAgICB0eXBlcyA9IHR5cGVzLnR5cGU7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gVW5iaW5kIGFsbCBldmVudHMgZm9yIHRo
ZSBlbGVtZW50CiAgICAgICAgICAgICAgICBpZiAoICF0eXBlcyB8fCB0eXBlb2YgdHlwZXMgPT09
ICJzdHJpbmciICYmIHR5cGVzLmNoYXJBdCgwKSA9PT0gIi4iICkgewogICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlcyA9IHR5cGVzIHx8ICIiOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggdHlwZSBpbiBldmVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBi
eSBhIHNwYWNlCiAgICAgICAgICAgICAgICAvLyBqUXVlcnkoLi4uKS51bmJpbmQoIm1vdXNlb3Zl
ciBtb3VzZW91dCIsIGZuKTsKICAgICAgICAgICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoIiAi
KTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoICh0eXBlID0gdHlwZXNbIGkrKyBdKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgb3JpZ1R5cGUgPSB0eXBlOwogICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVPYmogPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICBhbGwgPSB0eXBl
LmluZGV4T2YoIi4iKSA8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBb
XTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWFsbCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBOYW1lc3BhY2VkIGV2ZW50IGhhbmRsZXJzCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIi4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBuZXcgUmVnRXhwKCIoXnxc
XC4pIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFw
KCBuYW1lc3BhY2VzLnNsaWNlKDApLnNvcnQoKSwgZmNsZWFudXAgKS5qb2luKCJcXC4oPzouKlxc
Lik/IikgKyAiKFxcLnwkKSIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICBldmVudFR5cGUgPSBldmVudHNbIHR5cGUgXTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIWV2ZW50VHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhaGFuZGxlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCBqID0gMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGV2ZW50VHlwZVsgaiBdOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYWxsIHx8IG5hbWVz
cGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIG9y
aWdUeXBlLCBoYW5kbGVPYmouaGFuZGxlciwgaiApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGUuc3BsaWNlKCBqLS0sIDEgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFs
ID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGogPSBwb3MgfHwgMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVudFR5cGVbIGog
XTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyLmd1aWQgPT09
IGhhbmRsZU9iai5ndWlkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gcmVtb3ZlIHRoZSBnaXZlbiBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gdHlwZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhbGwgfHwgbmFtZXNwYWNlLnRl
c3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBwb3MgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGUuc3BsaWNl
KCBqLS0sIDEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBzcGVjaWFsLnJlbW92ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmog
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcG9zICE9IG51bGwgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiBubyBtb3JlIGhhbmRsZXJzIGV4aXN0CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZXZlbnRUeXBlLmxlbmd0aCA9PT0gMCB8fCBwb3Mg
IT0gbnVsbCAmJiBldmVudFR5cGUubGVuZ3RoID09PSAxICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIXNwZWNpYWwudGVhcmRvd24gfHwgc3BlY2lhbC50ZWFyZG93bi5j
YWxsKCBlbGVtLCBuYW1lc3BhY2VzICkgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVt
RGF0YS5oYW5kbGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1sgdHlwZSBdOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBleHBh
bmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWQKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lmlz
RW1wdHlPYmplY3QoIGV2ZW50cyApICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFu
ZGxlID0gZWxlbURhdGEuaGFuZGxlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRs
ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuZWxlbSA9IG51bGw7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBlbGVtRGF0YS5ldmVudHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtRGF0
YS5oYW5kbGU7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0VtcHR5T2Jq
ZWN0KCBlbGVtRGF0YSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5yZW1vdmVEYXRhKCBlbGVtLCB1bmRlZmluZWQsIHRydWUgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgLy8g
RXZlbnRzIHRoYXQgYXJlIHNhZmUgdG8gc2hvcnQtY2lyY3VpdCBpZiBubyBoYW5kbGVycyBhcmUg
YXR0YWNoZWQuCiAgICAgICAgLy8gTmF0aXZlIERPTSBldmVudHMgc2hvdWxkIG5vdCBiZSBhZGRl
ZCwgdGhleSBtYXkgaGF2ZSBpbmxpbmUgaGFuZGxlcnMuCiAgICAgICAgY3VzdG9tRXZlbnQ6IHsK
ICAgICAgICAgICAgICAgICJnZXREYXRhIjogdHJ1ZSwKICAgICAgICAgICAgICAgICJzZXREYXRh
IjogdHJ1ZSwKICAgICAgICAgICAgICAgICJjaGFuZ2VEYXRhIjogdHJ1ZQogICAgICAgIH0sCgog
ICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJz
ICkgewogICAgICAgICAgICAgICAgLy8gRXZlbnQgb2JqZWN0IG9yIGV2ZW50IHR5cGUKICAgICAg
ICAgICAgICAgIHZhciB0eXBlID0gZXZlbnQudHlwZSB8fCBldmVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZXNwYWNlcyA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBleGNsdXNp
dmU7CgogICAgICAgICAgICAgICAgaWYgKCB0eXBlLmluZGV4T2YoIiEiKSA+PSAwICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBFeGNsdXNpdmUgZXZlbnRzIHRyaWdnZXIgb25seSBmb3Ig
dGhlIGV4YWN0IGV2ZW50IChubyBuYW1lc3BhY2VzKQogICAgICAgICAgICAgICAgICAgICAgICB0
eXBlID0gdHlwZS5zbGljZSgwLCAtMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2l2
ZSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCB0eXBlLmlu
ZGV4T2YoIi4iKSA+PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBOYW1lc3BhY2Vk
IHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgp
CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMuc29ydCgpOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIGlmICggKCFlbGVtIHx8IGpRdWVyeS5ldmVudC5jdXN0b21FdmVudFsgdHlw
ZSBdKSAmJiAhalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBObyBqUXVlcnkgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnQgdHlwZSwgYW5kIGl0
IGNhbid0IGhhdmUgaW5saW5lIGhhbmRsZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3Mg
aW4gYW4gRXZlbnQsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZwogICAgICAg
ICAgICAgICAgZXZlbnQgPSB0eXBlb2YgZXZlbnQgPT09ICJvYmplY3QiID8KICAgICAgICAgICAg
ICAgICAgICAgICAgLy8galF1ZXJ5LkV2ZW50IG9iamVjdAogICAgICAgICAgICAgICAgICAgICAg
ICBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/IGV2ZW50IDoKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gT2JqZWN0IGxpdGVyYWwKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGpRdWVyeS5F
dmVudCggdHlwZSwgZXZlbnQgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3QgdGhl
IGV2ZW50IHR5cGUgKHN0cmluZykKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGpRdWVyeS5F
dmVudCggdHlwZSApOwoKICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSB0eXBlOwogICAgICAg
ICAgICAgICAgZXZlbnQuZXhjbHVzaXZlID0gZXhjbHVzaXZlOwogICAgICAgICAgICAgICAgZXZl
bnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCIuIik7CiAgICAgICAgICAgICAgICBldmVu
dC5uYW1lc3BhY2VfcmUgPSBuZXcgUmVnRXhwKCIoXnxcXC4pIiArIG5hbWVzcGFjZXMuam9pbigi
XFwuKD86LipcXC4pPyIpICsgIihcXC58JCkiKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgLy8gdHJpZ2dlckhhbmRsZXIoKSBhbmQgZ2xvYmFsIGV2ZW50cyBkb24ndCBidWJibGUg
b3IgcnVuIHRoZSBkZWZhdWx0IGFjdGlvbgogICAgICAgICAgICAgICAgaWYgKCBvbmx5SGFuZGxl
cnMgfHwgIWVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhIGdsb2JhbCB0cmln
Z2VyCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUT0RPOiBTdG9wIHRhdW50aW5nIHRoZSBkYXRhIGNhY2hlOyByZW1vdmUgZ2xvYmFsIGV2
ZW50cyBhbmQgYWx3YXlzIGF0dGFjaCB0byBkb2N1bWVudAogICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZWFjaCggalF1ZXJ5LmNhY2hlLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpbnRlcm5hbEtleSB2YXJpYWJsZSBpcyBqdXN0IHVzZWQgdG8g
bWFrZSBpdCBlYXNpZXIgdG8gZmluZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFuZCBwb3RlbnRpYWxseSBjaGFuZ2UgdGhpcyBzdHVmZiBsYXRlcjsgY3VycmVudGx5IGl0IGp1
c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2ludHMgdG8galF1ZXJ5LmV4
cGFuZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxLZXkgPSBq
UXVlcnkuZXhwYW5kbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dGVybmFsQ2FjaGUgPSB0aGlzWyBpbnRlcm5hbEtleSBdOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggaW50ZXJuYWxDYWNoZSAmJiBpbnRlcm5hbENhY2hlLmV2ZW50cyAmJiBp
bnRlcm5hbENhY2hlLmV2ZW50c1sgdHlwZSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGV2ZW50LCBkYXRhLCBpbnRlcm5h
bENhY2hlLmhhbmRsZS5lbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIERvbid0IGRvIGV2ZW50cyBv
biB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCiAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5
cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENsZWFuIHVw
IHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZAogICAgICAgICAgICAgICAgZXZl
bnQucmVzdWx0ID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZWxl
bTsKCiAgICAgICAgICAgICAgICAvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVu
ZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0CiAgICAgICAgICAgICAg
ICBkYXRhID0gZGF0YSAhPSBudWxsID8galF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApIDogW107CiAg
ICAgICAgICAgICAgICBkYXRhLnVuc2hpZnQoIGV2ZW50ICk7CgogICAgICAgICAgICAgICAgdmFy
IGN1ciA9IGVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGRvZXNuJ3QgbGlrZSBt
ZXRob2QgbmFtZXMgd2l0aCBhIGNvbG9uICgjMzUzMywgIzgyNzIpCiAgICAgICAgICAgICAgICAg
ICAgICAgIG9udHlwZSA9IHR5cGUuaW5kZXhPZigiOiIpIDwgMCA/ICJvbiIgKyB0eXBlIDogIiI7
CgogICAgICAgICAgICAgICAgLy8gRmlyZSBldmVudCBvbiB0aGUgY3VycmVudCBlbGVtZW50LCB0
aGVuIGJ1YmJsZSB1cCB0aGUgRE9NIHRyZWUKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGpRdWVyeS5fZGF0YSggY3VyLCAiaGFuZGxlIiAp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IGN1cjsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhbiBpbmxpbmUgYm91
bmQgc2NyaXB0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb250eXBlICYmIGpRdWVyeS5h
Y2NlcHREYXRhKCBjdXIgKSAmJiBjdXJbIG9udHlwZSBdICYmIGN1clsgb250eXBlIF0uYXBwbHko
IGN1ciwgZGF0YSApID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBldmVudC5yZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93
CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IGN1ci5vd25l
ckRvY3VtZW50IHx8IGN1ciA9PT0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQgJiYgd2luZG93
OwogICAgICAgICAgICAgICAgfSB3aGlsZSAoIGN1ciAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0
b3BwZWQoKSApOwoKICAgICAgICAgICAgICAgIC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRl
ZmF1bHQgYWN0aW9uLCBkbyBpdCBub3cKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LmlzRGVm
YXVsdFByZXZlbnRlZCgpICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lh
bFsgdHlwZSBdIHx8IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIXNwZWNpYWwu
X2RlZmF1bHQgfHwgc3BlY2lhbC5fZGVmYXVsdC5jYWxsKCBlbGVtLm93bmVyRG9jdW1lbnQsIGV2
ZW50ICkgPT09IGZhbHNlKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEodHlw
ZSA9PT0gImNsaWNrIiAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJhIiApKSAmJiBqUXVlcnku
YWNjZXB0RGF0YSggZWxlbSApICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5h
bWUgbmFtZSBhcyB0aGUgZXZlbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q2FuJ3QgdXNlIGFuIC5pc0Z1bmN0aW9uKSgpIGNoZWNrIGhlcmUgYmVjYXVzZSBJRTYvNyBmYWls
cyB0aGF0IHRlc3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUU8OSBkaWVz
IG9uIGZvY3VzIHRvIGhpZGRlbiBlbGVtZW50ICgjMTQ4NiksIG1heSB3YW50IHRvIHJldmlzaXQg
YSB0cnkvY2F0Y2guCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb250eXBlICYmIGVsZW1bIHR5
cGUgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygp
IG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
bGQgPSBlbGVtWyBvbnR5cGUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggb2xkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG9udHlwZSBdID0gbnVsbDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9
IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1bIHR5cGUgXSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBpZUVycm9yICkge30KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbGQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBvbnR5cGUgXSA9IG9sZDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
cmV0dXJuIGV2ZW50LnJlc3VsdDsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGU6IGZ1bmN0aW9u
KCBldmVudCApIHsKICAgICAgICAgICAgICAgIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggZXZl
bnQgfHwgd2luZG93LmV2ZW50ICk7CiAgICAgICAgICAgICAgICAvLyBTbmFwc2hvdCB0aGUgaGFu
ZGxlcnMgbGlzdCBzaW5jZSBhIGNhbGxlZCBoYW5kbGVyIG1heSBhZGQvcmVtb3ZlIGV2ZW50cy4K
ICAgICAgICAgICAgICAgIHZhciBoYW5kbGVycyA9ICgoalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiZXZl
bnRzIiApIHx8IHt9KVsgZXZlbnQudHlwZSBdIHx8IFtdKS5zbGljZSgwKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgcnVuX2FsbCA9ICFldmVudC5leGNsdXNpdmUgJiYgIWV2ZW50Lm5hbWVzcGFj
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5j
YWxsKCBhcmd1bWVudHMsIDAgKTsKCiAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGZpeC1lZCBF
dmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50CiAgICAgICAgICAg
ICAgICBhcmdzWzBdID0gZXZlbnQ7CiAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0
ID0gdGhpczsKCiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGwgPSBoYW5kbGVycy5s
ZW5ndGg7IGogPCBsOyBqKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVP
YmogPSBoYW5kbGVyc1sgaiBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVk
IGV2ZW50IG11c3QgMSkgYmUgbm9uLWV4Y2x1c2l2ZSBhbmQgaGF2ZSBubyBuYW1lc3BhY2UsIG9y
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIpIGhhdmUgbmFtZXNwYWNlKHMpIGEgc3Vic2V0
IG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBib3VuZCBldmVudC4KICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBydW5fYWxsIHx8IGV2ZW50Lm5hbWVzcGFjZV9yZS50ZXN0KCBoYW5kbGVPYmou
bmFtZXNwYWNlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyBp
biBhIHJlZmVyZW5jZSB0byB0aGUgaGFuZGxlciBmdW5jdGlvbiBpdHNlbGYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTbyB0aGF0IHdlIGNhbiBsYXRlciByZW1vdmUgaXQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5oYW5kbGVyID0gaGFuZGxlT2JqLmhh
bmRsZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YSA9IGhhbmRs
ZU9iai5kYXRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRsZU9i
aiA9IGhhbmRsZU9iajsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9
IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmdzICk7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSByZXQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldCA9PT0gZmFsc2UgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3Rv
cHBlZCgpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0
OwogICAgICAgIH0sCgogICAgICAgIHByb3BzOiAiYWx0S2V5IGF0dHJDaGFuZ2UgYXR0ck5hbWUg
YnViYmxlcyBidXR0b24gY2FuY2VsYWJsZSBjaGFyQ29kZSBjbGllbnRYIGNsaWVudFkgY3RybEtl
eSBjdXJyZW50VGFyZ2V0IGRhdGEgZGV0YWlsIGV2ZW50UGhhc2UgZnJvbUVsZW1lbnQgaGFuZGxl
ciBrZXlDb2RlIGxheWVyWCBsYXllclkgbWV0YUtleSBuZXdWYWx1ZSBvZmZzZXRYIG9mZnNldFkg
cGFnZVggcGFnZVkgcHJldlZhbHVlIHJlbGF0ZWROb2RlIHJlbGF0ZWRUYXJnZXQgc2NyZWVuWCBz
Y3JlZW5ZIHNoaWZ0S2V5IHNyY0VsZW1lbnQgdGFyZ2V0IHRvRWxlbWVudCB2aWV3IHdoZWVsRGVs
dGEgd2hpY2giLnNwbGl0KCIgIiksCgogICAgICAgIGZpeDogZnVuY3Rpb24oIGV2ZW50ICkgewog
ICAgICAgICAgICAgICAgaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIHN0b3JlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgb2JqZWN0CiAgICAg
ICAgICAgICAgICAvLyBhbmQgImNsb25lIiB0byBzZXQgcmVhZC1vbmx5IHByb3BlcnRpZXMKICAg
ICAgICAgICAgICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZXZlbnQ7CiAgICAgICAgICAgICAgICBl
dmVudCA9IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApOwoKICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gdGhpcy5wcm9wcy5sZW5ndGgsIHByb3A7IGk7ICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wID0gdGhpcy5wcm9wc1sgLS1pIF07CiAgICAgICAgICAgICAgICAgICAg
ICAgIGV2ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgLy8gRml4IHRhcmdldCBwcm9wZXJ0eSwgaWYgbmVjZXNzYXJ5
CiAgICAgICAgICAgICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZpeGVzICMxOTI1IHdoZXJlIHNyY0VsZW1lbnQgbWlnaHQgbm90IGJlIGRlZmlu
ZWQgZWl0aGVyCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGV2ZW50LnNy
Y0VsZW1lbnQgfHwgZG9jdW1lbnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
Ly8gY2hlY2sgaWYgdGFyZ2V0IGlzIGEgdGV4dG5vZGUgKHNhZmFyaSkKICAgICAgICAgICAgICAg
IGlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBldmVudC50YXJnZXQgPSBldmVudC50YXJnZXQucGFyZW50Tm9kZTsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNzYXJ5
CiAgICAgICAgICAgICAgICBpZiAoICFldmVudC5yZWxhdGVkVGFyZ2V0ICYmIGV2ZW50LmZyb21F
bGVtZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWxhdGVkVGFyZ2V0ID0g
ZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2
ZW50LmZyb21FbGVtZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENh
bGN1bGF0ZSBwYWdlWC9ZIGlmIG1pc3NpbmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGUKICAgICAg
ICAgICAgICAgIGlmICggZXZlbnQucGFnZVggPT0gbnVsbCAmJiBldmVudC5jbGllbnRYICE9IG51
bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldmVudERvY3VtZW50ID0gZXZlbnQu
dGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9jID0gZXZlbnREb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGV2ZW50RG9jdW1lbnQuYm9keTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50LnBhZ2VYID0gZXZlbnQuY2xpZW50WCArIChkb2MgJiYgZG9j
LnNjcm9sbExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCkgLSAoZG9jICYmIGRv
Yy5jbGllbnRMZWZ0IHx8IGJvZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDApOwogICAgICAgICAg
ICAgICAgICAgICAgICBldmVudC5wYWdlWSA9IGV2ZW50LmNsaWVudFkgKyAoZG9jICYmIGRvYy5z
Y3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxUb3AgIHx8IDApIC0gKGRvYyAmJiBkb2Mu
Y2xpZW50VG9wICB8fCBib2R5ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwKTsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHMKICAgICAg
ICAgICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCAmJiAoZXZlbnQuY2hhckNvZGUgIT0g
bnVsbCB8fCBldmVudC5rZXlDb2RlICE9IG51bGwpICkgewogICAgICAgICAgICAgICAgICAgICAg
ICBldmVudC53aGljaCA9IGV2ZW50LmNoYXJDb2RlICE9IG51bGwgPyBldmVudC5jaGFyQ29kZSA6
IGV2ZW50LmtleUNvZGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQWRk
IG1ldGFLZXkgdG8gbm9uLU1hYyBicm93c2VycyAodXNlIGN0cmwgZm9yIFBDJ3MgYW5kIE1ldGEg
Zm9yIE1hY3MpCiAgICAgICAgICAgICAgICBpZiAoICFldmVudC5tZXRhS2V5ICYmIGV2ZW50LmN0
cmxLZXkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXkgPSBldmVudC5j
dHJsS2V5OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCB3aGljaCBm
b3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKICAgICAgICAg
ICAgICAgIC8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0
CiAgICAgICAgICAgICAgICBpZiAoICFldmVudC53aGljaCAmJiBldmVudC5idXR0b24gIT09IHVu
ZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQud2hpY2ggPSAoZXZlbnQu
YnV0dG9uICYgMSA/IDEgOiAoIGV2ZW50LmJ1dHRvbiAmIDIgPyAzIDogKCBldmVudC5idXR0b24g
JiA0ID8gMiA6IDAgKSApKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1
cm4gZXZlbnQ7CiAgICAgICAgfSwKCiAgICAgICAgLy8gRGVwcmVjYXRlZCwgdXNlIGpRdWVyeS5n
dWlkIGluc3RlYWQKICAgICAgICBndWlkOiAxRTgsCgogICAgICAgIC8vIERlcHJlY2F0ZWQsIHVz
ZSBqUXVlcnkucHJveHkgaW5zdGVhZAogICAgICAgIHByb3h5OiBqUXVlcnkucHJveHksCgogICAg
ICAgIHNwZWNpYWw6IHsKICAgICAgICAgICAgICAgIHJlYWR5OiB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVhZHkgZXZlbnQgaXMgc2V0dXAKICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0dXA6IGpRdWVyeS5iaW5kUmVhZHksCiAgICAgICAgICAgICAgICAgICAg
ICAgIHRlYXJkb3duOiBqUXVlcnkubm9vcAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICBsaXZlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24oIGhhbmRs
ZU9iaiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRk
KCB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUNvbnZl
cnQoIGhhbmRsZU9iai5vcmlnVHlwZSwgaGFuZGxlT2JqLnNlbGVjdG9yICksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKHt9LCBoYW5kbGVPYmos
IHtoYW5kbGVyOiBsaXZlSGFuZGxlciwgZ3VpZDogaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZH0pICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICByZW1v
dmU6IGZ1bmN0aW9uKCBoYW5kbGVPYmogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgbGl2ZUNvbnZlcnQoIGhhbmRsZU9iai5vcmln
VHlwZSwgaGFuZGxlT2JqLnNlbGVjdG9yICksIGhhbmRsZU9iaiApOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGJlZm9yZXVubG9h
ZDogewogICAgICAgICAgICAgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVz
cGFjZXMsIGV2ZW50SGFuZGxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIHNwZWNpYWwgY2FzZSBvbiB3aW5kb3dzCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIHRoaXMgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25iZWZvcmV1bmxv
YWQgPSBldmVudEhhbmRsZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bjog
ZnVuY3Rpb24oIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdGhpcy5vbmJlZm9yZXVubG9hZCA9PT0gZXZlbnRIYW5kbGUgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVmb3JldW5s
b2FkID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn07CgpqUXVlcnkucmVt
b3ZlRXZlbnQgPSBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyID8KICAgICAgICBmdW5jdGlv
biggZWxlbSwgdHlwZSwgaGFuZGxlICkgewogICAgICAgICAgICAgICAgaWYgKCBlbGVtLnJlbW92
ZUV2ZW50TGlzdGVuZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlRXZl
bnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlLCBmYWxzZSApOwogICAgICAgICAgICAgICAgfQogICAg
ICAgIH0gOgogICAgICAgIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CiAgICAgICAg
ICAgICAgICBpZiAoIGVsZW0uZGV0YWNoRXZlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0uZGV0YWNoRXZlbnQoICJvbiIgKyB0eXBlLCBoYW5kbGUgKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICB9OwoKalF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7CiAg
ICAgICAgLy8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkCiAg
ICAgICAgaWYgKCAhdGhpcy5wcmV2ZW50RGVmYXVsdCApIHsKICAgICAgICAgICAgICAgIHJldHVy
biBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7CiAgICAgICAgfQoKICAgICAgICAvLyBF
dmVudCBvYmplY3QKICAgICAgICBpZiAoIHNyYyAmJiBzcmMudHlwZSApIHsKICAgICAgICAgICAg
ICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsKICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9
IHNyYy50eXBlOwoKICAgICAgICAgICAgICAgIC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9j
dW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkCiAgICAgICAgICAgICAgICAv
LyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2
YWx1ZS4KICAgICAgICAgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKHNyYy5kZWZh
dWx0UHJldmVudGVkIHx8IHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgfHwKICAgICAgICAgICAg
ICAgICAgICAgICAgc3JjLmdldFByZXZlbnREZWZhdWx0ICYmIHNyYy5nZXRQcmV2ZW50RGVmYXVs
dCgpKSA/IHJldHVyblRydWUgOiByZXR1cm5GYWxzZTsKCiAgICAgICAgLy8gRXZlbnQgdHlwZQog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzcmM7CiAgICAgICAg
fQoKICAgICAgICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhl
IGV2ZW50IG9iamVjdAogICAgICAgIGlmICggcHJvcHMgKSB7CiAgICAgICAgICAgICAgICBqUXVl
cnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOwogICAgICAgIH0KCiAgICAgICAgLy8gdGltZVN0YW1w
IGlzIGJ1Z2d5IGZvciBzb21lIGV2ZW50cyBvbiBGaXJlZm94KCMzODQzKQogICAgICAgIC8vIFNv
IHdlIHdvbid0IHJlbHkgb24gdGhlIG5hdGl2ZSB2YWx1ZQogICAgICAgIHRoaXMudGltZVN0YW1w
ID0galF1ZXJ5Lm5vdygpOwoKICAgICAgICAvLyBNYXJrIGl0IGFzIGZpeGVkCiAgICAgICAgdGhp
c1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7Cn07CgpmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsK
ICAgICAgICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKICAgICAgICBy
ZXR1cm4gdHJ1ZTsKfQoKLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFz
IHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nCi8vIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2Ny
aXB0LWJpbmRpbmcuaHRtbApqUXVlcnkuRXZlbnQucHJvdG90eXBlID0gewogICAgICAgIHByZXZl
bnREZWZhdWx0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJl
dmVudGVkID0gcmV0dXJuVHJ1ZTsKCiAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2lu
YWxFdmVudDsKICAgICAgICAgICAgICAgIGlmICggIWUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBpZiBwcmV2
ZW50RGVmYXVsdCBleGlzdHMgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAogICAgICAgICAg
ICAgICAgaWYgKCBlLnByZXZlbnREZWZhdWx0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBl
LnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCB0aGUg
cmV0dXJuVmFsdWUgcHJvcGVydHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIGZhbHNlIChJRSkK
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucmV0dXJu
VmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHN0b3BQ
cm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvcGFnYXRp
b25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKCiAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMub3Jp
Z2luYWxFdmVudDsKICAgICAgICAgICAgICAgIGlmICggIWUgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIGlmIHN0
b3BQcm9wYWdhdGlvbiBleGlzdHMgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAogICAgICAg
ICAgICAgICAgaWYgKCBlLnN0b3BQcm9wYWdhdGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IC8vIG90aGVyd2lzZSBzZXQgdGhlIGNhbmNlbEJ1YmJsZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2lu
YWwgZXZlbnQgdG8gdHJ1ZSAoSUUpCiAgICAgICAgICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRy
dWU7CiAgICAgICAgfSwKICAgICAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9
IHJldHVyblRydWU7CiAgICAgICAgICAgICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOwogICAg
ICAgIH0sCiAgICAgICAgaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSwKICAgICAgICBp
c1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsCiAgICAgICAgaXNJbW1lZGlhdGVQcm9w
YWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlCn07CgovLyBDaGVja3MgaWYgYW4gZXZlbnQgaGFw
cGVuZWQgb24gYW4gZWxlbWVudCB3aXRoaW4gYW5vdGhlciBlbGVtZW50Ci8vIFVzZWQgaW4galF1
ZXJ5LmV2ZW50LnNwZWNpYWwubW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBoYW5kbGVycwp2YXIg
d2l0aGluRWxlbWVudCA9IGZ1bmN0aW9uKCBldmVudCApIHsKCiAgICAgICAgLy8gQ2hlY2sgaWYg
bW91c2Uob3ZlcnxvdXQpIGFyZSBzdGlsbCB3aXRoaW4gdGhlIHNhbWUgcGFyZW50IGVsZW1lbnQK
ICAgICAgICB2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCiAgICAgICAgICAgICAg
ICBpbnNpZGUgPSBmYWxzZSwKICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGU7
CgogICAgICAgIGV2ZW50LnR5cGUgPSBldmVudC5kYXRhOwoKICAgICAgICBpZiAoIHJlbGF0ZWQg
IT09IHRoaXMgKSB7CgogICAgICAgICAgICAgICAgaWYgKCByZWxhdGVkICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBpbnNpZGUgPSBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHJlbGF0ZWQgKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICFpbnNpZGUgKSB7CgogICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5KCB0aGlzLCBhcmd1
bWVudHMgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBldmVudFR5cGU7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9LAoKLy8gSW4gY2FzZSBvZiBldmVudCBkZWxl
Z2F0aW9uLCB3ZSBvbmx5IG5lZWQgdG8gcmVuYW1lIHRoZSBldmVudC50eXBlLAovLyBsaXZlSGFu
ZGxlciB3aWxsIHRha2UgY2FyZSBvZiB0aGUgcmVzdC4KZGVsZWdhdGUgPSBmdW5jdGlvbiggZXZl
bnQgKSB7CiAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50LmRhdGE7CiAgICAgICAgalF1ZXJ5LmV2
ZW50LmhhbmRsZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Cn07CgovLyBDcmVhdGUgbW91c2Vl
bnRlciBhbmQgbW91c2VsZWF2ZSBldmVudHMKalF1ZXJ5LmVhY2goewogICAgICAgIG1vdXNlZW50
ZXI6ICJtb3VzZW92ZXIiLAogICAgICAgIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIKfSwgZnVuY3Rp
b24oIG9yaWcsIGZpeCApIHsKICAgICAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0g
ewogICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCBkYXRhICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCBmaXgsIGRhdGEgJiYgZGF0YS5zZWxl
Y3RvciA/IGRlbGVnYXRlIDogd2l0aGluRWxlbWVudCwgb3JpZyApOwogICAgICAgICAgICAgICAg
fSwKICAgICAgICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbiggZGF0YSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgZml4LCBkYXRhICYmIGRh
dGEuc2VsZWN0b3IgPyBkZWxlZ2F0ZSA6IHdpdGhpbkVsZW1lbnQgKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICB9Owp9KTsKCi8vIHN1Ym1pdCBkZWxlZ2F0aW9uCmlmICggIWpRdWVyeS5zdXBw
b3J0LnN1Ym1pdEJ1YmJsZXMgKSB7CgogICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLnN1Ym1p
dCA9IHsKICAgICAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiggZGF0YSwgbmFtZXNwYWNlcyAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAi
Zm9ybSIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
YWRkKHRoaXMsICJjbGljay5zcGVjaWFsU3VibWl0IiwgZnVuY3Rpb24oIGUgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdm9pZCB0cmlnZ2VyaW5nIGVycm9y
IG9uIG5vbi1leGlzdGVudCB0eXBlIGF0dHJpYnV0ZSBpbiBJRSBWTUwgKCM3MDcxKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBlLnRhcmdldCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGpRdWVy
eS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1
dHRvbiIgKSA/IGVsZW0udHlwZSA6ICIiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggKHR5cGUgPT09ICJzdWJtaXQiIHx8IHR5cGUgPT09ICJpbWFnZSIpICYm
IGpRdWVyeSggZWxlbSApLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGggKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoICJzdWJtaXQiLCB0aGlz
LCBhcmd1bWVudHMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCh0aGlzLCAia2V5cHJlc3Muc3BlY2lhbFN1Ym1p
dCIsIGZ1bmN0aW9uKCBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGVsZW0gPSBlLnRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApIHx8
IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSA/IGVsZW0udHlwZSA6ICIiOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKHR5cGUgPT09ICJ0ZXh0
IiB8fCB0eXBlID09PSAicGFzc3dvcmQiKSAmJiBqUXVlcnkoIGVsZW0gKS5jbG9zZXN0KCJmb3Jt
IikubGVuZ3RoICYmIGUua2V5Q29kZSA9PT0gMTMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoICJzdWJtaXQiLCB0aGlzLCBhcmd1bWVu
dHMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHRl
YXJkb3duOiBmdW5jdGlvbiggbmFtZXNwYWNlcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgIi5zcGVjaWFsU3VibWl0IiApOwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH07Cgp9CgovLyBjaGFuZ2UgZGVsZWdhdGlvbiwgaGFwcGVucyBoZXJl
IHNvIHdlIGhhdmUgYmluZC4KaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hhbmdlQnViYmxlcyApIHsK
CiAgICAgICAgdmFyIGNoYW5nZUZpbHRlcnMsCgogICAgICAgIGdldFZhbCA9IGZ1bmN0aW9uKCBl
bGVtICkgewogICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBqUXVlcnkubm9kZU5hbWUoIGVsZW0s
ICJpbnB1dCIgKSA/IGVsZW0udHlwZSA6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICB2YWwg
PSBlbGVtLnZhbHVlOwoKICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInJhZGlvIiB8fCB0
eXBlID09PSAiY2hlY2tib3giICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBlbGVt
LmNoZWNrZWQ7CgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gInNlbGVjdC1t
dWx0aXBsZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGVsZW0uc2VsZWN0ZWRJ
bmRleCA+IC0xID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFwKCBl
bGVtLm9wdGlvbnMsIGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uc2VsZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSkuam9pbigiLSIpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiIjsKCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0s
ICJzZWxlY3QiICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGVsZW0uc2VsZWN0
ZWRJbmRleDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdmFsOwog
ICAgICAgIH0sCgogICAgICAgIHRlc3RDaGFuZ2UgPSBmdW5jdGlvbiB0ZXN0Q2hhbmdlKCBlICkg
ewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBlLnRhcmdldCwgZGF0YSwgdmFsOwoKICAgICAg
ICAgICAgICAgIGlmICggIXJmb3JtRWxlbXMudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8IGVsZW0u
cmVhZE9ubHkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCAiX2NoYW5n
ZV9kYXRhIiApOwogICAgICAgICAgICAgICAgdmFsID0gZ2V0VmFsKGVsZW0pOwoKICAgICAgICAg
ICAgICAgIC8vIHRoZSBjdXJyZW50IGRhdGEgd2lsbCBiZSBhbHNvIHJldHJpZXZlZCBieSBiZWZv
cmVhY3RpdmF0ZQogICAgICAgICAgICAgICAgaWYgKCBlLnR5cGUgIT09ICJmb2N1c291dCIgfHwg
ZWxlbS50eXBlICE9PSAicmFkaW8iICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
X2RhdGEoIGVsZW0sICJfY2hhbmdlX2RhdGEiLCB2YWwgKTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IGRhdGEgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICBpZiAoIGRhdGEgIT0gbnVsbCB8fCB2YWwgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGUudHlwZSA9ICJjaGFuZ2UiOwogICAgICAgICAgICAgICAgICAgICAgICBlLmxpdmVG
aXJlZCA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRy
aWdnZXIoIGUsIGFyZ3VtZW50c1sxXSwgZWxlbSApOwogICAgICAgICAgICAgICAgfQogICAgICAg
IH07CgogICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLmNoYW5nZSA9IHsKICAgICAgICAgICAg
ICAgIGZpbHRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNvdXQ6IHRlc3RDaGFu
Z2UsCgogICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVkZWFjdGl2YXRlOiB0ZXN0Q2hhbmdl
LAoKICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCBlICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQsIHR5cGUgPSBqUXVl
cnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSA/IGVsZW0udHlwZSA6ICIiOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJyYWRpbyIgfHwgdHlwZSA9PT0g
ImNoZWNrYm94IiB8fCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJzZWxlY3QiICkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Q2hhbmdlLmNhbGwoIHRoaXMs
IGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgaGFzIHRvIGJlIGNh
bGxlZCBiZWZvcmUgc3VibWl0CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtleWRvd24gd2ls
bCBiZSBjYWxsZWQgYmVmb3JlIGtleXByZXNzLCB3aGljaCBpcyB1c2VkIGluIHN1Ym1pdC1ldmVu
dCBkZWxlZ2F0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uKCBl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQs
IHR5cGUgPSBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSA/IGVsZW0udHlwZSA6ICIi
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlLmtleUNvZGUgPT09IDEz
ICYmICFqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJ0ZXh0YXJlYSIgKSApIHx8CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5rZXlDb2RlID09PSAzMiAmJiAodHlwZSA9
PT0gImNoZWNrYm94IiB8fCB0eXBlID09PSAicmFkaW8iKSkgfHwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICJzZWxlY3QtbXVsdGlwbGUiICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENoYW5nZS5jYWxsKCB0aGlz
LCBlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVmb3JlYWN0aXZhdGUgaGFw
cGVucyBhbHNvIGJlZm9yZSB0aGUgcHJldmlvdXMgZWxlbWVudCBpcyBibHVycmVkCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHdpdGggdGhpcyBldmVudCB5b3UgY2FuJ3QgdHJpZ2dlciBhIGNo
YW5nZSBldmVudCwgYnV0IHlvdSBjYW4gc3RvcmUKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aW5mb3JtYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlYWN0aXZhdGU6IGZ1bmN0
aW9uKCBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZS50
YXJnZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVt
LCAiX2NoYW5nZV9kYXRhIiwgZ2V0VmFsKGVsZW0pICk7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCBk
YXRhLCBuYW1lc3BhY2VzICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMudHlw
ZSA9PT0gImZpbGUiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggdmFyIHR5cGUgaW4gY2hhbmdlRmlsdGVycyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlICsgIi5zcGVjaWFsQ2hhbmdl
IiwgY2hhbmdlRmlsdGVyc1t0eXBlXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1l
ICk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlv
biggbmFtZXNwYWNlcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJl
bW92ZSggdGhpcywgIi5zcGVjaWFsQ2hhbmdlIiApOwoKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJmb3JtRWxlbXMudGVzdCggdGhpcy5ub2RlTmFtZSApOwogICAgICAgICAgICAgICAg
fQogICAgICAgIH07CgogICAgICAgIGNoYW5nZUZpbHRlcnMgPSBqUXVlcnkuZXZlbnQuc3BlY2lh
bC5jaGFuZ2UuZmlsdGVyczsKCiAgICAgICAgLy8gSGFuZGxlIHdoZW4gdGhlIGlucHV0IGlzIC5m
b2N1cygpJ2QKICAgICAgICBjaGFuZ2VGaWx0ZXJzLmZvY3VzID0gY2hhbmdlRmlsdGVycy5iZWZv
cmVhY3RpdmF0ZTsKfQoKZnVuY3Rpb24gdHJpZ2dlciggdHlwZSwgZWxlbSwgYXJncyApIHsKICAg
ICAgICAvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVu
dCBvbmUuCiAgICAgICAgLy8gRmFrZSBvcmlnaW5hbEV2ZW50IHRvIGF2b2lkIGRvbm9yJ3Mgc3Rv
cFByb3BhZ2F0aW9uLCBidXQgaWYgdGhlCiAgICAgICAgLy8gc2ltdWxhdGVkIGV2ZW50IHByZXZl
bnRzIGRlZmF1bHQgdGhlbiB3ZSBkbyB0aGUgc2FtZSBvbiB0aGUgZG9ub3IuCiAgICAgICAgLy8g
RG9uJ3QgcGFzcyBhcmdzIG9yIHJlbWVtYmVyIGxpdmVGaXJlZDsgdGhleSBhcHBseSB0byB0aGUg
ZG9ub3IgZXZlbnQuCiAgICAgICAgdmFyIGV2ZW50ID0galF1ZXJ5LmV4dGVuZCgge30sIGFyZ3Nb
IDAgXSApOwogICAgICAgIGV2ZW50LnR5cGUgPSB0eXBlOwogICAgICAgIGV2ZW50Lm9yaWdpbmFs
RXZlbnQgPSB7fTsKICAgICAgICBldmVudC5saXZlRmlyZWQgPSB1bmRlZmluZWQ7CiAgICAgICAg
alF1ZXJ5LmV2ZW50LmhhbmRsZS5jYWxsKCBlbGVtLCBldmVudCApOwogICAgICAgIGlmICggZXZl
bnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7CiAgICAgICAgICAgICAgICBhcmdzWyAwIF0ucHJl
dmVudERlZmF1bHQoKTsKICAgICAgICB9Cn0KCi8vIENyZWF0ZSAiYnViYmxpbmciIGZvY3VzIGFu
ZCBibHVyIGV2ZW50cwppZiAoICFqUXVlcnkuc3VwcG9ydC5mb2N1c2luQnViYmxlcyApIHsKICAg
ICAgICBqUXVlcnkuZWFjaCh7IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6ICJmb2N1c291dCIgfSwg
ZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKCiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggYSBzaW5n
bGUgY2FwdHVyaW5nIGhhbmRsZXIgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0
CiAgICAgICAgICAgICAgICB2YXIgYXR0YWNoZXMgPSAwOwoKICAgICAgICAgICAgICAgIGpRdWVy
eS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXA6
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXR0YWNo
ZXMrKyA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICAgICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIC0tYXR0YWNoZXMgPT09IDAgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBv
cmlnLCBoYW5kbGVyLCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIGhhbmRsZXIoIGRvbm9yICkgewogICAgICAgICAgICAgICAgICAgICAgICAv
LyBEb25vciBldmVudCBpcyBhbHdheXMgYSBuYXRpdmUgb25lOyBmaXggaXQgYW5kIHN3aXRjaCBp
dHMgdHlwZS4KICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IGZvY3VzaW4vb3V0IGhhbmRs
ZXIgY2FuY2VsIHRoZSBkb25vciBmb2N1cy9ibHVyIGV2ZW50LgogICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgZSA9IGpRdWVyeS5ldmVudC5maXgoIGRvbm9yICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGUudHlwZSA9IGZpeDsKICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2
ZW50ID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCBl
LCBudWxsLCBlLnRhcmdldCApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGUuaXNEZWZh
dWx0UHJldmVudGVkKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9ub3Iu
cHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0pOwp9CgpqUXVlcnkuZWFjaChbImJpbmQiLCAib25lIl0sIGZ1bmN0aW9u
KCBpLCBuYW1lICkgewogICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHR5cGUs
IGRhdGEsIGZuICkgewogICAgICAgICAgICAgICAgdmFyIGhhbmRsZXI7CgogICAgICAgICAgICAg
ICAgLy8gSGFuZGxlIG9iamVjdCBsaXRlcmFscwogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Yg
dHlwZSA9PT0gIm9iamVjdCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBr
ZXkgaW4gdHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyBuYW1l
IF0oa2V5LCBkYXRhLCB0eXBlW2tleV0sIGZuKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgfHwgZGF0YSA9PT0gZmFs
c2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZGF0YTsKICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBpZiAoIG5hbWUgPT09ICJvbmUiICkgewogICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeSggdGhpcyApLnVuYmluZCggZXZlbnQsIGhhbmRsZXIgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmd1
aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7CiAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gZm47CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAidW5sb2FkIiAmJiBuYW1lICE9PSAib25lIiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmUoIHR5cGUsIGRhdGEsIGZuICk7Cgog
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpc1tpXSwgdHlwZSwgaGFuZGxlciwg
ZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfTsKfSk7CgpqUXVlcnkuZm4uZXh0ZW5k
KHsKICAgICAgICB1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlLCBmbiApIHsKICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSBvYmplY3QgbGl0ZXJhbHMKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHR5
cGUgPT09ICJvYmplY3QiICYmICF0eXBlLnByZXZlbnREZWZhdWx0ICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIga2V5IGluIHR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy51bmJpbmQoa2V5LCB0eXBlW2tleV0pOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpc1tpXSwg
dHlwZSwgZm4gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGRlbGVnYXRl
OiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHsKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmxpdmUoIHR5cGVzLCBkYXRhLCBmbiwgc2VsZWN0b3IgKTsKICAgICAgICB9
LAoKICAgICAgICB1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsK
ICAgICAgICAgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5iaW5kKCAibGl2ZSIgKTsKCiAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kaWUoIHR5
cGVzLCBudWxsLCBmbiwgc2VsZWN0b3IgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoK
ICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7CiAgICAgICAgICAgICAgICB9
KTsKICAgICAgICB9LAoKICAgICAgICB0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRh
dGEgKSB7CiAgICAgICAgICAgICAgICBpZiAoIHRoaXNbMF0gKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpc1swXSwg
dHJ1ZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHRvZ2dsZTogZnVu
Y3Rpb24oIGZuICkgewogICAgICAgICAgICAgICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gYXJndW1l
bnRzIGZvciBhY2Nlc3MgaW4gY2xvc3VyZQogICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1
bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5n
dWlkKyssCiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgICAg
ICAgICB0b2dnbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0VG9nZ2xlID0gKCBqUXVlcnkuZGF0YSgg
dGhpcywgImxhc3RUb2dnbGUiICsgZm4uZ3VpZCApIHx8IDAgKSAlIGk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1
aWQsIGxhc3RUb2dnbGUgKyAxICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGNsaWNrcyBzdG9wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYW5kIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGFyZ3NbIGxhc3RUb2dnbGUgXS5hcHBseSggdGhpcywgYXJndW1lbnRzICkg
fHwgZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8g
bGluayBhbGwgdGhlIGZ1bmN0aW9ucywgc28gYW55IG9mIHRoZW0gY2FuIHVuYmluZCB0aGlzIGNs
aWNrIGhhbmRsZXIKICAgICAgICAgICAgICAgIHRvZ2dsZXIuZ3VpZCA9IGd1aWQ7CiAgICAgICAg
ICAgICAgICB3aGlsZSAoIGkgPCBhcmdzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgYXJnc1sgaSsrIF0uZ3VpZCA9IGd1aWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuY2xpY2soIHRvZ2dsZXIgKTsKICAgICAgICB9LAoKICAgICAgICBo
b3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsK
ICAgICAgICB9Cn0pOwoKdmFyIGxpdmVNYXAgPSB7CiAgICAgICAgZm9jdXM6ICJmb2N1c2luIiwK
ICAgICAgICBibHVyOiAiZm9jdXNvdXQiLAogICAgICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIi
LAogICAgICAgIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIKfTsKCmpRdWVyeS5lYWNoKFsibGl2ZSIs
ICJkaWUiXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0g
PSBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuLCBvcmlnU2VsZWN0b3IgLyogSW50ZXJuYWwgVXNl
IE9ubHkgKi8gKSB7CiAgICAgICAgICAgICAgICB2YXIgdHlwZSwgaSA9IDAsIG1hdGNoLCBuYW1l
c3BhY2VzLCBwcmVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IG9yaWdT
ZWxlY3RvciB8fCB0aGlzLnNlbGVjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
ID0gb3JpZ1NlbGVjdG9yID8gdGhpcyA6IGpRdWVyeSggdGhpcy5jb250ZXh0ICk7CgogICAgICAg
ICAgICAgICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICYmICF0eXBlcy5wcmV2ZW50
RGVmYXVsdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiB0eXBl
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0WyBuYW1lIF0oIGtl
eSwgZGF0YSwgdHlwZXNba2V5XSwgc2VsZWN0b3IgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgaWYgKCBuYW1lID09PSAiZGllIiAmJiAhdHlwZXMgJiYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdTZWxlY3RvciAmJiBvcmlnU2Vs
ZWN0b3IuY2hhckF0KDApID09PSAiLiIgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnVuYmluZCggb3JpZ1NlbGVjdG9yICk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGRhdGEgPT09
IGZhbHNlIHx8IGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZuID0gZGF0YSB8fCByZXR1cm5GYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0eXBl
cyA9ICh0eXBlcyB8fCAiIikuc3BsaXQoIiAiKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoICh0
eXBlID0gdHlwZXNbIGkrKyBdKSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICBt
YXRjaCA9IHJuYW1lc3BhY2VzLmV4ZWMoIHR5cGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZXNwYWNlcyA9ICIiOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCApICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IG1hdGNoWzBdOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLnJlcGxhY2UoIHJuYW1l
c3BhY2VzLCAiIiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHR5cGUgPT09ICJob3ZlciIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZXMucHVzaCggIm1vdXNlZW50ZXIiICsgbmFtZXNwYWNlcywgIm1vdXNlbGVh
dmUiICsgbmFtZXNwYWNlcyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBw
cmVUeXBlID0gdHlwZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGl2ZU1hcFsgdHlw
ZSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goIGxpdmVN
YXBbIHR5cGUgXSArIG5hbWVzcGFjZXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gdHlwZSArIG5hbWVzcGFjZXM7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAobGl2ZU1hcFsgdHlw
ZSBdIHx8IHR5cGUpICsgbmFtZXNwYWNlczsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBuYW1lID09PSAibGl2ZSIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYmluZCBsaXZlIGhhbmRsZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGwgPSBjb250ZXh0Lmxlbmd0aDsgaiA8
IGw7IGorKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5ldmVudC5hZGQoIGNvbnRleHRbal0sICJsaXZlLiIgKyBsaXZlQ29udmVydCggdHlwZSwgc2Vs
ZWN0b3IgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyBkYXRhOiBkYXRhLCBzZWxlY3Rvcjogc2VsZWN0b3IsIGhhbmRsZXI6IGZuLCBvcmlnVHlwZTog
dHlwZSwgb3JpZ0hhbmRsZXI6IGZuLCBwcmVUeXBlOiBwcmVUeXBlIH0gKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuYmluZCBsaXZlIGhhbmRsZXIKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnVuYmluZCggImxpdmUuIiArIGxp
dmVDb252ZXJ0KCB0eXBlLCBzZWxlY3RvciApLCBmbiApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
ICAgfTsKfSk7CgpmdW5jdGlvbiBsaXZlSGFuZGxlciggZXZlbnQgKSB7CiAgICAgICAgdmFyIHN0
b3AsIG1heExldmVsLCByZWxhdGVkLCBtYXRjaCwgaGFuZGxlT2JqLCBlbGVtLCBqLCBpLCBsLCBk
YXRhLCBjbG9zZSwgbmFtZXNwYWNlLCByZXQsCiAgICAgICAgICAgICAgICBlbGVtcyA9IFtdLAog
ICAgICAgICAgICAgICAgc2VsZWN0b3JzID0gW10sCiAgICAgICAgICAgICAgICBldmVudHMgPSBq
UXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICk7CgogICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBh
dm9pZCBub24tbGVmdC1jbGljayBidWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSkgYW5kIGRpc2Fi
bGVkIGVsZW1lbnRzIGluIElFICgjNjkxMSkKICAgICAgICBpZiAoIGV2ZW50LmxpdmVGaXJlZCA9
PT0gdGhpcyB8fCAhZXZlbnRzIHx8ICFldmVudHMubGl2ZSB8fCBldmVudC50YXJnZXQuZGlzYWJs
ZWQgfHwgZXZlbnQuYnV0dG9uICYmIGV2ZW50LnR5cGUgPT09ICJjbGljayIgKSB7CiAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoIGV2ZW50Lm5hbWVzcGFjZSAp
IHsKICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IG5ldyBSZWdFeHAoIihefFxcLikiICsgZXZl
bnQubmFtZXNwYWNlLnNwbGl0KCIuIikuam9pbigiXFwuKD86LipcXC4pPyIpICsgIihcXC58JCki
KTsKICAgICAgICB9CgogICAgICAgIGV2ZW50LmxpdmVGaXJlZCA9IHRoaXM7CgogICAgICAgIHZh
ciBsaXZlID0gZXZlbnRzLmxpdmUuc2xpY2UoMCk7CgogICAgICAgIGZvciAoIGogPSAwOyBqIDwg
bGl2ZS5sZW5ndGg7IGorKyApIHsKICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGxpdmVbal07
CgogICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVPYmoub3JpZ1R5cGUucmVwbGFjZSggcm5hbWVz
cGFjZXMsICIiICkgPT09IGV2ZW50LnR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdG9ycy5wdXNoKCBoYW5kbGVPYmouc2VsZWN0b3IgKTsKCiAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICBsaXZlLnNwbGljZSggai0tLCAxICk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBtYXRjaCA9IGpRdWVyeSggZXZlbnQudGFy
Z2V0ICkuY2xvc2VzdCggc2VsZWN0b3JzLCBldmVudC5jdXJyZW50VGFyZ2V0ICk7CgogICAgICAg
IGZvciAoIGkgPSAwLCBsID0gbWF0Y2gubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAg
ICAgICAgY2xvc2UgPSBtYXRjaFtpXTsKCiAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8
IGxpdmUubGVuZ3RoOyBqKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9
IGxpdmVbal07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNsb3NlLnNlbGVjdG9yID09
PSBoYW5kbGVPYmouc2VsZWN0b3IgJiYgKCFuYW1lc3BhY2UgfHwgbmFtZXNwYWNlLnRlc3QoIGhh
bmRsZU9iai5uYW1lc3BhY2UgKSkgJiYgIWNsb3NlLmVsZW0uZGlzYWJsZWQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNsb3NlLmVsZW07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVsYXRlZCA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRob3NlIHR3byBldmVudHMgcmVxdWlyZSBhZGRpdGlvbmFsIGNoZWNraW5n
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVPYmoucHJlVHlwZSA9
PT0gIm1vdXNlZW50ZXIiIHx8IGhhbmRsZU9iai5wcmVUeXBlID09PSAibW91c2VsZWF2ZSIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50eXBlID0gaGFu
ZGxlT2JqLnByZVR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWxhdGVkID0galF1ZXJ5KCBldmVudC5yZWxhdGVkVGFyZ2V0ICkuY2xvc2VzdCggaGFuZGxlT2Jq
LnNlbGVjdG9yIClbMF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTWFrZSBzdXJlIG5vdCB0byBhY2NpZGVudGFsbHkgbWF0Y2ggYSBjaGlsZCBlbGVtZW50IHdp
dGggdGhlIHNhbWUgc2VsZWN0b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcmVsYXRlZCAmJiBqUXVlcnkuY29udGFpbnMoIGVsZW0sIHJlbGF0ZWQgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCA9
IGVsZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFyZWxhdGVkIHx8IHJlbGF0ZWQgIT09IGVsZW0gKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtcy5wdXNoKHsgZWxlbTogZWxlbSwgaGFuZGxlT2Jq
OiBoYW5kbGVPYmosIGxldmVsOiBjbG9zZS5sZXZlbCB9KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICB9CgogICAgICAgIGZvciAoIGkgPSAwLCBsID0gZWxlbXMubGVuZ3RoOyBpIDwgbDsg
aSsrICkgewogICAgICAgICAgICAgICAgbWF0Y2ggPSBlbGVtc1tpXTsKCiAgICAgICAgICAgICAg
ICBpZiAoIG1heExldmVsICYmIG1hdGNoLmxldmVsID4gbWF4TGV2ZWwgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGV2
ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaC5lbGVtOwogICAgICAgICAgICAgICAgZXZlbnQuZGF0
YSA9IG1hdGNoLmhhbmRsZU9iai5kYXRhOwogICAgICAgICAgICAgICAgZXZlbnQuaGFuZGxlT2Jq
ID0gbWF0Y2guaGFuZGxlT2JqOwoKICAgICAgICAgICAgICAgIHJldCA9IG1hdGNoLmhhbmRsZU9i
ai5vcmlnSGFuZGxlci5hcHBseSggbWF0Y2guZWxlbSwgYXJndW1lbnRzICk7CgogICAgICAgICAg
ICAgICAgaWYgKCByZXQgPT09IGZhbHNlIHx8IGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heExldmVsID0gbWF0Y2gubGV2ZWw7CgogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHJldCA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RvcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlv
blN0b3BwZWQoKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAg
ICAgcmV0dXJuIHN0b3A7Cn0KCmZ1bmN0aW9uIGxpdmVDb252ZXJ0KCB0eXBlLCBzZWxlY3RvciAp
IHsKICAgICAgICByZXR1cm4gKHR5cGUgJiYgdHlwZSAhPT0gIioiID8gdHlwZSArICIuIiA6ICIi
KSArIHNlbGVjdG9yLnJlcGxhY2UocnBlcmlvZCwgImAiKS5yZXBsYWNlKHJzcGFjZXMsICImIik7
Cn0KCmpRdWVyeS5lYWNoKCAoImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6
ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrICIgKwogICAgICAgICJtb3VzZWRvd24gbW91
c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAi
ICsKICAgICAgICAiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBl
cnJvciIpLnNwbGl0KCIgIiksIGZ1bmN0aW9uKCBpLCBuYW1lICkgewoKICAgICAgICAvLyBIYW5k
bGUgZXZlbnQgYmluZGluZwogICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRh
dGEsIGZuICkgewogICAgICAgICAgICAgICAgaWYgKCBmbiA9PSBudWxsICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBmbiA9IGRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBu
dWxsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMu
bGVuZ3RoID4gMCA/CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZCggbmFtZSwgZGF0
YSwgZm4gKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlciggbmFtZSApOwog
ICAgICAgIH07CgogICAgICAgIGlmICggalF1ZXJ5LmF0dHJGbiApIHsKICAgICAgICAgICAgICAg
IGpRdWVyeS5hdHRyRm5bIG5hbWUgXSA9IHRydWU7CiAgICAgICAgfQp9KTsKCgoKLyohCiAqIFNp
enpsZSBDU1MgU2VsZWN0b3IgRW5naW5lCiAqICBDb3B5cmlnaHQgMjAxMSwgVGhlIERvam8gRm91
bmRhdGlvbgogKiAgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2Vz
LgogKiAgTW9yZSBpbmZvcm1hdGlvbjogaHR0cDovL3NpenpsZWpzLmNvbS8KICovCihmdW5jdGlv
bigpewoKdmFyIGNodW5rZXIgPSAvKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86
XFtbXlxbXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteXFtcXSciXSspK1xdfFxcLnxbXiA+K34sKFxb
XFxdKykrfFs+K35dKShccyosXHMqKT8oKD86LnxccnxcbikqKS9nLAogICAgICAgIGRvbmUgPSAw
LAogICAgICAgIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKICAgICAgICBo
YXNEdXBsaWNhdGUgPSBmYWxzZSwKICAgICAgICBiYXNlSGFzRHVwbGljYXRlID0gdHJ1ZSwKICAg
ICAgICByQmFja3NsYXNoID0gL1xcL2csCiAgICAgICAgck5vbldvcmQgPSAvXFcvOwoKLy8gSGVy
ZSB3ZSBjaGVjayBpZiB0aGUgSmF2YVNjcmlwdCBlbmdpbmUgaXMgdXNpbmcgc29tZSBzb3J0IG9m
Ci8vIG9wdGltaXphdGlvbiB3aGVyZSBpdCBkb2VzIG5vdCBhbHdheXMgY2FsbCBvdXIgY29tcGFy
aXNpb24KLy8gZnVuY3Rpb24uIElmIHRoYXQgaXMgdGhlIGNhc2UsIGRpc2NhcmQgdGhlIGhhc0R1
cGxpY2F0ZSB2YWx1ZS4KLy8gICBUaHVzIGZhciB0aGF0IGluY2x1ZGVzIEdvb2dsZSBDaHJvbWUu
ClswLCAwXS5zb3J0KGZ1bmN0aW9uKCkgewogICAgICAgIGJhc2VIYXNEdXBsaWNhdGUgPSBmYWxz
ZTsKICAgICAgICByZXR1cm4gMDsKfSk7Cgp2YXIgU2l6emxlID0gZnVuY3Rpb24oIHNlbGVjdG9y
LCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgewogICAgICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8
IFtdOwogICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwoKICAgICAgICB2YXIg
b3JpZ0NvbnRleHQgPSBjb250ZXh0OwoKICAgICAgICBpZiAoIGNvbnRleHQubm9kZVR5cGUgIT09
IDEgJiYgY29udGV4dC5ub2RlVHlwZSAhPT0gOSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBb
XTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCAhc2VsZWN0b3IgfHwgdHlwZW9mIHNl
bGVjdG9yICE9PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwog
ICAgICAgIH0KCiAgICAgICAgdmFyIG0sIHNldCwgY2hlY2tTZXQsIGV4dHJhLCByZXQsIGN1ciwg
cG9wLCBpLAogICAgICAgICAgICAgICAgcHJ1bmUgPSB0cnVlLAogICAgICAgICAgICAgICAgY29u
dGV4dFhNTCA9IFNpenpsZS5pc1hNTCggY29udGV4dCApLAogICAgICAgICAgICAgICAgcGFydHMg
PSBbXSwKICAgICAgICAgICAgICAgIHNvRmFyID0gc2VsZWN0b3I7CiAgICAgICAgCiAgICAgICAg
Ly8gUmVzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjaHVua2VyIHJlZ2V4cCAoc3RhcnQgZnJvbSBo
ZWFkKQogICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGNodW5rZXIuZXhlYyggIiIgKTsKICAg
ICAgICAgICAgICAgIG0gPSBjaHVua2VyLmV4ZWMoIHNvRmFyICk7CgogICAgICAgICAgICAgICAg
aWYgKCBtICkgewogICAgICAgICAgICAgICAgICAgICAgICBzb0ZhciA9IG1bM107CiAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCggbVsxXSApOwogICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbVsyXSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IG1bM107CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9IHdoaWxlICggbSApOwoKICAgICAgICBpZiAoIHBhcnRzLmxlbmd0
aCA+IDEgJiYgb3JpZ1BPUy5leGVjKCBzZWxlY3RvciApICkgewoKICAgICAgICAgICAgICAgIGlm
ICggcGFydHMubGVuZ3RoID09PSAyICYmIEV4cHIucmVsYXRpdmVbIHBhcnRzWzBdIF0gKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHNldCA9IHBvc1Byb2Nlc3MoIHBhcnRzWzBdICsgcGFydHNb
MV0sIGNvbnRleHQgKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICBzZXQgPSBFeHByLnJlbGF0aXZlWyBwYXJ0c1swXSBdID8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbIGNvbnRleHQgXSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2l6emxlKCBwYXJ0cy5zaGlmdCgpLCBjb250ZXh0ICk7CgogICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoIHBhcnRzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxlY3RvciA9IHBhcnRzLnNoaWZ0KCk7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggRXhwci5yZWxhdGl2ZVsgc2VsZWN0b3IgXSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yICs9IHBhcnRzLnNoaWZ0KCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IHBvc1Byb2Nlc3Mo
IHNlbGVjdG9yLCBzZXQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gVGFrZSBhIHNob3J0Y3V0
IGFuZCBzZXQgdGhlIGNvbnRleHQgaWYgdGhlIHJvb3Qgc2VsZWN0b3IgaXMgYW4gSUQKICAgICAg
ICAgICAgICAgIC8vIChidXQgbm90IGlmIGl0J2xsIGJlIGZhc3RlciBpZiB0aGUgaW5uZXIgc2Vs
ZWN0b3IgaXMgYW4gSUQpCiAgICAgICAgICAgICAgICBpZiAoICFzZWVkICYmIHBhcnRzLmxlbmd0
aCA+IDEgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiAhY29udGV4dFhNTCAmJgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHIubWF0Y2guSUQudGVzdChwYXJ0c1swXSkgJiYg
IUV4cHIubWF0Y2guSUQudGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSkgKSB7CgogICAgICAg
ICAgICAgICAgICAgICAgICByZXQgPSBTaXp6bGUuZmluZCggcGFydHMuc2hpZnQoKSwgY29udGV4
dCwgY29udGV4dFhNTCApOwogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gcmV0LmV4
cHIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5maWx0ZXIoIHJldC5l
eHByLCByZXQuc2V0IClbMF0gOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5z
ZXRbMF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0ICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzZWVkID8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7IGV4cHI6IHBhcnRzLnBvcCgpLCBzZXQ6IG1ha2VBcnJheShzZWVkKSB9
IDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZmluZCggcGFydHMucG9w
KCksIHBhcnRzLmxlbmd0aCA9PT0gMSAmJiAocGFydHNbMF0gPT09ICJ+IiB8fCBwYXJ0c1swXSA9
PT0gIisiKSAmJiBjb250ZXh0LnBhcmVudE5vZGUgPyBjb250ZXh0LnBhcmVudE5vZGUgOiBjb250
ZXh0LCBjb250ZXh0WE1MICk7CgogICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSByZXQuZXhw
ciA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcmV0LmV4
cHIsIHJldC5zZXQgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNldDsK
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFydHMubGVuZ3RoID4gMCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldCA9IG1ha2VBcnJheSggc2V0ICk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBydW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlICggcGFydHMubGVuZ3RoICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1ciA9IHBhcnRzLnBvcCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvcCA9IGN1cjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhRXhwci5yZWxhdGl2ZVsgY3VyIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdXIgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0gcGFydHMu
cG9wKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHBvcCA9PSBudWxsICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9wID0gY29udGV4dDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHIucmVsYXRp
dmVbIGN1ciBdKCBjaGVja1NldCwgcG9wLCBjb250ZXh0WE1MICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja1NldCA9IHBhcnRzID0gW107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgICBpZiAoICFjaGVja1NldCApIHsKICAgICAgICAgICAgICAgIGNoZWNrU2V0ID0gc2V0Owog
ICAgICAgIH0KCiAgICAgICAgaWYgKCAhY2hlY2tTZXQgKSB7CiAgICAgICAgICAgICAgICBTaXp6
bGUuZXJyb3IoIGN1ciB8fCBzZWxlY3RvciApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCB0b1N0
cmluZy5jYWxsKGNoZWNrU2V0KSA9PT0gIltvYmplY3QgQXJyYXldIiApIHsKICAgICAgICAgICAg
ICAgIGlmICggIXBydW5lICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gu
YXBwbHkoIHJlc3VsdHMsIGNoZWNrU2V0ICk7CgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBpID0gMDsgY2hlY2tTZXRbaV0gIT0gbnVsbDsgaSsrICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggY2hlY2tTZXRbaV0gJiYgKGNoZWNrU2V0W2ldID09
PSB0cnVlIHx8IGNoZWNrU2V0W2ldLm5vZGVUeXBlID09PSAxICYmIFNpenpsZS5jb250YWlucyhj
b250ZXh0LCBjaGVja1NldFtpXSkpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0cy5wdXNoKCBzZXRbaV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgY2hlY2tTZXRbaV0gIT0g
bnVsbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2hlY2tT
ZXRbaV0gJiYgY2hlY2tTZXRbaV0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIHNldFtpXSApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbWFrZUFycmF5KCBj
aGVja1NldCwgcmVzdWx0cyApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCBleHRyYSApIHsKICAg
ICAgICAgICAgICAgIFNpenpsZSggZXh0cmEsIG9yaWdDb250ZXh0LCByZXN1bHRzLCBzZWVkICk7
CiAgICAgICAgICAgICAgICBTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApOwogICAgICAgIH0K
CiAgICAgICAgcmV0dXJuIHJlc3VsdHM7Cn07CgpTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9u
KCByZXN1bHRzICkgewogICAgICAgIGlmICggc29ydE9yZGVyICkgewogICAgICAgICAgICAgICAg
aGFzRHVwbGljYXRlID0gYmFzZUhhc0R1cGxpY2F0ZTsKICAgICAgICAgICAgICAgIHJlc3VsdHMu
c29ydCggc29ydE9yZGVyICk7CgogICAgICAgICAgICAgICAgaWYgKCBoYXNEdXBsaWNhdGUgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMTsgaSA8IHJlc3VsdHMubGVu
Z3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHRz
W2ldID09PSByZXN1bHRzWyBpIC0gMSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0cy5zcGxpY2UoIGktLSwgMSApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3VsdHM7Cn07CgpTaXp6bGUubWF0Y2hlcyA9
IGZ1bmN0aW9uKCBleHByLCBzZXQgKSB7CiAgICAgICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVs
bCwgbnVsbCwgc2V0ICk7Cn07CgpTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIG5v
ZGUsIGV4cHIgKSB7CiAgICAgICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgW25v
ZGVdICkubGVuZ3RoID4gMDsKfTsKClNpenpsZS5maW5kID0gZnVuY3Rpb24oIGV4cHIsIGNvbnRl
eHQsIGlzWE1MICkgewogICAgICAgIHZhciBzZXQ7CgogICAgICAgIGlmICggIWV4cHIgKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQoKICAgICAgICBmb3IgKCB2YXIgaSA9
IDAsIGwgPSBFeHByLm9yZGVyLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAg
IHZhciBtYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEV4cHIub3JkZXJbaV07
CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICggKG1hdGNoID0gRXhwci5sZWZ0
TWF0Y2hbIHR5cGUgXS5leGVjKCBleHByICkpICkgewogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbGVmdCA9IG1hdGNoWzFdOwogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC5zcGxpY2Uo
IDEsIDEgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGVmdC5zdWJzdHIoIGxlZnQu
bGVuZ3RoIC0gMSApICE9PSAiXFwiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoWzFdID0gKG1hdGNoWzFdIHx8ICIiKS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IEV4cHIuZmluZFsgdHlwZSBdKCBt
YXRjaCwgY29udGV4dCwgaXNYTUwgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBzZXQgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cHIgPSBleHByLnJlcGxhY2UoIEV4cHIubWF0Y2hbIHR5cGUgXSwgIiIgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAhc2V0ICkgewogICAgICAgICAgICAgICAgc2V0
ID0gdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiID8K
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioi
ICkgOgogICAgICAgICAgICAgICAgICAgICAgICBbXTsKICAgICAgICB9CgogICAgICAgIHJldHVy
biB7IHNldDogc2V0LCBleHByOiBleHByIH07Cn07CgpTaXp6bGUuZmlsdGVyID0gZnVuY3Rpb24o
IGV4cHIsIHNldCwgaW5wbGFjZSwgbm90ICkgewogICAgICAgIHZhciBtYXRjaCwgYW55Rm91bmQs
CiAgICAgICAgICAgICAgICBvbGQgPSBleHByLAogICAgICAgICAgICAgICAgcmVzdWx0ID0gW10s
CiAgICAgICAgICAgICAgICBjdXJMb29wID0gc2V0LAogICAgICAgICAgICAgICAgaXNYTUxGaWx0
ZXIgPSBzZXQgJiYgc2V0WzBdICYmIFNpenpsZS5pc1hNTCggc2V0WzBdICk7CgogICAgICAgIHdo
aWxlICggZXhwciAmJiBzZXQubGVuZ3RoICkgewogICAgICAgICAgICAgICAgZm9yICggdmFyIHR5
cGUgaW4gRXhwci5maWx0ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKG1hdGNo
ID0gRXhwci5sZWZ0TWF0Y2hbIHR5cGUgXS5leGVjKCBleHByICkpICE9IG51bGwgJiYgbWF0Y2hb
Ml0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kLCBpdGVtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gRXhwci5maWx0
ZXJbIHR5cGUgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQg
PSBtYXRjaFsxXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55Rm91bmQgPSBm
YWxzZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2guc3BsaWNlKDEsMSk7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGVmdC5zdWJzdHIoIGxlZnQu
bGVuZ3RoIC0gMSApID09PSAiXFwiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ckxvb3AgPT09IHJlc3VsdCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBFeHByLnByZUZpbHRlclsgdHlwZSBdICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBFeHByLnByZUZpbHRlclsgdHlwZSBdKCBtYXRj
aCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MRmlsdGVyICk7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2ggKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueUZvdW5kID0gZm91bmQg
PSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIG1hdGNoID09PSB0cnVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IChpdGVtID0gY3VyTG9vcFtpXSkgIT0g
bnVsbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGl0ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSBmaWx0ZXIoIGl0ZW0sIG1hdGNoLCBpLCBjdXJMb29w
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHBhc3MgPSBub3QgXiAhIWZvdW5kOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlucGxhY2UgJiYgZm91bmQgIT0gbnVs
bCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcGFzcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55Rm91bmQgPSB0cnVl
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxvb3BbaV0gPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggcGFzcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCBpdGVtICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhbnlGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGZvdW5kICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpbnBsYWNlICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJMb29wID0gcmVzdWx0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoIEV4cHIubWF0Y2hbIHR5cGUg
XSwgIiIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFh
bnlGb3VuZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEltcHJvcGVyIGV4cHJlc3Npb24KICAgICAg
ICAgICAgICAgIGlmICggZXhwciA9PT0gb2xkICkgewogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGFueUZvdW5kID09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2l6emxlLmVycm9yKCBleHByICk7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgb2xkID0gZXhwcjsKICAg
ICAgICB9CgogICAgICAgIHJldHVybiBjdXJMb29wOwp9OwoKU2l6emxlLmVycm9yID0gZnVuY3Rp
b24oIG1zZyApIHsKICAgICAgICB0aHJvdyAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhw
cmVzc2lvbjogIiArIG1zZzsKfTsKCnZhciBFeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHsKICAg
ICAgICBvcmRlcjogWyAiSUQiLCAiTkFNRSIsICJUQUciIF0sCgogICAgICAgIG1hdGNoOiB7CiAg
ICAgICAgICAgICAgICBJRDogLyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLAogICAg
ICAgICAgICAgICAgQ0xBU1M6IC9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sCiAg
ICAgICAgICAgICAgICBOQU1FOiAvXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18
XFwuKSspWyciXSpcXS8sCiAgICAgICAgICAgICAgICBBVFRSOiAvXFtccyooKD86W1x3XHUwMGMw
LVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltc
d1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLywKICAgICAgICAgICAgICAgIFRBRzog
L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sCiAgICAgICAgICAgICAgICBDSElM
RDogLzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wt
XT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sCiAgICAg
ICAgICAgICAgICBQT1M6IC86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/Olwo
KFxkKilcKSk/KD89W15cLV18JCkvLAogICAgICAgICAgICAgICAgUFNFVURPOiAvOigoPzpbXHdc
dTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0q
KSspXDJcKSk/LwogICAgICAgIH0sCgogICAgICAgIGxlZnRNYXRjaDoge30sCgogICAgICAgIGF0
dHJNYXA6IHsKICAgICAgICAgICAgICAgICJjbGFzcyI6ICJjbGFzc05hbWUiLAogICAgICAgICAg
ICAgICAgImZvciI6ICJodG1sRm9yIgogICAgICAgIH0sCgogICAgICAgIGF0dHJIYW5kbGU6IHsK
ICAgICAgICAgICAgICAgIGhyZWY6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoICJocmVmIiApOwogICAgICAgICAgICAg
ICAgfSwKICAgICAgICAgICAgICAgIHR5cGU6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoICJ0eXBlIiApOwogICAgICAg
ICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHJlbGF0aXZlOiB7CiAgICAgICAgICAgICAg
ICAiKyI6IGZ1bmN0aW9uKGNoZWNrU2V0LCBwYXJ0KXsKICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGlzUGFydFN0ciA9IHR5cGVvZiBwYXJ0ID09PSAic3RyaW5nIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpc1RhZyA9IGlzUGFydFN0ciAmJiAhck5vbldvcmQudGVzdCggcGFy
dCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGFydFN0ck5vdFRhZyA9IGlz
UGFydFN0ciAmJiAhaXNUYWc7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzVGFnICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnRvTG93ZXJDYXNl
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbCA9IGNoZWNrU2V0Lmxlbmd0aCwgZWxlbTsgaSA8IGw7IGkrKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gY2hlY2tTZXRbaV0p
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxl
bSA9IGVsZW0ucHJldmlvdXNTaWJsaW5nKSAmJiBlbGVtLm5vZGVUeXBlICE9PSAxICkge30KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IGlzUGFy
dFN0ck5vdFRhZyB8fCBlbGVtICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGFy
dCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0g
fHwgZmFsc2UgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtID09PSBwYXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1BhcnRT
dHJOb3RUYWcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmZpbHRl
ciggcGFydCwgY2hlY2tTZXQsIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAiPiI6IGZ1bmN0aW9uKCBjaGVja1NldCwg
cGFydCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXNQYXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGwgPSBjaGVja1NldC5sZW5ndGg7CgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGlzUGFydFN0ciAmJiAhck5vbldvcmQudGVzdCggcGFydCApICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnRvTG93ZXJDYXNlKCk7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBjaGVja1NldFtpXTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVt
LnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoZWNrU2V0W2ldID0gcGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHBhcnQg
PyBwYXJlbnQgOiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8
IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0g
PSBjaGVja1NldFtpXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoZWNrU2V0W2ldID0gaXNQYXJ0U3RyID8KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUgOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50
Tm9kZSA9PT0gcGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggaXNQYXJ0U3RyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcGFydCwgY2hlY2tTZXQsIHRydWUgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIiI6IGZ1bmN0aW9uKGNoZWNrU2V0LCBw
YXJ0LCBpc1hNTCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlQ2hlY2ssCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZU5hbWUgPSBkb25lKyssCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tGbiA9IGRpckNoZWNrOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB0eXBlb2YgcGFydCA9PT0gInN0cmluZyIgJiYgIXJOb25Xb3JkLnRlc3Qo
IHBhcnQgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC50
b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVDaGVjayA9
IHBhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGbiA9IGRpck5vZGVD
aGVjazsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
Y2hlY2tGbiggInBhcmVudE5vZGUiLCBwYXJ0LCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVj
aywgaXNYTUwgKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIn4iOiBmdW5j
dGlvbiggY2hlY2tTZXQsIHBhcnQsIGlzWE1MICkgewogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbm9kZUNoZWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVOYW1lID0g
ZG9uZSsrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm4gPSBkaXJDaGVj
azsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHBhcnQgPT09ICJzdHJpbmci
ICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlQ2hlY2sgPSBwYXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrRm4oICJwcmV2aW91c1NpYmxpbmciLCBwYXJ0LCBkb25l
TmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywgaXNYTUwgKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9LAoKICAgICAgICBmaW5kOiB7CiAgICAgICAgICAgICAgICBJRDogZnVuY3Rpb24oIG1h
dGNoLCBjb250ZXh0LCBpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBl
b2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50
QnlJZChtYXRjaFsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sg
cGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhl
IGRvY3VtZW50ICM2OTYzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0g
JiYgbS5wYXJlbnROb2RlID8gW21dIDogW107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgTkFNRTogZnVuY3Rpb24oIG1hdGNoLCBj
b250ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0Lmdl
dEVsZW1lbnRzQnlOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcmV0ID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggbWF0Y2hbMV0gKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gcmVz
dWx0cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHJlc3VsdHNbaV0uZ2V0QXR0cmlidXRlKCJuYW1lIikgPT09IG1hdGNo
WzFdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXQucHVzaCggcmVzdWx0c1tpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldC5sZW5ndGggPT09IDAgPyBudWxsIDogcmV0Owog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAg
ICAgIFRBRzogZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZp
bmVkIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSggbWF0Y2hbMV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcHJlRmlsdGVyOiB7CiAgICAg
ICAgICAgICAgICBDTEFTUzogZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1
bHQsIG5vdCwgaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gIiAiICsg
bWF0Y2hbMV0ucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKSArICIgIjsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1hdGNoOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gY3VyTG9vcFtpXSkgIT0gbnVs
bDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm90IF4gKGVsZW0u
Y2xhc3NOYW1lICYmICgiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSgvW1x0XG5c
cl0vZywgIiAiKS5pbmRleE9mKG1hdGNoKSA+PSAwKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaW5wbGFjZSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgg
ZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaW5w
bGFjZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyTG9vcFtpXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgfSwKCiAgICAgICAgICAgICAgICBJRDogZnVuY3Rpb24oIG1hdGNoICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV0ucmVwbGFjZSggckJhY2tzbGFzaCwgIiIg
KTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgVEFHOiBmdW5jdGlvbiggbWF0
Y2gsIGN1ckxvb3AgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXS5y
ZXBsYWNlKCByQmFja3NsYXNoLCAiIiApLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICB9
LAoKICAgICAgICAgICAgICAgIENISUxEOiBmdW5jdGlvbiggbWF0Y2ggKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggbWF0Y2hbMV0gPT09ICJudGgiICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIW1hdGNoWzJdICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hbMl0gPSBtYXRjaFsyXS5yZXBsYWNlKC9eXCt8XHMqL2csICcnKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcGFyc2UgZXF1YXRpb25zIGxpa2UgJ2V2ZW4nLCAnb2RkJywg
JzUnLCAnMm4nLCAnM24rMicsICc0bi0xJywgJy1uKzYnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHRlc3QgPSAvKC0/KShcZCopKD86bihbK1wtXT9cZCopKT8vLmV4ZWMoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9PT0gImV2ZW4i
ICYmICIybiIgfHwgbWF0Y2hbMl0gPT09ICJvZGQiICYmICIybisxIiB8fAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIS9cRC8udGVzdCggbWF0Y2hbMl0gKSAmJiAiMG4r
IiArIG1hdGNoWzJdIHx8IG1hdGNoWzJdKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gY2FsY3VsYXRlIHRoZSBudW1iZXJzIChmaXJzdCluKyhsYXN0KSBpbmNsdWRpbmcgaWYg
dGhleSBhcmUgbmVnYXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsy
XSA9ICh0ZXN0WzFdICsgKHRlc3RbMl0gfHwgMSkpIC0gMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaFszXSA9IHRlc3RbM10gLSAwOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE1v
dmUgdG8gbm9ybWFsIGNhY2hpbmcgc3lzdGVtCiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
WzBdID0gZG9uZSsrOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAg
ICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBBVFRSOiBmdW5jdGlvbiggbWF0Y2gsIGN1
ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIG5hbWUgPSBtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNrc2xhc2gs
ICIiICk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFpc1hNTCAmJiBFeHByLmF0dHJNYXBbbmFtZV0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hbMV0gPSBFeHByLmF0dHJNYXBbbmFtZV07CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBpZiBhbiB1bi1x
dW90ZWQgdmFsdWUgd2FzIHVzZWQKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbNF0gPSAo
IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIiICkucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbMl0gPT09ICJ+PSIgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbNF0gPSAiICIgKyBtYXRjaFs0XSArICIg
IjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBQU0VVRE86IGZ1
bmN0aW9uKCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbMV0gPT09ICJub3QiICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNvbXBsZXggZXhw
cmVzc2lvbiwgb3IgYSBzaW1wbGUgb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAoIGNodW5rZXIuZXhlYyhtYXRjaFszXSkgfHwgIiIgKS5sZW5ndGggPiAxIHx8IC9eXHcv
LnRlc3QobWF0Y2hbM10pICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hbM10gPSBTaXp6bGUobWF0Y2hbM10sIG51bGwsIG51bGwsIGN1ckxvb3ApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IFNpenpsZS5maWx0ZXIobWF0Y2hbM10sIGN1
ckxvb3AsIGlucGxhY2UsIHRydWUgXiBub3QpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWlucGxhY2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoLmFwcGx5KCByZXN1bHQsIHJldCApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBFeHBy
Lm1hdGNoLlBPUy50ZXN0KCBtYXRjaFswXSApIHx8IEV4cHIubWF0Y2guQ0hJTEQudGVzdCggbWF0
Y2hbMF0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgICAgICAgICAgfSwKCiAgICAg
ICAgICAgICAgICBQT1M6IGZ1bmN0aW9uKCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2gudW5zaGlmdCggdHJ1ZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1hdGNoOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgZmls
dGVyczogewogICAgICAgICAgICAgICAgZW5hYmxlZDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSAmJiBlbGVt
LnR5cGUgIT09ICJoaWRkZW4iOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBk
aXNhYmxlZDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtLmRpc2FibGVkID09PSB0cnVlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICBjaGVja2VkOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW0uY2hlY2tlZCA9PT0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmdW5jdGlvbiggZWxlbSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2Vs
ZWN0ZWQtYnktZGVmYXVsdAogICAgICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zIGluIFNh
ZmFyaSB3b3JrIHByb3Blcmx5CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5wYXJl
bnROb2RlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9k
ZS5zZWxlY3RlZEluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5zZWxlY3RlZCA9
PT0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgcGFyZW50OiBmdW5j
dGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhZWxlbS5maXJz
dENoaWxkOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBlbXB0eTogZnVuY3Rp
b24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhZWxlbS5maXJzdENo
aWxkOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uKCBl
bGVtLCBpLCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhU2l6emxl
KCBtYXRjaFszXSwgZWxlbSApLmxlbmd0aDsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAg
ICAgICAgaGVhZGVyOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICgvaFxkL2kpLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKICAgICAgICAgICAgICAgIH0s
CgogICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoICJ0eXBlIiApLCB0eXBlID0g
ZWxlbS50eXBlOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTYgYW5kIDcgd2lsbCBtYXAg
ZWxlbS50eXBlIHRvICd0ZXh0JyBmb3IgbmV3IEhUTUw1IHR5cGVzIChzZWFyY2gsIGV0YykgCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBnZXRBdHRyaWJ1dGUgaW5zdGVhZCB0byB0ZXN0
IHRoaXMgY2FzZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmICJ0ZXh0IiA9PT0gdHlwZSAmJiAoIGF0dHIgPT09
IHR5cGUgfHwgYXR0ciA9PT0gbnVsbCApOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICByYWRpbzogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgInJhZGlvIiA9
PT0gZWxlbS50eXBlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBjaGVja2Jv
eDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgImNoZWNrYm94IiA9PT0gZWxl
bS50eXBlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBmaWxlOiBmdW5jdGlv
biggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAiZmlsZSIgPT09IGVsZW0udHlwZTsKICAgICAg
ICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgcGFzc3dvcmQ6IGZ1bmN0aW9uKCBlbGVtICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpID09PSAiaW5wdXQiICYmICJwYXNzd29yZCIgPT09IGVsZW0udHlwZTsKICAgICAgICAgICAg
ICAgIH0sCgogICAgICAgICAgICAgICAgc3VibWl0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmFtZSA9PT0gImlucHV0IiB8fCBuYW1l
ID09PSAiYnV0dG9uIikgJiYgInN1Ym1pdCIgPT09IGVsZW0udHlwZTsKICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgaW1hZ2U6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5w
dXQiICYmICJpbWFnZSIgPT09IGVsZW0udHlwZTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAg
ICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0b24iKSAm
JiAicmVzZXQiID09PSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAg
ICAgIGJ1dHRvbjogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiAiYnV0dG9uIiA9PT0gZWxlbS50eXBlIHx8
IG5hbWUgPT09ICJidXR0b24iOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBp
bnB1dDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo
L2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaSkudGVzdCggZWxlbS5ub2RlTmFtZSApOwog
ICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oIGVsZW0g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBlbGVtLm93bmVyRG9j
dW1lbnQuYWN0aXZlRWxlbWVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAg
IHNldEZpbHRlcnM6IHsKICAgICAgICAgICAgICAgIGZpcnN0OiBmdW5jdGlvbiggZWxlbSwgaSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IDA7CiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIGxhc3Q6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCwgYXJy
YXkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpID09PSBhcnJheS5sZW5ndGgg
LSAxOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBldmVuOiBmdW5jdGlvbigg
ZWxlbSwgaSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgJSAyID09PSAwOwog
ICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBvZGQ6IGZ1bmN0aW9uKCBlbGVtLCBp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSAlIDIgPT09IDE7CiAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGx0OiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2gg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbWF0Y2hbM10gLSAwOwogICAg
ICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBndDogZnVuY3Rpb24oIGVsZW0sIGksIG1h
dGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSA+IG1hdGNoWzNdIC0gMDsK
ICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgbnRoOiBmdW5jdGlvbiggZWxlbSwg
aSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaFszXSAtIDAg
PT09IGk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGVxOiBmdW5jdGlvbigg
ZWxlbSwgaSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaFsz
XSAtIDAgPT09IGk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmaWx0ZXI6
IHsKICAgICAgICAgICAgICAgIFBTRVVETzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoLCBpLCBhcnJh
eSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBtYXRjaFsxXSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBFeHByLmZpbHRlcnNbIG5hbWUgXTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlsdGVyICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIoIGVsZW0sIGksIG1hdGNoLCBhcnJheSApOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbmFtZSA9PT0gImNvbnRhaW5zIiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGVsZW0udGV4dENvbnRl
bnQgfHwgZWxlbS5pbm5lclRleHQgfHwgU2l6emxlLmdldFRleHQoWyBlbGVtIF0pIHx8ICIiKS5p
bmRleE9mKG1hdGNoWzNdKSA+PSAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggbmFtZSA9PT0gIm5vdCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG5vdCA9IG1hdGNoWzNdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgaiA9IDAsIGwgPSBub3QubGVuZ3RoOyBqIDwgbDsgaisrICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub3Rbal0gPT09IGVsZW0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBDSElMRDogZnVuY3Rpb24o
IGVsZW0sIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG1hdGNo
WzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVtOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoICggdHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICJvbmx5IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICJmaXJzdCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoIChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpICkgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkg
eyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZmlyc3Qi
ICkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVtOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJsYXN0IjoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSAp
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAi
bnRoIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9
IG1hdGNoWzJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0ID0gbWF0Y2hbM107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRv
bmVOYW1lID0gbWF0Y2hbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFyZW50ICYmIChwYXJlbnQuc2l6Y2Fj
aGUgIT09IGRvbmVOYW1lIHx8ICFlbGVtLm5vZGVJbmRleCkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBub2RlID0gcGFyZW50LmZpcnN0Q2hp
bGQ7IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9
PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUubm9kZUluZGV4ID0gKytjb3VudDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuc2l6Y2FjaGUgPSBkb25lTmFtZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGRpZmYgPSBlbGVtLm5vZGVJbmRleCAtIGxhc3Q7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJzdCA9PT0gMCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpZmYgPT09IDA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggZGlmZiAl
IGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0sCgogICAgICAgICAgICAgICAgSUQ6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgZWxl
bS5nZXRBdHRyaWJ1dGUoImlkIikgPT09IG1hdGNoOwogICAgICAgICAgICAgICAgfSwKCiAgICAg
ICAgICAgICAgICBUQUc6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIChtYXRjaCA9PT0gIioiICYmIGVsZW0ubm9kZVR5cGUgPT09IDEpIHx8
IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2g7CiAgICAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBDTEFTUzogZnVuY3Rpb24oIGVsZW0s
IG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCIgIiArIChlbGVtLmNs
YXNzTmFtZSB8fCBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSkgKyAiICIpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmluZGV4T2YoIG1hdGNoICkgPiAtMTsKICAgICAgICAgICAg
ICAgIH0sCgogICAgICAgICAgICAgICAgQVRUUjogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1hdGNoWzFdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZSBdID8KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHIuYXR0ckhhbmRsZVsgbmFt
ZSBdKCBlbGVtICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bVsgbmFtZSBdICE9IG51bGwgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtWyBuYW1lIF0gOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0ICsgIiIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZSA9IG1hdGNoWzJdLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrID0gbWF0Y2hbNF07CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0ID09IG51bGwgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09
ICIhPSIgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICI9IiA/CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPT09IGNoZWNrIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAiKj0iID8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZS5pbmRleE9mKGNoZWNrKSA+PSAwIDoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID09PSAifj0iID8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoIiAiICsgdmFsdWUgKyAiICIpLmluZGV4T2YoY2hlY2spID49IDAgOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVjayA/CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgJiYgcmVzdWx0ICE9PSBmYWxzZSA6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9PT0gIiE9IiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgIT09IGNoZWNrIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID09PSAiXj0iID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5pbmRleE9m
KGNoZWNrKSA9PT0gMCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0g
IiQ9IiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc3Vic3RyKHZhbHVl
Lmxlbmd0aCAtIGNoZWNrLmxlbmd0aCkgPT09IGNoZWNrIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlID09PSAifD0iID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9PT0gY2hlY2sgfHwgdmFsdWUuc3Vic3RyKDAsIGNoZWNrLmxlbmd0aCArIDEpID09
PSBjaGVjayArICItIiA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U7CiAg
ICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIFBPUzogZnVuY3Rpb24oIGVsZW0sIG1h
dGNoLCBpLCBhcnJheSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBtYXRj
aFsyXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBFeHByLnNldEZp
bHRlcnNbIG5hbWUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlsdGVyICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIoIGVsZW0sIGksIG1h
dGNoLCBhcnJheSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQp9OwoKdmFyIG9yaWdQT1MgPSBFeHByLm1hdGNoLlBPUywKICAgICAgICBmZXNj
YXBlID0gZnVuY3Rpb24oYWxsLCBudW0pewogICAgICAgICAgICAgICAgcmV0dXJuICJcXCIgKyAo
bnVtIC0gMCArIDEpOwogICAgICAgIH07Cgpmb3IgKCB2YXIgdHlwZSBpbiBFeHByLm1hdGNoICkg
ewogICAgICAgIEV4cHIubWF0Y2hbIHR5cGUgXSA9IG5ldyBSZWdFeHAoIEV4cHIubWF0Y2hbIHR5
cGUgXS5zb3VyY2UgKyAoLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlKSApOwogICAg
ICAgIEV4cHIubGVmdE1hdGNoWyB0eXBlIF0gPSBuZXcgUmVnRXhwKCAvKF4oPzoufFxyfFxuKSo/
KS8uc291cmNlICsgRXhwci5tYXRjaFsgdHlwZSBdLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2cs
IGZlc2NhcGUpICk7Cn0KCnZhciBtYWtlQXJyYXkgPSBmdW5jdGlvbiggYXJyYXksIHJlc3VsdHMg
KSB7CiAgICAgICAgYXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJyYXksIDAg
KTsKCiAgICAgICAgaWYgKCByZXN1bHRzICkgewogICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNo
LmFwcGx5KCByZXN1bHRzLCBhcnJheSApOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7
CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBhcnJheTsKfTsKCi8vIFBlcmZvcm0g
YSBzaW1wbGUgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIGNhcGFibGUgb2YK
Ly8gY29udmVydGluZyBhIE5vZGVMaXN0IHRvIGFuIGFycmF5IHVzaW5nIGJ1aWx0aW4gbWV0aG9k
cy4KLy8gQWxzbyB2ZXJpZmllcyB0aGF0IHRoZSByZXR1cm5lZCBhcnJheSBob2xkcyBET00gbm9k
ZXMKLy8gKHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBpbiB0aGUgQmxhY2tiZXJyeSBicm93c2VyKQp0
cnkgewogICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQuY2hpbGROb2RlcywgMCApWzBdLm5vZGVUeXBlOwoKLy8gUHJvdmlkZSBhIGZhbGxi
YWNrIG1ldGhvZCBpZiBpdCBkb2VzIG5vdCB3b3JrCn0gY2F0Y2goIGUgKSB7CiAgICAgICAgbWFr
ZUFycmF5ID0gZnVuY3Rpb24oIGFycmF5LCByZXN1bHRzICkgewogICAgICAgICAgICAgICAgdmFy
IGkgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSByZXN1bHRzIHx8IFtdOwoKICAg
ICAgICAgICAgICAgIGlmICggdG9TdHJpbmcuY2FsbChhcnJheSkgPT09ICJbb2JqZWN0IEFycmF5
XSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5
KCByZXQsIGFycmF5ICk7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB0eXBlb2YgYXJyYXkubGVuZ3RoID09PSAibnVtYmVyIiApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbCA9IGFycmF5Lmxlbmd0aDsgaSA8
IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5w
dXNoKCBhcnJheVtpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggOyBhcnJheVtpXTsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnB1c2goIGFycmF5W2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9Owp9Cgp2YXIgc29ydE9yZGVyLCBz
aWJsaW5nQ2hlY2s7CgppZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbiApIHsKICAgICAgICBzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHsKICAg
ICAgICAgICAgICAgIGlmICggYSA9PT0gYiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGFz
RHVwbGljYXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhYS5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPyAtMSA6IDE7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRp
b24oYikgJiA0ID8gLTEgOiAxOwogICAgICAgIH07Cgp9IGVsc2UgewogICAgICAgIHNvcnRPcmRl
ciA9IGZ1bmN0aW9uKCBhLCBiICkgewogICAgICAgICAgICAgICAgLy8gVGhlIG5vZGVzIGFyZSBp
ZGVudGljYWwsIHdlIGNhbiBleGl0IGVhcmx5CiAgICAgICAgICAgICAgICBpZiAoIGEgPT09IGIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRv
IHVzaW5nIHNvdXJjZUluZGV4IChpbiBJRSkgaWYgaXQncyBhdmFpbGFibGUgb24gYm90aCBub2Rl
cwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYS5zb3VyY2VJbmRleCAmJiBiLnNvdXJjZUlu
ZGV4ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIu
c291cmNlSW5kZXg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGFsLCBi
bCwKICAgICAgICAgICAgICAgICAgICAgICAgYXAgPSBbXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgYnAgPSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgYXVwID0gYS5wYXJlbnROb2RlLAog
ICAgICAgICAgICAgICAgICAgICAgICBidXAgPSBiLnBhcmVudE5vZGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGN1ciA9IGF1cDsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJl
IHNpYmxpbmdzIChvciBpZGVudGljYWwpIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCiAgICAgICAg
ICAgICAgICBpZiAoIGF1cCA9PT0gYnVwICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc2libGluZ0NoZWNrKCBhLCBiICk7CgogICAgICAgICAgICAgICAgLy8gSWYgbm8gcGFyZW50
cyB3ZXJlIGZvdW5kIHRoZW4gdGhlIG5vZGVzIGFyZSBkaXNjb25uZWN0ZWQKICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoICFhdXAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAt
MTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhYnVwICkgewogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBP
dGhlcndpc2UgdGhleSdyZSBzb21ld2hlcmUgZWxzZSBpbiB0aGUgdHJlZSBzbyB3ZSBuZWVkCiAg
ICAgICAgICAgICAgICAvLyB0byBidWlsZCB1cCBhIGZ1bGwgbGlzdCBvZiB0aGUgcGFyZW50Tm9k
ZXMgZm9yIGNvbXBhcmlzb24KICAgICAgICAgICAgICAgIHdoaWxlICggY3VyICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBhcC51bnNoaWZ0KCBjdXIgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgY3VyID0gY3VyLnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgY3VyID0gYnVwOwoKICAgICAgICAgICAgICAgIHdoaWxlICggY3VyICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBicC51bnNoaWZ0KCBjdXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyID0gY3VyLnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
YWwgPSBhcC5sZW5ndGg7CiAgICAgICAgICAgICAgICBibCA9IGJwLmxlbmd0aDsKCiAgICAgICAg
ICAgICAgICAvLyBTdGFydCB3YWxraW5nIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNj
cmVwYW5jeQogICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgYWwgJiYgaSA8IGJs
OyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXBbaV0gIT09IGJwW2ldICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soIGFw
W2ldLCBicFtpXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gV2UgZW5kZWQgc29tZXBsYWNlIHVwIHRoZSB0cmVlIHNvIGRv
IGEgc2libGluZyBjaGVjawogICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IGFsID8KICAgICAg
ICAgICAgICAgICAgICAgICAgc2libGluZ0NoZWNrKCBhLCBicFtpXSwgLTEgKSA6CiAgICAgICAg
ICAgICAgICAgICAgICAgIHNpYmxpbmdDaGVjayggYXBbaV0sIGIsIDEgKTsKICAgICAgICB9OwoK
ICAgICAgICBzaWJsaW5nQ2hlY2sgPSBmdW5jdGlvbiggYSwgYiwgcmV0ICkgewogICAgICAgICAg
ICAgICAgaWYgKCBhID09PSBiICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjdXIgPSBhLm5leHRTaWJs
aW5nOwoKICAgICAgICAgICAgICAgIHdoaWxlICggY3VyICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGN1ciA9PT0gYiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgIGN1ciA9IGN1ci5uZXh0U2libGluZzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICByZXR1cm4gMTsKICAgICAgICB9Owp9CgovLyBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRy
ZWl2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2RlcwpTaXp6bGUuZ2V0
VGV4dCA9IGZ1bmN0aW9uKCBlbGVtcyApIHsKICAgICAgICB2YXIgcmV0ID0gIiIsIGVsZW07Cgog
ICAgICAgIGZvciAoIHZhciBpID0gMDsgZWxlbXNbaV07IGkrKyApIHsKICAgICAgICAgICAgICAg
IGVsZW0gPSBlbGVtc1tpXTsKCiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHRleHQgZnJvbSB0
ZXh0IG5vZGVzIGFuZCBDREFUQSBub2RlcwogICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVU
eXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldCArPSBlbGVtLm5vZGVWYWx1ZTsKCiAgICAgICAgICAgICAgICAvLyBUcmF2ZXJzZSBl
dmVyeXRoaW5nIGVsc2UsIGV4Y2VwdCBjb21tZW50IG5vZGVzCiAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBlbGVtLm5vZGVUeXBlICE9PSA4ICkgewogICAgICAgICAgICAgICAgICAgICAgICBy
ZXQgKz0gU2l6emxlLmdldFRleHQoIGVsZW0uY2hpbGROb2RlcyApOwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJldDsKfTsKCi8vIENoZWNrIHRvIHNlZSBpZiB0
aGUgYnJvd3NlciByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWUgd2hlbgovLyBxdWVyeWluZyBieSBn
ZXRFbGVtZW50QnlJZCAoYW5kIHByb3ZpZGUgYSB3b3JrYXJvdW5kKQooZnVuY3Rpb24oKXsKICAg
ICAgICAvLyBXZSdyZSBnb2luZyB0byBpbmplY3QgYSBmYWtlIGlucHV0IGVsZW1lbnQgd2l0aCBh
IHNwZWNpZmllZCBuYW1lCiAgICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKSwKICAgICAgICAgICAgICAgIGlkID0gInNjcmlwdCIgKyAobmV3IERhdGUoKSkuZ2V0
VGltZSgpLAogICAgICAgICAgICAgICAgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsK
CiAgICAgICAgZm9ybS5pbm5lckhUTUwgPSAiPGEgbmFtZT0nIiArIGlkICsgIicvPiI7CgogICAg
ICAgIC8vIEluamVjdCBpdCBpbnRvIHRoZSByb290IGVsZW1lbnQsIGNoZWNrIGl0cyBzdGF0dXMs
IGFuZCByZW1vdmUgaXQgcXVpY2tseQogICAgICAgIHJvb3QuaW5zZXJ0QmVmb3JlKCBmb3JtLCBy
b290LmZpcnN0Q2hpbGQgKTsKCiAgICAgICAgLy8gVGhlIHdvcmthcm91bmQgaGFzIHRvIGRvIGFk
ZGl0aW9uYWwgY2hlY2tzIGFmdGVyIGEgZ2V0RWxlbWVudEJ5SWQKICAgICAgICAvLyBXaGljaCBz
bG93cyB0aGluZ3MgZG93biBmb3Igb3RoZXIgYnJvd3NlcnMgKGhlbmNlIHRoZSBicmFuY2hpbmcp
CiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggaWQgKSApIHsKICAgICAgICAg
ICAgICAgIEV4cHIuZmluZC5JRCA9IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCwgaXNYTUwgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5
SWQgIT09ICJ1bmRlZmluZWQiICYmICFpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobWF0Y2hbMV0pOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbSA/CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtLmlkID09PSBtYXRjaFsxXSB8fCB0eXBlb2YgbS5nZXRBdHRy
aWJ1dGVOb2RlICE9PSAidW5kZWZpbmVkIiAmJiBtLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9k
ZVZhbHVlID09PSBtYXRjaFsxXSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFttXSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuZGVmaW5lZCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKCiAg
ICAgICAgICAgICAgICBFeHByLmZpbHRlci5JRCA9IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1
dGVOb2RlICE9PSAidW5kZWZpbmVkIiAmJiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7Cgog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBub2Rl
ICYmIG5vZGUubm9kZVZhbHVlID09PSBtYXRjaDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAg
fQoKICAgICAgICByb290LnJlbW92ZUNoaWxkKCBmb3JtICk7CgogICAgICAgIC8vIHJlbGVhc2Ug
bWVtb3J5IGluIElFCiAgICAgICAgcm9vdCA9IGZvcm0gPSBudWxsOwp9KSgpOwoKKGZ1bmN0aW9u
KCl7CiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBicm93c2VyIHJldHVybnMgb25seSBl
bGVtZW50cwogICAgICAgIC8vIHdoZW4gZG9pbmcgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKQoK
ICAgICAgICAvLyBDcmVhdGUgYSBmYWtlIGVsZW1lbnQKICAgICAgICB2YXIgZGl2ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBkb2N1bWVu
dC5jcmVhdGVDb21tZW50KCIiKSApOwoKICAgICAgICAvLyBNYWtlIHN1cmUgbm8gY29tbWVudHMg
YXJlIGZvdW5kCiAgICAgICAgaWYgKCBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5n
dGggPiAwICkgewogICAgICAgICAgICAgICAgRXhwci5maW5kLlRBRyA9IGZ1bmN0aW9uKCBtYXRj
aCwgY29udGV4dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBjb250
ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBtYXRjaFsxXSApOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50cwogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG1hdGNoWzFdID09PSAiKiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHRtcCA9IFtdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IHJlc3VsdHNbaV07IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggcmVzdWx0c1tpXS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnB1c2goIHJlc3Vs
dHNbaV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdHMgPSB0bXA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgICAgICAgICAgICAgfTsKICAgICAgICB9
CgogICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhbiBhdHRyaWJ1dGUgcmV0dXJucyBub3JtYWxp
emVkIGhyZWYgYXR0cmlidXRlcwogICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGEgaHJlZj0nIyc+
PC9hPiI7CgogICAgICAgIGlmICggZGl2LmZpcnN0Q2hpbGQgJiYgdHlwZW9mIGRpdi5maXJzdENo
aWxkLmdldEF0dHJpYnV0ZSAhPT0gInVuZGVmaW5lZCIgJiYKICAgICAgICAgICAgICAgICAgICAg
ICAgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikgIT09ICIjIiApIHsKCiAgICAg
ICAgICAgICAgICBFeHByLmF0dHJIYW5kbGUuaHJlZiA9IGZ1bmN0aW9uKCBlbGVtICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoICJocmVmIiwgMiAp
OwogICAgICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5
IGluIElFCiAgICAgICAgZGl2ID0gbnVsbDsKfSkoKTsKCmlmICggZG9jdW1lbnQucXVlcnlTZWxl
Y3RvckFsbCApIHsKICAgICAgICAoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciBvbGRT
aXp6bGUgPSBTaXp6bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpLAogICAgICAgICAgICAgICAgICAgICAgICBpZCA9ICJfX3Npenps
ZV9fIjsKCiAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxwIGNsYXNzPSdURVNUJz48
L3A+IjsKCiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgY2FuJ3QgaGFuZGxlIHVwcGVyY2FzZSBv
ciB1bmljb2RlIGNoYXJhY3RlcnMgd2hlbgogICAgICAgICAgICAgICAgLy8gaW4gcXVpcmtzIG1v
ZGUuCiAgICAgICAgICAgICAgICBpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsICYmIGRpdi5xdWVy
eVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aCA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAg
U2l6emxlID0gZnVuY3Rpb24oIHF1ZXJ5LCBjb250ZXh0LCBleHRyYSwgc2VlZCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBPbmx5IHVzZSBxdWVyeVNlbGVjdG9yQWxsIG9uIG5vbi1YTUwg
ZG9jdW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIChJRCBzZWxlY3RvcnMgZG9uJ3Qg
d29yayBpbiBub24tSFRNTCBkb2N1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IXNlZWQgJiYgIVNpenpsZS5pc1hNTChjb250ZXh0KSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTZWUgaWYgd2UgZmluZCBhIHNlbGVjdG9yIHRvIHNwZWVkIHVwCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gL14oXHcrJCl8XlwuKFtcd1wt
XSskKXxeIyhbXHdcLV0rJCkvLmV4ZWMoIHF1ZXJ5ICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAo
Y29udGV4dC5ub2RlVHlwZSA9PT0gMSB8fCBjb250ZXh0Lm5vZGVUeXBlID09PSA5KSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUo
IlRBRyIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNo
WzFdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZUFycmF5KCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBxdWVyeSApLCBl
eHRyYSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCIuQ0xB
U1MiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
bWF0Y2hbMl0gJiYgRXhwci5maW5kLkNMQVNTICYmIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VBcnJheSggY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtYXRjaFsy
XSApLCBleHRyYSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQubm9k
ZVR5cGUgPT09IDkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBTcGVlZC11cDogU2l6emxlKCJib2R5IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSBib2R5IGVsZW1lbnQgb25seSBleGlzdHMgb25jZSwgb3B0aW1pemUg
ZmluZGluZyBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBx
dWVyeSA9PT0gImJvZHkiICYmIGNvbnRleHQuYm9keSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VBcnJheSggWyBjb250ZXh0LmJv
ZHkgXSwgZXh0cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZC11
cDogU2l6emxlKCIjSUQiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggbWF0Y2ggJiYgbWF0Y2hbM10gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJ
ZCggbWF0Y2hbM10gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiBy
ZXR1cm5zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICYmIGVsZW0u
cGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5kIE9wZXJhIHJldHVy
biBpdGVtcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5pZCA9PT0gbWF0Y2hbM10g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBbIGVsZW0gXSwgZXh0cmEgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VBcnJheSggW10sIGV4dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VBcnJheSggY29udGV4dC5xdWVyeVNlbGVj
dG9yQWxsKHF1ZXJ5KSwgZXh0cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gY2F0Y2gocXNhRXJyb3IpIHt9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHFTQSB3b3JrcyBzdHJhbmdlbHkgb24gRWxlbWVudC1yb290ZWQgcXVlcmllcwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB3b3JrIGFyb3VuZCB0aGlzIGJ5
IHNwZWNpZnlpbmcgYW4gZXh0cmEgSUQgb24gdGhlIHJvb3QKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhbmQgd29ya2luZyB1cCBmcm9tIHRoZXJlIChUaGFua3MgdG8gQW5kcmV3
IER1cG9udCBmb3IgdGhlIHRlY2huaXF1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJRSA4IGRvZXNuJ3Qgd29yayBvbiBvYmplY3QgZWxlbWVudHMKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb250ZXh0Lm5vZGVUeXBlID09PSAxICYmIGNv
bnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gIm9iamVjdCIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkQ29udGV4dCA9IGNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCA9IGNvbnRl
eHQuZ2V0QXR0cmlidXRlKCAiaWQiICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5pZCA9IG9sZCB8fCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGFyZW50ID0gY29udGV4dC5wYXJlbnROb2RlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUhp
ZXJhcmNoeVNlbGVjdG9yID0gL15ccypbK35dLy50ZXN0KCBxdWVyeSApOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW9sZCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJp
ZCIsIG5pZCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0g
bmlkLnJlcGxhY2UoIC8nL2csICJcXCQmIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCByZWxhdGl2ZUhpZXJhcmNoeVNlbGVjdG9yICYmIGhhc1BhcmVudCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFy
ZW50Tm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZWxhdGl2ZUhpZXJhcmNoeVNl
bGVjdG9yIHx8IGhhc1BhcmVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBjb250ZXh0LnF1ZXJ5U2Vs
ZWN0b3JBbGwoICJbaWQ9JyIgKyBuaWQgKyAiJ10gIiArIHF1ZXJ5ICksIGV4dHJhICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKHBzZXVkb0Vycm9yKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvbGQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ29u
dGV4dC5yZW1vdmVBdHRyaWJ1dGUoICJpZCIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBvbGRTaXp6bGUocXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkKTsKICAgICAgICAgICAgICAg
IH07CgogICAgICAgICAgICAgICAgZm9yICggdmFyIHByb3AgaW4gb2xkU2l6emxlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBTaXp6bGVbIHByb3AgXSA9IG9sZFNpenpsZVsgcHJvcCBdOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5IGluIElF
CiAgICAgICAgICAgICAgICBkaXYgPSBudWxsOwogICAgICAgIH0pKCk7Cn0KCihmdW5jdGlvbigp
ewogICAgICAgIHZhciBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAogICAgICAgICAg
ICAgICAgbWF0Y2hlcyA9IGh0bWwubWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwubW96TWF0Y2hlc1Nl
bGVjdG9yIHx8IGh0bWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwubXNNYXRjaGVzU2Vs
ZWN0b3I7CgogICAgICAgIGlmICggbWF0Y2hlcyApIHsKICAgICAgICAgICAgICAgIC8vIENoZWNr
IHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvcgogICAgICAgICAg
ICAgICAgLy8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSBmYWlscyB0aGlzKQogICAgICAg
ICAgICAgICAgdmFyIGRpc2Nvbm5lY3RlZE1hdGNoID0gIW1hdGNoZXMuY2FsbCggZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCggImRpdiIgKSwgImRpdiIgKSwKICAgICAgICAgICAgICAgICAgICAgICAg
cHNldWRvV29ya3MgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGlu
c3RlYWQKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5jYWxsKCBkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQsICJbdGVzdCE9JyddOnNpenpsZSIgKTsKICAgICAgICAKICAgICAgICAgICAg
ICAgIH0gY2F0Y2goIHBzZXVkb0Vycm9yICkgewogICAgICAgICAgICAgICAgICAgICAgICBwc2V1
ZG9Xb3JrcyA9IHRydWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgU2l6emxl
Lm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBub2RlLCBleHByICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBxdW90
ZWQKICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXD1ccyooW14n
IlxdXSopXHMqXF0vZywgIj0nJDEnXSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
U2l6emxlLmlzWE1MKCBub2RlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ5IHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBzZXVk
b1dvcmtzIHx8ICFFeHByLm1hdGNoLlBTRVVETy50ZXN0KCBleHByICkgJiYgIS8hPS8udGVzdCgg
ZXhwciApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBub2RlLCBleHByICk7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9y
IHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0IHx8ICFkaXNjb25uZWN0ZWRNYXRj
aCB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJl
IGluIGEgZG9jdW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGZyYWdtZW50IGluIElFIDksIHNvIGNoZWNrIGZvciB0
aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLmRvY3VtZW50ICYmIG5vZGUuZG9jdW1lbnQubm9kZVR5cGUgIT09IDEx
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaXp6bGUoZXhwciwgbnVs
bCwgbnVsbCwgW25vZGVdKS5sZW5ndGggPiAwOwogICAgICAgICAgICAgICAgfTsKICAgICAgICB9
Cn0pKCk7CgooZnVuY3Rpb24oKXsKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CgogICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0ndGVzdCBl
Jz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iOwoKICAgICAgICAvLyBPcGVyYSBjYW4n
dCBmaW5kIGEgc2Vjb25kIGNsYXNzbmFtZSAoaW4gOS42KQogICAgICAgIC8vIEFsc28sIG1ha2Ug
c3VyZSB0aGF0IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgYWN0dWFsbHkgZXhpc3RzCiAgICAgICAg
aWYgKCAhZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgZGl2LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoImUiKS5sZW5ndGggPT09IDAgKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgfQoKICAgICAgICAvLyBTYWZhcmkgY2FjaGVzIGNsYXNzIGF0dHJpYnV0ZXMsIGRvZXNuJ3Qg
Y2F0Y2ggY2hhbmdlcyAoaW4gMy4yKQogICAgICAgIGRpdi5sYXN0Q2hpbGQuY2xhc3NOYW1lID0g
ImUiOwoKICAgICAgICBpZiAoIGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3Ro
ID09PSAxICkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAg
ICAgICBFeHByLm9yZGVyLnNwbGljZSgxLCAwLCAiQ0xBU1MiKTsKICAgICAgICBFeHByLmZpbmQu
Q0xBU1MgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICkgewogICAgICAgICAgICAg
ICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSAidW5kZWZp
bmVkIiAmJiAhaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobWF0Y2hbMV0pOwogICAgICAgICAgICAgICAgfQogICAg
ICAgIH07CgogICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCiAgICAgICAgZGl2ID0gbnVs
bDsKfSkoKTsKCmZ1bmN0aW9uIGRpck5vZGVDaGVjayggZGlyLCBjdXIsIGRvbmVOYW1lLCBjaGVj
a1NldCwgbm9kZUNoZWNrLCBpc1hNTCApIHsKICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBj
aGVja1NldC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9
IGNoZWNrU2V0W2ldOwoKICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIG1hdGNoID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgICAgICBl
bGVtID0gZWxlbVtkaXJdOwoKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBlbGVtICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5zaXpjYWNoZSA9PT0g
ZG9uZU5hbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aCA9IGNoZWNrU2V0W2VsZW0uc2l6c2V0XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFp
c1hNTCApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpj
YWNoZSA9IGRvbmVOYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5zaXpzZXQgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCkgPT09IGN1ciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoID0gZWxlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbSA9IGVsZW1bZGlyXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBtYXRjaDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9Cn0KCmZ1bmN0aW9uIGRpckNoZWNrKCBkaXIsIGN1ciwgZG9uZU5hbWUs
IGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICkgewogICAgICAgIGZvciAoIHZhciBpID0gMCwg
bCA9IGNoZWNrU2V0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgIHZhciBl
bGVtID0gY2hlY2tTZXRbaV07CgogICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewogICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtW2Rpcl07CgogICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLnNpemNhY2hlID09PSBkb25lTmFtZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRdOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5zaXpjYWNoZSA9IGRvbmVOYW1lOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNpenNldCA9IGk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY3VyICE9PSAic3RyaW5nIiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtID09
PSBjdXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2ggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggU2l6emxlLmZpbHRlciggY3VyLCBbZWxlbV0gKS5sZW5ndGggPiAw
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aCA9IGVsZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbSA9IGVsZW1bZGlyXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBtYXRjaDsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9Cn0KCmlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zICkgewogICAg
ICAgIFNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBhLCBiICkgewogICAgICAgICAgICAgICAg
cmV0dXJuIGEgIT09IGIgJiYgKGEuY29udGFpbnMgPyBhLmNvbnRhaW5zKGIpIDogdHJ1ZSk7CiAg
ICAgICAgfTsKCn0gZWxzZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbiApIHsKICAgICAgICBTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggYSwg
YiApIHsKICAgICAgICAgICAgICAgIHJldHVybiAhIShhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u
KGIpICYgMTYpOwogICAgICAgIH07Cgp9IGVsc2UgewogICAgICAgIFNpenpsZS5jb250YWlucyA9
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH07Cn0K
ClNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgIC8vIGRvY3VtZW50RWxl
bWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKICAg
ICAgICAvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykgCiAgICAgICAg
dmFyIGRvY3VtZW50RWxlbWVudCA9IChlbGVtID8gZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0g
OiAwKS5kb2N1bWVudEVsZW1lbnQ7CgogICAgICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBk
b2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09ICJIVE1MIiA6IGZhbHNlOwp9OwoKdmFyIHBvc1By
b2Nlc3MgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CiAgICAgICAgdmFyIG1hdGNo
LAogICAgICAgICAgICAgICAgdG1wU2V0ID0gW10sCiAgICAgICAgICAgICAgICBsYXRlciA9ICIi
LAogICAgICAgICAgICAgICAgcm9vdCA9IGNvbnRleHQubm9kZVR5cGUgPyBbY29udGV4dF0gOiBj
b250ZXh0OwoKICAgICAgICAvLyBQb3NpdGlvbiBzZWxlY3RvcnMgbXVzdCBiZSBkb25lIGFmdGVy
IHRoZSBmaWx0ZXIKICAgICAgICAvLyBBbmQgc28gbXVzdCA6bm90KHBvc2l0aW9uYWwpIHNvIHdl
IG1vdmUgYWxsIFBTRVVET3MgdG8gdGhlIGVuZAogICAgICAgIHdoaWxlICggKG1hdGNoID0gRXhw
ci5tYXRjaC5QU0VVRE8uZXhlYyggc2VsZWN0b3IgKSkgKSB7CiAgICAgICAgICAgICAgICBsYXRl
ciArPSBtYXRjaFswXTsKICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFj
ZSggRXhwci5tYXRjaC5QU0VVRE8sICIiICk7CiAgICAgICAgfQoKICAgICAgICBzZWxlY3RvciA9
IEV4cHIucmVsYXRpdmVbc2VsZWN0b3JdID8gc2VsZWN0b3IgKyAiKiIgOiBzZWxlY3RvcjsKCiAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gcm9vdC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAg
ICAgICAgICAgICAgICBTaXp6bGUoIHNlbGVjdG9yLCByb290W2ldLCB0bXBTZXQgKTsKICAgICAg
ICB9CgogICAgICAgIHJldHVybiBTaXp6bGUuZmlsdGVyKCBsYXRlciwgdG1wU2V0ICk7Cn07Cgov
LyBFWFBPU0UKalF1ZXJ5LmZpbmQgPSBTaXp6bGU7CmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVj
dG9yczsKalF1ZXJ5LmV4cHJbIjoiXSA9IGpRdWVyeS5leHByLmZpbHRlcnM7CmpRdWVyeS51bmlx
dWUgPSBTaXp6bGUudW5pcXVlU29ydDsKalF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDsKalF1
ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MOwpqUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29u
dGFpbnM7CgoKfSkoKTsKCgp2YXIgcnVudGlsID0gL1VudGlsJC8sCiAgICAgICAgcnBhcmVudHNw
cmV2ID0gL14oPzpwYXJlbnRzfHByZXZVbnRpbHxwcmV2QWxsKS8sCiAgICAgICAgLy8gTm90ZTog
VGhpcyBSZWdFeHAgc2hvdWxkIGJlIGltcHJvdmVkLCBvciBsaWtlbHkgcHVsbGVkIGZyb20gU2l6
emxlCiAgICAgICAgcm11bHRpc2VsZWN0b3IgPSAvLC8sCiAgICAgICAgaXNTaW1wbGUgPSAvXi5b
XjojXFtcLixdKiQvLAogICAgICAgIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLAogICAg
ICAgIFBPUyA9IGpRdWVyeS5leHByLm1hdGNoLlBPUywKICAgICAgICAvLyBtZXRob2RzIGd1YXJh
bnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVl
IHNldAogICAgICAgIGd1YXJhbnRlZWRVbmlxdWUgPSB7CiAgICAgICAgICAgICAgICBjaGlsZHJl
bjogdHJ1ZSwKICAgICAgICAgICAgICAgIGNvbnRlbnRzOiB0cnVlLAogICAgICAgICAgICAgICAg
bmV4dDogdHJ1ZSwKICAgICAgICAgICAgICAgIHByZXY6IHRydWUKICAgICAgICB9OwoKalF1ZXJ5
LmZuLmV4dGVuZCh7CiAgICAgICAgZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewogICAgICAg
ICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICBpLCBsOwoK
ICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwg
PSBzZWxmLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gdGhpcy5wdXNoU3RhY2soICIi
LCAiZmluZCIsIHNlbGVjdG9yICksCiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgbiwg
cjsKCiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsg
aSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSByZXQubGVuZ3RoOwogICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmluZCggc2VsZWN0b3IsIHRoaXNbaV0sIHJldCAp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpID4gMCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0cyBhcmUgdW5pcXVl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbiA9IGxlbmd0aDsgbiA8IHJl
dC5sZW5ndGg7IG4rKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIHIgPSAwOyByIDwgbGVuZ3RoOyByKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0W3JdID09PSByZXRbbl0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNw
bGljZShuLS0sIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9
LAoKICAgICAgICBoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7CiAgICAgICAgICAgICAgICB2YXIg
dGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0ICk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5m
aWx0ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MCwgbCA9IHRhcmdldHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzW2ldICkgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIG5vdDogZnVuY3Rpb24oIHNl
bGVjdG9yICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3co
dGhpcywgc2VsZWN0b3IsIGZhbHNlKSwgIm5vdCIsIHNlbGVjdG9yKTsKICAgICAgICB9LAoKICAg
ICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVlKSwgImZpbHRlciIs
IHNlbGVjdG9yICk7CiAgICAgICAgfSwKCiAgICAgICAgaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciAp
IHsKICAgICAgICAgICAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmICggdHlwZW9mIHNlbGVjdG9y
ID09PSAic3RyaW5nIiA/CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maWx0ZXIoIHNl
bGVjdG9yLCB0aGlzICkubGVuZ3RoID4gMCA6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZmlsdGVyKCBzZWxlY3RvciApLmxlbmd0aCA+IDAgKTsKICAgICAgICB9LAoKICAgICAgICBjbG9z
ZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgdmFy
IHJldCA9IFtdLCBpLCBsLCBjdXIgPSB0aGlzWzBdOwogICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAvLyBBcnJheQogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggc2Vs
ZWN0b3JzICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCwgc2VsZWN0b3Is
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IHt9LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gMTsKCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggY3VyICYmIHNlbGVjdG9ycy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzZWxlY3RvcnMubGVuZ3RoOyBpIDwgbDsgaSsrICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxl
Y3RvcnNbaV07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
bWF0Y2hlc1sgc2VsZWN0b3IgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlc1sgc2VsZWN0b3IgXSA9IFBPUy50ZXN0KCBzZWxlY3RvciAp
ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggY3VyICYmIGN1ci5vd25lckRvY3VtZW50ICYmIGN1ciAhPT0gY29udGV4dCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHNlbGVjdG9yIGluIG1hdGNo
ZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoID0gbWF0Y2hlc1sgc2VsZWN0b3IgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2guanF1ZXJ5ID8gbWF0Y2guaW5kZXgoIGN1ciAp
ID4gLTEgOiBqUXVlcnkoIGN1ciApLmlzKCBtYXRjaCApICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHsgc2VsZWN0b3I6
IHNlbGVjdG9yLCBlbGVtOiBjdXIsIGxldmVsOiBsZXZlbCB9KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGN1ciA9IGN1ci5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGV2ZWwrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU3RyaW5nCiAgICAgICAgICAgICAg
ICB2YXIgcG9zID0gUE9TLnRlc3QoIHNlbGVjdG9ycyApIHx8IHR5cGVvZiBzZWxlY3RvcnMgIT09
ICJzdHJpbmciID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVj
dG9ycywgY29udGV4dCB8fCB0aGlzLmNvbnRleHQgKSA6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMDsKCiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3Ro
OyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSB0aGlzW2ldOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBwb3MgPyBwb3MuaW5kZXgoY3VyKSA+IC0xIDogalF1ZXJ5LmZp
bmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwgc2VsZWN0b3JzKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBjdXIgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
ID0gY3VyLnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFjdXIgfHwgIWN1ci5vd25lckRvY3VtZW50IHx8IGN1ciA9PT0gY29udGV4dCB8fCBj
dXIubm9kZVR5cGUgPT09IDExICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXQgPSByZXQubGVu
Z3RoID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0OwoKICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCAiY2xvc2VzdCIsIHNlbGVjdG9ycyApOwogICAgICAg
IH0sCgogICAgICAgIC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRo
aW4KICAgICAgICAvLyB0aGUgbWF0Y2hlZCBzZXQgb2YgZWxlbWVudHMKICAgICAgICBpbmRleDog
ZnVuY3Rpb24oIGVsZW0gKSB7CgogICAgICAgICAgICAgICAgLy8gTm8gYXJndW1lbnQsIHJldHVy
biBpbmRleCBpbiBwYXJlbnQKICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkg
PyB0aGlzLnByZXZBbGwoKS5sZW5ndGggOiAtMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAvLyBpbmRleCBpbiBzZWxlY3RvcgogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Yg
ZWxlbSA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkuaW5BcnJheSggdGhpc1swXSwgalF1ZXJ5KCBlbGVtICkgKTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVs
ZW1lbnQKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuaW5BcnJheSgKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3Qg
ZWxlbWVudCBpcyB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uanF1ZXJ5ID8gZWxl
bVswXSA6IGVsZW0sIHRoaXMgKTsKICAgICAgICB9LAoKICAgICAgICBhZGQ6IGZ1bmN0aW9uKCBz
ZWxlY3RvciwgY29udGV4dCApIHsKICAgICAgICAgICAgICAgIHZhciBzZXQgPSB0eXBlb2Ygc2Vs
ZWN0b3IgPT09ICJzdHJpbmciID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yICYmIHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxl
Y3RvciBdIDogc2VsZWN0b3IgKSwKICAgICAgICAgICAgICAgICAgICAgICAgYWxsID0galF1ZXJ5
Lm1lcmdlKCB0aGlzLmdldCgpLCBzZXQgKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5w
dXNoU3RhY2soIGlzRGlzY29ubmVjdGVkKCBzZXRbMF0gKSB8fCBpc0Rpc2Nvbm5lY3RlZCggYWxs
WzBdICkgPwogICAgICAgICAgICAgICAgICAgICAgICBhbGwgOgogICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkudW5pcXVlKCBhbGwgKSApOwogICAgICAgIH0sCgogICAgICAgIGFuZFNlbGY6
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKCB0aGlzLnByZXZP
YmplY3QgKTsKICAgICAgICB9Cn0pOwoKLy8gQSBwYWluZnVsbHkgc2ltcGxlIGNoZWNrIHRvIHNl
ZSBpZiBhbiBlbGVtZW50IGlzIGRpc2Nvbm5lY3RlZAovLyBmcm9tIGEgZG9jdW1lbnQgKHNob3Vs
ZCBiZSBpbXByb3ZlZCwgd2hlcmUgZmVhc2libGUpLgpmdW5jdGlvbiBpc0Rpc2Nvbm5lY3RlZCgg
bm9kZSApIHsKICAgICAgICByZXR1cm4gIW5vZGUgfHwgIW5vZGUucGFyZW50Tm9kZSB8fCBub2Rl
LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IDExOwp9CgpqUXVlcnkuZWFjaCh7CiAgICAgICAgcGFy
ZW50OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVt
LnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2Rl
VHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsOwogICAgICAgIH0sCiAgICAgICAgcGFyZW50czog
ZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxl
bSwgInBhcmVudE5vZGUiICk7CiAgICAgICAgfSwKICAgICAgICBwYXJlbnRzVW50aWw6IGZ1bmN0
aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGly
KCBlbGVtLCAicGFyZW50Tm9kZSIsIHVudGlsICk7CiAgICAgICAgfSwKICAgICAgICBuZXh0OiBm
dW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubnRoKCBlbGVt
LCAyLCAibmV4dFNpYmxpbmciICk7CiAgICAgICAgfSwKICAgICAgICBwcmV2OiBmdW5jdGlvbigg
ZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubnRoKCBlbGVtLCAyLCAicHJl
dmlvdXNTaWJsaW5nIiApOwogICAgICAgIH0sCiAgICAgICAgbmV4dEFsbDogZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJs
aW5nIiApOwogICAgICAgIH0sCiAgICAgICAgcHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIg
KTsKICAgICAgICB9LAogICAgICAgIG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGls
ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGlu
ZyIsIHVudGlsICk7CiAgICAgICAgfSwKICAgICAgICBwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVt
LCBpLCB1bnRpbCApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAi
cHJldmlvdXNTaWJsaW5nIiwgdW50aWwgKTsKICAgICAgICB9LAogICAgICAgIHNpYmxpbmdzOiBm
dW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuc2libGluZygg
ZWxlbS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsIGVsZW0gKTsKICAgICAgICB9LAogICAgICAgIGNo
aWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnku
c2libGluZyggZWxlbS5maXJzdENoaWxkICk7CiAgICAgICAgfSwKICAgICAgICBjb250ZW50czog
ZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1l
KCBlbGVtLCAiaWZyYW1lIiApID8KICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jb250ZW50
RG9jdW1lbnQgfHwgZWxlbS5jb250ZW50V2luZG93LmRvY3VtZW50IDoKICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5Lm1ha2VBcnJheSggZWxlbS5jaGlsZE5vZGVzICk7CiAgICAgICAgfQp9
LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5j
dGlvbiggdW50aWwsIHNlbGVjdG9yICkgewogICAgICAgICAgICAgICAgdmFyIHJldCA9IGpRdWVy
eS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUg
dmFyaWFibGUgJ2FyZ3MnIHdhcyBpbnRyb2R1Y2VkIGluCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2NvbW1pdC81MmEwMjM4CiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIENocm9tZSAxMCAo
RGV2KSBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB0aGUgYnVnIGlzIGZpeGVkLgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2Rl
dGFpbD9pZD0xMDUwCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBzbGljZS5jYWxsKGFy
Z3VtZW50cyk7CgogICAgICAgICAgICAgICAgaWYgKCAhcnVudGlsLnRlc3QoIG5hbWUgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB1bnRpbDsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0g
InN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGpRdWVyeS5maWx0ZXIo
IHNlbGVjdG9yLCByZXQgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXQg
PSB0aGlzLmxlbmd0aCA+IDEgJiYgIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSA/IGpRdWVyeS51
bmlxdWUoIHJldCApIDogcmV0OwoKICAgICAgICAgICAgICAgIGlmICggKHRoaXMubGVuZ3RoID4g
MSB8fCBybXVsdGlzZWxlY3Rvci50ZXN0KCBzZWxlY3RvciApKSAmJiBycGFyZW50c3ByZXYudGVz
dCggbmFtZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSByZXQucmV2ZXJzZSgp
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFj
ayggcmV0LCBuYW1lLCBhcmdzLmpvaW4oIiwiKSApOwogICAgICAgIH07Cn0pOwoKalF1ZXJ5LmV4
dGVuZCh7CiAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHsKICAg
ICAgICAgICAgICAgIGlmICggbm90ICkgewogICAgICAgICAgICAgICAgICAgICAgICBleHByID0g
Ijpub3QoIiArIGV4cHIgKyAiKSI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW1zLmxlbmd0aCA9PT0gMSA/CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5maW5kLm1hdGNoZXNTZWxlY3RvcihlbGVtc1swXSwgZXhwcikgPyBbIGVsZW1zWzBdIF0gOiBb
XSA6CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXMoZXhwciwgZWxl
bXMpOwogICAgICAgIH0sCgogICAgICAgIGRpcjogZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwg
KSB7CiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdLAogICAgICAgICAgICAgICAgICAg
ICAgICBjdXIgPSBlbGVtWyBkaXIgXTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciAmJiBj
dXIubm9kZVR5cGUgIT09IDkgJiYgKHVudGlsID09PSB1bmRlZmluZWQgfHwgY3VyLm5vZGVUeXBl
ICE9PSAxIHx8ICFqUXVlcnkoIGN1ciApLmlzKCB1bnRpbCApKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKCBjdXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXJbZGlyXTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVkOwogICAgICAgIH0sCgogICAgICAgIG50
aDogZnVuY3Rpb24oIGN1ciwgcmVzdWx0LCBkaXIsIGVsZW0gKSB7CiAgICAgICAgICAgICAgICBy
ZXN1bHQgPSByZXN1bHQgfHwgMTsKICAgICAgICAgICAgICAgIHZhciBudW0gPSAwOwoKICAgICAg
ICAgICAgICAgIGZvciAoIDsgY3VyOyBjdXIgPSBjdXJbZGlyXSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgKytudW0gPT09IHJlc3VsdCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBjdXI7CiAg
ICAgICAgfSwKCiAgICAgICAgc2libGluZzogZnVuY3Rpb24oIG4sIGVsZW0gKSB7CiAgICAgICAg
ICAgICAgICB2YXIgciA9IFtdOwoKICAgICAgICAgICAgICAgIGZvciAoIDsgbjsgbiA9IG4ubmV4
dFNpYmxpbmcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbi5ub2RlVHlwZSA9PT0g
MSAmJiBuICE9PSBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIucHVz
aCggbiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgfQp9KTsKCi8vIEltcGxlbWVudCB0aGUgaWRl
bnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90CmZ1bmN0aW9uIHdpbm5vdygg
ZWxlbWVudHMsIHF1YWxpZmllciwga2VlcCApIHsKCiAgICAgICAgLy8gQ2FuJ3QgcGFzcyBudWxs
IG9yIHVuZGVmaW5lZCB0byBpbmRleE9mIGluIEZpcmVmb3ggNAogICAgICAgIC8vIFNldCB0byAw
IHRvIHNraXAgc3RyaW5nIGNoZWNrCiAgICAgICAgcXVhbGlmaWVyID0gcXVhbGlmaWVyIHx8IDA7
CgogICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldFZhbCA9ICEhcXVhbGlmaWVyLmNhbGwo
IGVsZW0sIGksIGVsZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbCA9
PT0ga2VlcDsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICB9IGVsc2UgaWYgKCBxdWFsaWZp
ZXIubm9kZVR5cGUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVu
dHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KGVsZW0gPT09IHF1YWxpZmllcikgPT09IGtlZXA7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAg
ICAgfSBlbHNlIGlmICggdHlwZW9mIHF1YWxpZmllciA9PT0gInN0cmluZyIgKSB7CiAgICAgICAg
ICAgICAgICB2YXIgZmlsdGVyZWQgPSBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAx
OwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKCBpc1NpbXBsZS50ZXN0
KCBxdWFsaWZpZXIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5m
aWx0ZXIocXVhbGlmaWVyLCBmaWx0ZXJlZCwgIWtlZXApOwogICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVyID0galF1ZXJ5LmZpbHRlciggcXVh
bGlmaWVyLCBmaWx0ZXJlZCApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg
cmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKICAgICAg
ICAgICAgICAgIHJldHVybiAoalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHF1YWxpZmllciApID49IDAp
ID09PSBrZWVwOwogICAgICAgIH0pOwp9CgoKCgp2YXIgcmlubGluZWpRdWVyeSA9IC8galF1ZXJ5
XGQrPSIoPzpcZCt8bnVsbCkiL2csCiAgICAgICAgcmxlYWRpbmdXaGl0ZXNwYWNlID0gL15ccysv
LAogICAgICAgIHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0
fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vaWcsCiAgICAgICAgcnRhZ05hbWUg
PSAvPChbXHc6XSspLywKICAgICAgICBydGJvZHkgPSAvPHRib2R5L2ksCiAgICAgICAgcmh0bWwg
PSAvPHwmIz9cdys7LywKICAgICAgICBybm9jYWNoZSA9IC88KD86c2NyaXB0fG9iamVjdHxlbWJl
ZHxvcHRpb258c3R5bGUpL2ksCiAgICAgICAgLy8gY2hlY2tlZD0iY2hlY2tlZCIgb3IgY2hlY2tl
ZAogICAgICAgIHJjaGVja2VkID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ks
CiAgICAgICAgcnNjcmlwdFR5cGUgPSAvXC8oamF2YXxlY21hKXNjcmlwdC9pLAogICAgICAgIHJj
bGVhblNjcmlwdCA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSkvLAogICAgICAgIHdyYXBNYXAg
PSB7CiAgICAgICAgICAgICAgICBvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRp
cGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAogICAgICAgICAgICAgICAgbGVnZW5kOiBbIDEsICI8Zmll
bGRzZXQ+IiwgIjwvZmllbGRzZXQ+IiBdLAogICAgICAgICAgICAgICAgdGhlYWQ6IFsgMSwgIjx0
YWJsZT4iLCAiPC90YWJsZT4iIF0sCiAgICAgICAgICAgICAgICB0cjogWyAyLCAiPHRhYmxlPjx0
Ym9keT4iLCAiPC90Ym9keT48L3RhYmxlPiIgXSwKICAgICAgICAgICAgICAgIHRkOiBbIDMsICI8
dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5PjwvdGFibGU+IiBdLAogICAgICAgICAg
ICAgICAgY29sOiBbIDIsICI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsICI8L2Nv
bGdyb3VwPjwvdGFibGU+IiBdLAogICAgICAgICAgICAgICAgYXJlYTogWyAxLCAiPG1hcD4iLCAi
PC9tYXA+IiBdLAogICAgICAgICAgICAgICAgX2RlZmF1bHQ6IFsgMCwgIiIsICIiIF0KICAgICAg
ICB9OwoKd3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uOwp3cmFwTWFwLnRib2R5ID0g
d3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFw
TWFwLnRoZWFkOwp3cmFwTWFwLnRoID0gd3JhcE1hcC50ZDsKCi8vIElFIGNhbid0IHNlcmlhbGl6
ZSA8bGluaz4gYW5kIDxzY3JpcHQ+IHRhZ3Mgbm9ybWFsbHkKaWYgKCAhalF1ZXJ5LnN1cHBvcnQu
aHRtbFNlcmlhbGl6ZSApIHsKICAgICAgICB3cmFwTWFwLl9kZWZhdWx0ID0gWyAxLCAiZGl2PGRp
dj4iLCAiPC9kaXY+IiBdOwp9CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICB0ZXh0OiBmdW5j
dGlvbiggdGV4dCApIHsKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24odGV4
dCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
aSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KCB0
aGlzICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dCggdGV4dC5j
YWxsKHRoaXMsIGksIHNlbGYudGV4dCgpKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0ZXh0ICE9PSAi
b2JqZWN0IiAmJiB0ZXh0ICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCAodGhpc1swXSAmJiB0aGlzWzBdLm93bmVyRG9j
dW1lbnQgfHwgZG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKCB0ZXh0ICkgKTsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnRleHQoIHRoaXMgKTsKICAgICAg
ICB9LAoKICAgICAgICB3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHsKICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5KHRoaXMpLndyYXBBbGwoIGh0bWwuY2FsbCh0aGlzLCBpKSApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBpZiAoIHRoaXNbMF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBlbGVtZW50
cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3
cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQgKS5lcSgwKS5jbG9uZSh0
cnVlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpc1swXS5wYXJlbnROb2RlICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlz
WzBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXAubWFwKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBlbGVtID0gdGhpczsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBl
bGVtLmZpcnN0Q2hpbGQgJiYgZWxlbS5maXJzdENoaWxkLm5vZGVUeXBlID09PSAxICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0uZmlyc3RDaGls
ZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtOwogICAgICAgICAgICAgICAgICAgICAgICB9KS5hcHBl
bmQoIHRoaXMgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKICAgICAgICB9LAoKICAgICAgICB3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgewogICAg
ICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1sLmNhbGwodGhp
cywgaSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggY29udGVudHMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmQo
IGh0bWwgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgfSwKCiAgICAgICAgd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sICk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICB9LAoKICAgICAgICB1bndyYXA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiYm9keSIgKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5v
ZGVzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pLmVuZCgp
OwogICAgICAgIH0sCgogICAgICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkg
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCggZWxlbSApOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoK
ICAgICAgICBwcmVwZW5kOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5maXJzdENoaWxk
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAg
IH0sCgogICAgICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIHRo
aXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgewogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVm
b3JlKCBlbGVtLCB0aGlzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHNldCA9IGpRdWVyeShhcmd1bWVudHNbMF0pOwogICAgICAgICAgICAgICAgICAg
ICAgICBzZXQucHVzaC5hcHBseSggc2V0LCB0aGlzLnRvQXJyYXkoKSApOwogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNldCwgImJlZm9yZSIsIGFyZ3VtZW50
cyApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGFmdGVyOiBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50
cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBhcmd1bWVudHMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2V0ID0g
dGhpcy5wdXNoU3RhY2soIHRoaXMsICJhZnRlciIsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAg
ICAgICAgICAgICBzZXQucHVzaC5hcHBseSggc2V0LCBqUXVlcnkoYXJndW1lbnRzWzBdKS50b0Fy
cmF5KCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBrZWVwRGF0YSBpcyBmb3IgaW50ZXJuYWwgdXNl
IG9ubHktLWRvIG5vdCBkb2N1bWVudAogICAgICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9y
LCBrZWVwRGF0YSApIHsKICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVs
ZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIXNlbGVjdG9yIHx8IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBbIGVsZW0gXSApLmxlbmd0
aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFrZWVwRGF0YSAmJiBl
bGVtLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRh
KCBbIGVsZW0gXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQoIGVsZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKICAgICAgICB9LAoKICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQg
cHJldmVudCBtZW1vcnkgbGVha3MKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5v
ZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5j
bGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgYW55IHJlbWFp
bmluZyBub2RlcwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RDaGls
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNoaWxkKCBl
bGVtLmZpcnN0Q2hpbGQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGNs
b25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CiAgICAg
ICAgICAgICAgICBkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2Ug
OiBkYXRhQW5kRXZlbnRzOwogICAgICAgICAgICAgICAgZGVlcERhdGFBbmRFdmVudHMgPSBkZWVw
RGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRz
OwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24gKCkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRz
LCBkZWVwRGF0YUFuZEV2ZW50cyApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAg
ICAgICAgaHRtbDogZnVuY3Rpb24oIHZhbHVlICkgewogICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1sw
XSAmJiB0aGlzWzBdLm5vZGVUeXBlID09PSAxID8KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzWzBdLmlubmVySFRNTC5yZXBsYWNlKHJpbmxpbmVqUXVlcnksICIiKSA6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsKCiAgICAgICAgICAgICAgICAvLyBTZWUg
aWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MCiAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmICFybm9jYWNo
ZS50ZXN0KCB2YWx1ZSApICYmCiAgICAgICAgICAgICAgICAgICAgICAgIChqUXVlcnkuc3VwcG9y
dC5sZWFkaW5nV2hpdGVzcGFjZSB8fCAhcmxlYWRpbmdXaGl0ZXNwYWNlLnRlc3QoIHZhbHVlICkp
ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICF3cmFwTWFwWyAocnRhZ05hbWUuZXhlYyggdmFs
dWUgKSB8fCBbIiIsICIiXSlbMV0udG9Mb3dlckNhc2UoKSBdICkgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJ4aHRtbFRhZywgIjwkMT48LyQyPiIpOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IG5v
ZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCB0aGlz
W2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tpXS5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB1c2luZyBpbm5lckhU
TUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKICAgICAgICAg
ICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSAp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oaSl7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5odG1sKCB2YWx1ZS5jYWxsKHRoaXMs
IGksIHNlbGYuaHRtbCgpKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBw
ZW5kKCB2YWx1ZSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgIH0sCgogICAgICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbiggdmFsdWUgKSB7
CiAgICAgICAgICAgICAgICBpZiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZWxlbWVudHMgYXJl
IHJlbW92ZWQgZnJvbSB0aGUgRE9NIGJlZm9yZSB0aGV5IGFyZSBpbnNlcnRlZAogICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGlzIGNhbiBoZWxwIGZpeCByZXBsYWNpbmcgYSBwYXJlbnQgd2l0
aCBjaGlsZCBlbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkodGhpcyksIG9sZCA9IHNlbGYuaHRtbCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBsYWNlV2l0aCggdmFs
dWUuY2FsbCggdGhpcywgaSwgb2xkICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0galF1ZXJ5KCB2YWx1ZSApLmRldGFjaCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhp
cy5uZXh0U2libGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmVudCA9IHRoaXMucGFyZW50Tm9kZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5KCB0aGlzICkucmVtb3ZlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggbmV4dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeShuZXh0KS5iZWZvcmUoIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eShwYXJlbnQpLmFwcGVuZCggdmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID8KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KGpRdWVyeS5pc0Z1bmN0
aW9uKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSksICJyZXBsYWNlV2l0aCIsIHZhbHVlICkgOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXM7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfSwKCiAgICAgICAgZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmUoIHNlbGVjdG9yLCB0cnVlICk7CiAgICAgICAgfSwK
CiAgICAgICAgZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKSB7CiAg
ICAgICAgICAgICAgICB2YXIgcmVzdWx0cywgZmlyc3QsIGZyYWdtZW50LCBwYXJlbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXJnc1swXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgc2NyaXB0cyA9IFtdOwoKICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGNsb25lTm9kZSBm
cmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdAogICAgICAgICAgICAgICAg
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hlY2tDbG9uZSAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAz
ICYmIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykuZG9tTWFuaXAoIGFy
Z3MsIHRhYmxlLCBjYWxsYmFjaywgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KHZhbHVlKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbihpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVl
cnkodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IHZhbHVl
LmNhbGwodGhpcywgaSwgdGFibGUgPyBzZWxmLmh0bWwoKSA6IHVuZGVmaW5lZCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxi
YWNrICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIGlmICggdGhpc1swXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50ID0gdmFsdWUgJiYgdmFsdWUucGFyZW50Tm9kZTsKCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHdlJ3JlIGluIGEgZnJhZ21lbnQsIGp1c3QgdXNlIHRoYXQgaW5zdGVhZCBvZiBidWls
ZGluZyBhIG5ldyBvbmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9y
dC5wYXJlbnROb2RlICYmIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IDExICYmIHBhcmVu
dC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gdGhpcy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0cyA9IHsgZnJhZ21lbnQ6IHBhcmVudCB9OwoKICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRzID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIGFyZ3MsIHRoaXMsIHNjcmlwdHMgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQg
PSByZXN1bHRzLmZyYWdtZW50OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmcmFnbWVu
dC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdCA9IGZyYWdtZW50ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZmlyc3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGFibGUgPSB0YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoLCBsYXN0SW5kZXggPSBsIC0gMTsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlID8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290KHRoaXNbaV0sIGZp
cnN0KSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpc1tpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgZG8gbm90IGxlYWsgbWVtb3J5IGJ5IGluYWR2ZXJ0
ZW50bHkgZGlzY2FyZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgKHdoaWNoIG1pZ2h0IGhhdmUgYXR0YWNo
ZWQgZGF0YSkgaW5zdGVhZCBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB1c2luZyBpdDsgaW4gYWRkaXRpb24sIHVzZSB0aGUgb3JpZ2luYWwgZnJh
Z21lbnQgb2JqZWN0IGZvciB0aGUgbGFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpdGVtIGluc3RlYWQgb2YgZmlyc3QgYmVjYXVzZSBpdCBjYW4g
ZW5kIHVwIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2VydGFpbiBzaXR1YXRpb25zIChCdWcgIzgw
NzApLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBG
cmFnbWVudHMgZnJvbSB0aGUgZnJhZ21lbnQgY2FjaGUgbXVzdCBhbHdheXMgYmUgY2xvbmVkIGFu
ZCBuZXZlciB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGluIHBsYWNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHRzLmNhY2hlYWJsZSB8fCAobCA+IDEgJiYgaSA8IGxhc3RJbmRleCkgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5jbG9uZSggZnJhZ21lbnQsIHRydWUsIHRydWUgKSA6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHNjcmlwdHMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5lYWNoKCBzY3JpcHRzLCBldmFsU2NyaXB0ICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAg
ICAgICB9Cn0pOwoKZnVuY3Rpb24gcm9vdCggZWxlbSwgY3VyICkgewogICAgICAgIHJldHVybiBq
UXVlcnkubm9kZU5hbWUoZWxlbSwgInRhYmxlIikgPwogICAgICAgICAgICAgICAgKGVsZW0uZ2V0
RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF0gfHwKICAgICAgICAgICAgICAgIGVsZW0uYXBw
ZW5kQ2hpbGQoZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpKSA6CiAg
ICAgICAgICAgICAgICBlbGVtOwp9CgpmdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0
ICkgewoKICAgICAgICBpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeS5oYXNEYXRh
KCBzcmMgKSApIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZh
ciBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAogICAgICAgICAgICAgICAgb2xkRGF0YSA9
IGpRdWVyeS5kYXRhKCBzcmMgKSwKICAgICAgICAgICAgICAgIGN1ckRhdGEgPSBqUXVlcnkuZGF0
YSggZGVzdCwgb2xkRGF0YSApOwoKICAgICAgICAvLyBTd2l0Y2ggdG8gdXNlIHRoZSBpbnRlcm5h
bCBkYXRhIG9iamVjdCwgaWYgaXQgZXhpc3RzLCBmb3IgdGhlIG5leHQKICAgICAgICAvLyBzdGFn
ZSBvZiBkYXRhIGNvcHlpbmcKICAgICAgICBpZiAoIChvbGREYXRhID0gb2xkRGF0YVsgaW50ZXJu
YWxLZXkgXSkgKSB7CiAgICAgICAgICAgICAgICB2YXIgZXZlbnRzID0gb2xkRGF0YS5ldmVudHM7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyRGF0YSA9IGN1ckRhdGFbIGludGVy
bmFsS2V5IF0gPSBqUXVlcnkuZXh0ZW5kKHt9LCBvbGREYXRhKTsKCiAgICAgICAgICAgICAgICBp
ZiAoIGV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGN1ckRhdGEuaGFu
ZGxlOwogICAgICAgICAgICAgICAgICAgICAgICBjdXJEYXRhLmV2ZW50cyA9IHt9OwoKICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIHR5cGUgaW4gZXZlbnRzICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBd
Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUgKyAoIGV2ZW50c1sgdHlwZSBdWyBp
IF0ubmFtZXNwYWNlID8gIi4iIDogIiIgKSArIGV2ZW50c1sgdHlwZSBdWyBpIF0ubmFtZXNwYWNl
LCBldmVudHNbIHR5cGUgXVsgaSBdLCBldmVudHNbIHR5cGUgXVsgaSBdLmRhdGEgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCmZ1bmN0aW9uIGNsb25lRml4QXR0cmlidXRlcygg
c3JjLCBkZXN0ICkgewogICAgICAgIHZhciBub2RlTmFtZTsKCiAgICAgICAgLy8gV2UgZG8gbm90
IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIG5vbi1FbGVtZW50cwogICAgICAgIGlmICggZGVzdC5u
b2RlVHlwZSAhPT0gMSApIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAg
ICAgIC8vIGNsZWFyQXR0cmlidXRlcyByZW1vdmVzIHRoZSBhdHRyaWJ1dGVzLCB3aGljaCB3ZSBk
b24ndCB3YW50LAogICAgICAgIC8vIGJ1dCBhbHNvIHJlbW92ZXMgdGhlIGF0dGFjaEV2ZW50IGV2
ZW50cywgd2hpY2ggd2UgKmRvKiB3YW50CiAgICAgICAgaWYgKCBkZXN0LmNsZWFyQXR0cmlidXRl
cyApIHsKICAgICAgICAgICAgICAgIGRlc3QuY2xlYXJBdHRyaWJ1dGVzKCk7CiAgICAgICAgfQoK
ICAgICAgICAvLyBtZXJnZUF0dHJpYnV0ZXMsIGluIGNvbnRyYXN0LCBvbmx5IG1lcmdlcyBiYWNr
IG9uIHRoZQogICAgICAgIC8vIG9yaWdpbmFsIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZXZlbnRzCiAg
ICAgICAgaWYgKCBkZXN0Lm1lcmdlQXR0cmlidXRlcyApIHsKICAgICAgICAgICAgICAgIGRlc3Qu
bWVyZ2VBdHRyaWJ1dGVzKCBzcmMgKTsKICAgICAgICB9CgogICAgICAgIG5vZGVOYW1lID0gZGVz
dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAvLyBJRTYtOCBmYWlsIHRvIGNsb25l
IGNoaWxkcmVuIGluc2lkZSBvYmplY3QgZWxlbWVudHMgdGhhdCB1c2UKICAgICAgICAvLyB0aGUg
cHJvcHJpZXRhcnkgY2xhc3NpZCBhdHRyaWJ1dGUgdmFsdWUgKHJhdGhlciB0aGFuIHRoZSB0eXBl
CiAgICAgICAgLy8gYXR0cmlidXRlKSB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBjb250ZW50IHRv
IGRpc3BsYXkKICAgICAgICBpZiAoIG5vZGVOYW1lID09PSAib2JqZWN0IiApIHsKICAgICAgICAg
ICAgICAgIGRlc3Qub3V0ZXJIVE1MID0gc3JjLm91dGVySFRNTDsKCiAgICAgICAgfSBlbHNlIGlm
ICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgKHNyYy50eXBlID09PSAiY2hlY2tib3giIHx8IHNy
Yy50eXBlID09PSAicmFkaW8iKSApIHsKICAgICAgICAgICAgICAgIC8vIElFNi04IGZhaWxzIHRv
IHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3gKICAgICAgICAg
ICAgICAgIC8vIG9yIHJhZGlvIGJ1dHRvbi4gV29yc2UsIElFNi03IGZhaWwgdG8gZ2l2ZSB0aGUg
Y2xvbmVkIGVsZW1lbnQKICAgICAgICAgICAgICAgIC8vIGEgY2hlY2tlZCBhcHBlYXJhbmNlIGlm
IHRoZSBkZWZhdWx0Q2hlY2tlZCB2YWx1ZSBpc24ndCBhbHNvIHNldAogICAgICAgICAgICAgICAg
aWYgKCBzcmMuY2hlY2tlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5kZWZhdWx0
Q2hlY2tlZCA9IGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIElFNi03IGdldCBjb25mdXNlZCBhbmQgZW5kIHVwIHNldHRpbmcg
dGhlIHZhbHVlIG9mIGEgY2xvbmVkCiAgICAgICAgICAgICAgICAvLyBjaGVja2JveC9yYWRpbyBi
dXR0b24gdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgIm9uIgogICAgICAgICAgICAgICAg
aWYgKCBkZXN0LnZhbHVlICE9PSBzcmMudmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3QudmFsdWUgPSBzcmMudmFsdWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIC8vIElF
Ni04IGZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNl
bGVjdGVkCiAgICAgICAgLy8gc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKICAgICAgICB9IGVs
c2UgaWYgKCBub2RlTmFtZSA9PT0gIm9wdGlvbiIgKSB7CiAgICAgICAgICAgICAgICBkZXN0LnNl
bGVjdGVkID0gc3JjLmRlZmF1bHRTZWxlY3RlZDsKCiAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8g
c2V0IHRoZSBkZWZhdWx0VmFsdWUgdG8gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbgogICAgICAgIC8v
IGNsb25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRzCiAgICAgICAgfSBlbHNlIGlmICgg
bm9kZU5hbWUgPT09ICJpbnB1dCIgfHwgbm9kZU5hbWUgPT09ICJ0ZXh0YXJlYSIgKSB7CiAgICAg
ICAgICAgICAgICBkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7CiAgICAgICAg
fQoKICAgICAgICAvLyBFdmVudCBkYXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9mIGNvcGll
ZCBpZiB0aGUgZXhwYW5kbwogICAgICAgIC8vIGdldHMgY29waWVkIHRvbwogICAgICAgIGRlc3Qu
cmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOwp9CgpqUXVlcnkuYnVpbGRGcmFnbWVu
dCA9IGZ1bmN0aW9uKCBhcmdzLCBub2Rlcywgc2NyaXB0cyApIHsKICAgICAgICB2YXIgZnJhZ21l
bnQsIGNhY2hlYWJsZSwgY2FjaGVyZXN1bHRzLCBkb2M7CgogIC8vIG5vZGVzIG1heSBjb250YWlu
IGVpdGhlciBhbiBleHBsaWNpdCBkb2N1bWVudCBvYmplY3QsCiAgLy8gYSBqUXVlcnkgY29sbGVj
dGlvbiBvciBjb250ZXh0IG9iamVjdC4KICAvLyBJZiBub2Rlc1swXSBjb250YWlucyBhIHZhbGlk
IG9iamVjdCB0byBhc3NpZ24gdG8gZG9jCiAgaWYgKCBub2RlcyAmJiBub2Rlc1swXSApIHsKICAg
IGRvYyA9IG5vZGVzWzBdLm93bmVyRG9jdW1lbnQgfHwgbm9kZXNbMF07CiAgfQoKICAvLyBFbnN1
cmUgdGhhdCBhbiBhdHRyIG9iamVjdCBkb2Vzbid0IGluY29ycmVjdGx5IHN0YW5kIGluIGFzIGEg
ZG9jdW1lbnQgb2JqZWN0CiAgICAgICAgLy8gQ2hyb21lIGFuZCBGaXJlZm94IHNlZW0gdG8gYWxs
b3cgdGhpcyB0byBvY2N1ciBhbmQgd2lsbCB0aHJvdyBleGNlcHRpb24KICAgICAgICAvLyBGaXhl
cyAjODk1MAogICAgICAgIGlmICggIWRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50ICkgewogICAg
ICAgICAgICAgICAgZG9jID0gZG9jdW1lbnQ7CiAgICAgICAgfQoKICAgICAgICAvLyBPbmx5IGNh
Y2hlICJzbWFsbCIgKDEvMiBLQikgSFRNTCBzdHJpbmdzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0
aCB0aGUgbWFpbiBkb2N1bWVudAogICAgICAgIC8vIENsb25pbmcgb3B0aW9ucyBsb3NlcyB0aGUg
c2VsZWN0ZWQgc3RhdGUsIHNvIGRvbid0IGNhY2hlIHRoZW0KICAgICAgICAvLyBJRSA2IGRvZXNu
J3QgbGlrZSBpdCB3aGVuIHlvdSBwdXQgPG9iamVjdD4gb3IgPGVtYmVkPiBlbGVtZW50cyBpbiBh
IGZyYWdtZW50CiAgICAgICAgLy8gQWxzbywgV2ViS2l0IGRvZXMgbm90IGNsb25lICdjaGVja2Vk
JyBhdHRyaWJ1dGVzIG9uIGNsb25lTm9kZSwgc28gZG9uJ3QgY2FjaGUKICAgICAgICBpZiAoIGFy
Z3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAic3RyaW5nIiAmJiBhcmdzWzBd
Lmxlbmd0aCA8IDUxMiAmJiBkb2MgPT09IGRvY3VtZW50ICYmCiAgICAgICAgICAgICAgICBhcmdz
WzBdLmNoYXJBdCgwKSA9PT0gIjwiICYmICFybm9jYWNoZS50ZXN0KCBhcmdzWzBdICkgJiYgKGpR
dWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGFyZ3NbMF0gKSkgKSB7
CgogICAgICAgICAgICAgICAgY2FjaGVhYmxlID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBjYWNo
ZXJlc3VsdHMgPSBqUXVlcnkuZnJhZ21lbnRzWyBhcmdzWzBdIF07CiAgICAgICAgICAgICAgICBp
ZiAoIGNhY2hlcmVzdWx0cyAmJiBjYWNoZXJlc3VsdHMgIT09IDEgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGZyYWdtZW50ID0gY2FjaGVyZXN1bHRzOwogICAgICAgICAgICAgICAgfQogICAg
ICAgIH0KCiAgICAgICAgaWYgKCAhZnJhZ21lbnQgKSB7CiAgICAgICAgICAgICAgICBmcmFnbWVu
dCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgICAgICAgICAgICBqUXVlcnku
Y2xlYW4oIGFyZ3MsIGRvYywgZnJhZ21lbnQsIHNjcmlwdHMgKTsKICAgICAgICB9CgogICAgICAg
IGlmICggY2FjaGVhYmxlICkgewogICAgICAgICAgICAgICAgalF1ZXJ5LmZyYWdtZW50c1sgYXJn
c1swXSBdID0gY2FjaGVyZXN1bHRzID8gZnJhZ21lbnQgOiAxOwogICAgICAgIH0KCiAgICAgICAg
cmV0dXJuIHsgZnJhZ21lbnQ6IGZyYWdtZW50LCBjYWNoZWFibGU6IGNhY2hlYWJsZSB9Owp9OwoK
alF1ZXJ5LmZyYWdtZW50cyA9IHt9OwoKalF1ZXJ5LmVhY2goewogICAgICAgIGFwcGVuZFRvOiAi
YXBwZW5kIiwKICAgICAgICBwcmVwZW5kVG86ICJwcmVwZW5kIiwKICAgICAgICBpbnNlcnRCZWZv
cmU6ICJiZWZvcmUiLAogICAgICAgIGluc2VydEFmdGVyOiAiYWZ0ZXIiLAogICAgICAgIHJlcGxh
Y2VBbGw6ICJyZXBsYWNlV2l0aCIKfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgewogICAg
ICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgewogICAgICAgICAg
ICAgICAgdmFyIHJldCA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQgPSBqUXVl
cnkoIHNlbGVjdG9yICksCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHRoaXMubGVu
Z3RoID09PSAxICYmIHRoaXNbMF0ucGFyZW50Tm9kZTsKCiAgICAgICAgICAgICAgICBpZiAoIHBh
cmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IDExICYmIHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0
aCA9PT0gMSAmJiBpbnNlcnQubGVuZ3RoID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRbIG9yaWdpbmFsIF0oIHRoaXNbMF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gaW5zZXJ0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSAoaSA+IDAgPyB0aGlz
LmNsb25lKHRydWUpIDogdGhpcykuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5KCBpbnNlcnRbaV0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSByZXQuY29uY2F0KCBlbGVtcyApOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNo
U3RhY2soIHJldCwgbmFtZSwgaW5zZXJ0LnNlbGVjdG9yICk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfTsKfSk7CgpmdW5jdGlvbiBnZXRBbGwoIGVsZW0gKSB7CiAgICAgICAgaWYgKCAiZ2V0
RWxlbWVudHNCeVRhZ05hbWUiIGluIGVsZW0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bS5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioiICk7CgogICAgICAgIH0gZWxzZSBpZiAoICJxdWVy
eVNlbGVjdG9yQWxsIiBpbiBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucXVl
cnlTZWxlY3RvckFsbCggIioiICk7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gW107CiAgICAgICAgfQp9CgovLyBVc2VkIGluIGNsZWFuLCBmaXhlcyB0aGUgZGVmYXVs
dENoZWNrZWQgcHJvcGVydHkKZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7CiAg
ICAgICAgaWYgKCBlbGVtLnR5cGUgPT09ICJjaGVja2JveCIgfHwgZWxlbS50eXBlID09PSAicmFk
aW8iICkgewogICAgICAgICAgICAgICAgZWxlbS5kZWZhdWx0Q2hlY2tlZCA9IGVsZW0uY2hlY2tl
ZDsKICAgICAgICB9Cn0KLy8gRmluZHMgYWxsIGlucHV0cyBhbmQgcGFzc2VzIHRoZW0gdG8gZml4
RGVmYXVsdENoZWNrZWQKZnVuY3Rpb24gZmluZElucHV0cyggZWxlbSApIHsKICAgICAgICBpZiAo
IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApICkgewogICAgICAgICAgICAgICAgZml4
RGVmYXVsdENoZWNrZWQoIGVsZW0gKTsKICAgICAgICB9IGVsc2UgaWYgKCAiZ2V0RWxlbWVudHNC
eVRhZ05hbWUiIGluIGVsZW0gKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZ3JlcCggZWxlbS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSwgZml4RGVmYXVsdENoZWNrZWQgKTsKICAgICAg
ICB9Cn0KCmpRdWVyeS5leHRlbmQoewogICAgICAgIGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0
YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CiAgICAgICAgICAgICAgICB2YXIgY2xv
bmUgPSBlbGVtLmNsb25lTm9kZSh0cnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzcmNFbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0RWxlbWVu
dHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsKCiAgICAgICAgICAgICAgICBp
ZiAoICghalF1ZXJ5LnN1cHBvcnQubm9DbG9uZUV2ZW50IHx8ICFqUXVlcnkuc3VwcG9ydC5ub0Ns
b25lQ2hlY2tlZCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxlbS5ub2Rl
VHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSkgJiYgIWpRdWVyeS5pc1hNTERvYyhl
bGVtKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgY29waWVzIGV2ZW50cyBib3Vu
ZCB2aWEgYXR0YWNoRXZlbnQgd2hlbiB1c2luZyBjbG9uZU5vZGUuCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENhbGxpbmcgZGV0YWNoRXZlbnQgb24gdGhlIGNsb25lIHdpbGwgYWxzbyByZW1v
dmUgdGhlIGV2ZW50cwogICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBvcmlnaW5h
bC4gSW4gb3JkZXIgdG8gZ2V0IGFyb3VuZCB0aGlzLCB3ZSB1c2Ugc29tZQogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBwcm9wcmlldGFyeSBtZXRob2RzIHRvIGNsZWFyIHRoZSBldmVudHMuIFRo
YW5rcyB0byBNb29Ub29scwogICAgICAgICAgICAgICAgICAgICAgICAvLyBndXlzIGZvciB0aGlz
IGhvdG5lc3MuCgogICAgICAgICAgICAgICAgICAgICAgICBjbG9uZUZpeEF0dHJpYnV0ZXMoIGVs
ZW0sIGNsb25lICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2luZyBTaXp6bGUgaGVy
ZSBpcyBjcmF6eSBzbG93LCBzbyB3ZSB1c2UgZ2V0RWxlbWVudHNCeVRhZ05hbWUKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW5zdGVhZAogICAgICAgICAgICAgICAgICAgICAgICBzcmNFbGVt
ZW50cyA9IGdldEFsbCggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICBkZXN0RWxlbWVu
dHMgPSBnZXRBbGwoIGNsb25lICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlyZCBp
dGVyYXRpb24gYmVjYXVzZSBJRSB3aWxsIHJlcGxhY2UgdGhlIGxlbmd0aCBwcm9wZXJ0eQogICAg
ICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91IGFyZSBjbG9uaW5n
IHRoZSBib2R5IGFuZCBvbmUgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsZW1l
bnRzIG9uIHRoZSBwYWdlIGhhcyBhIG5hbWUgb3IgaWQgb2YgImxlbmd0aCIKICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggaSA9IDA7IHNyY0VsZW1lbnRzW2ldOyArK2kgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIG5v
ZGUgaXMgbm90IG51bGw7IEZpeGVzICM5NTg3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBkZXN0RWxlbWVudHNbaV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbG9uZUZpeEF0dHJpYnV0ZXMoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVu
dHNbaV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDb3B5IHRo
ZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCiAgICAgICAgICAgICAgICBp
ZiAoIGRhdGFBbmRFdmVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lQ29weUV2
ZW50KCBlbGVtLCBjbG9uZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWVwRGF0
YUFuZEV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNFbGVtZW50
cyA9IGdldEFsbCggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RF
bGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDA7IHNyY0VsZW1lbnRzW2ldOyArK2kgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbaV0sIGRl
c3RFbGVtZW50c1tpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNy
Y0VsZW1lbnRzID0gZGVzdEVsZW1lbnRzID0gbnVsbDsKCiAgICAgICAgICAgICAgICAvLyBSZXR1
cm4gdGhlIGNsb25lZCBzZXQKICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTsKICAgICAgICB9
LAoKICAgICAgICBjbGVhbjogZnVuY3Rpb24oIGVsZW1zLCBjb250ZXh0LCBmcmFnbWVudCwgc2Ny
aXB0cyApIHsKICAgICAgICAgICAgICAgIHZhciBjaGVja1NjcmlwdFR5cGU7CgogICAgICAgICAg
ICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CgogICAgICAgICAgICAgICAgLy8g
IWNvbnRleHQuY3JlYXRlRWxlbWVudCBmYWlscyBpbiBJRSB3aXRoIGFuIGVycm9yIGJ1dCByZXR1
cm5zIHR5cGVvZiAnb2JqZWN0JwogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5j
cmVhdGVFbGVtZW50ID09PSAidW5kZWZpbmVkIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dCA9IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0WzBdICYmIGNvbnRleHRb
MF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICB2YXIgcmV0ID0gW10sIGo7CgogICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
LCBlbGVtOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIGVsZW0gPT09ICJudW1iZXIiICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0gKz0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgaHRtbCBzdHJpbmcgaW50byBET00gbm9kZXMK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmh0bWwudGVzdCggZWxlbSAp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNvbnRl
eHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4
ICJYSFRNTCItc3R5bGUgdGFncyBpbiBhbGwgYnJvd3NlcnMKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLnJlcGxhY2UocnhodG1sVGFnLCAiPCQxPjwv
JDI+Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpbSB3
aGl0ZXNwYWNlLCBvdGhlcndpc2UgaW5kZXhPZiB3b24ndCB3b3JrIGFzIGV4cGVjdGVkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gKHJ0YWdOYW1lLmV4
ZWMoIGVsZW0gKSB8fCBbIiIsICIiXSlbMV0udG9Mb3dlckNhc2UoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8
IHdyYXBNYXAuX2RlZmF1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlcHRoID0gd3JhcFswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGl2ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHbyB0byBodG1sIGFuZCBi
YWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBwZXJzCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gd3JhcFsxXSArIGVsZW0gKyB3cmFwWzJd
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhl
IHJpZ2h0IGRlcHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoIGRlcHRoLS0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpdiA9IGRpdi5sYXN0Q2hpbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
UmVtb3ZlIElFJ3MgYXV0b2luc2VydGVkIDx0Ym9keT4gZnJvbSB0YWJsZSBmcmFnbWVudHMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0
LnRib2R5ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gU3RyaW5nIHdhcyBhIDx0YWJsZT4sICptYXkqIGhhdmUgc3B1cmlvdXMgPHRib2R5Pgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzQm9k
eSA9IHJ0Ym9keS50ZXN0KGVsZW0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRib2R5ID0gdGFnID09PSAidGFibGUiICYmICFoYXNCb2R5
ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpdi5maXJzdENoaWxkICYmIGRpdi5maXJzdENoaWxkLmNoaWxkTm9kZXMgOgoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jh
cFsxXSA9PT0gIjx0YWJsZT4iICYmICFoYXNCb2R5ID8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmNoaWxk
Tm9kZXMgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSB0Ym9keS5sZW5ndGggLSAxOyBqID49IDAgOyAt
LWogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRib2R5WyBqIF0sICJ0Ym9keSIgKSAmJiAhdGJv
ZHlbIGogXS5jaGlsZE5vZGVzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRib2R5WyBqIF0ucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZCggdGJvZHlbIGogXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGNv
bXBsZXRlbHkga2lsbHMgbGVhZGluZyB3aGl0ZXNwYWNlIHdoZW4gaW5uZXJIVE1MIGlzIHVzZWQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBw
b3J0LmxlYWRpbmdXaGl0ZXNwYWNlICYmIHJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCBlbGVtICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5p
bnNlcnRCZWZvcmUoIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIHJsZWFkaW5nV2hpdGVzcGFjZS5l
eGVjKGVsZW0pWzBdICksIGRpdi5maXJzdENoaWxkICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbSA9IGRpdi5jaGlsZE5vZGVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
UmVzZXRzIGRlZmF1bHRDaGVja2VkIGZvciBhbnkgcmFkaW9zIGFuZCBjaGVja2JveGVzCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGFib3V0IHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBET00gaW4g
SUUgNi83ICgjODA2MCkKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbjsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuYXBwZW5kQ2hlY2tlZCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW1bMF0gJiYgdHlwZW9mIChsZW4g
PSBlbGVtLmxlbmd0aCkgPT09ICJudW1iZXIiICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCBsZW47IGorKyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZElucHV0cyggZWxlbVtqXSAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaW5kSW5wdXRzKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGVsZW0ubm9kZVR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0LnB1c2goIGVsZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBqUXVlcnkubWVyZ2UoIHJldCwgZWxlbSAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgaWYgKCBmcmFnbWVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTY3Jp
cHRUeXBlID0gZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICFlbGVtLnR5cGUgfHwgcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkg
PSAwOyByZXRbaV07IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHNjcmlwdHMgJiYgalF1ZXJ5Lm5vZGVOYW1lKCByZXRbaV0sICJzY3JpcHQiICkgJiYgKCFyZXRb
aV0udHlwZSB8fCByZXRbaV0udHlwZS50b0xvd2VyQ2FzZSgpID09PSAidGV4dC9qYXZhc2NyaXB0
IikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzLnB1
c2goIHJldFtpXS5wYXJlbnROb2RlID8gcmV0W2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHJl
dFtpXSApIDogcmV0W2ldICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldFtpXS5u
b2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGpzVGFncyA9IGpRdWVyeS5ncmVwKCByZXRbaV0uZ2V0RWxlbWVudHNCeVRh
Z05hbWUoICJzY3JpcHQiICksIGNoZWNrU2NyaXB0VHlwZSApOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZS5hcHBseSggcmV0LCBbaSAr
IDEsIDBdLmNvbmNhdCgganNUYWdzICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdt
ZW50LmFwcGVuZENoaWxkKCByZXRbaV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIGNsZWFuRGF0YTogZnVuY3Rp
b24oIGVsZW1zICkgewogICAgICAgICAgICAgICAgdmFyIGRhdGEsIGlkLCBjYWNoZSA9IGpRdWVy
eS5jYWNoZSwgaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywgc3BlY2lhbCA9IGpRdWVyeS5l
dmVudC5zcGVjaWFsLAogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVFeHBhbmRvID0galF1
ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbzsKCiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDAsIGVsZW07IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0RhdGFbZWxlbS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgaWQgPSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwoKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBpZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gY2FjaGVb
IGlkIF0gJiYgY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF07CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZGF0YSAmJiBkYXRhLmV2ZW50cyApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciB0eXBlIGluIGRhdGEuZXZlbnRzICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNw
ZWNpYWxbIHR5cGUgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEg
c2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJl
bW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTnVsbCB0aGUgRE9NIHJlZmVyZW5jZSB0byBhdm9pZCBJRTYvNy84IGxlYWsgKCM3MDU0KQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLmhhbmRsZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5o
YW5kbGUuZWxlbSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGRlbGV0ZUV4cGFuZG8gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5yZW1vdmVBdHRyaWJ1
dGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92
ZUF0dHJpYnV0ZSggalF1ZXJ5LmV4cGFuZG8gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsgaWQg
XTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0K
fSk7CgpmdW5jdGlvbiBldmFsU2NyaXB0KCBpLCBlbGVtICkgewogICAgICAgIGlmICggZWxlbS5z
cmMgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuYWpheCh7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHVybDogZWxlbS5zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICJzY3JpcHQiCiAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwo
ICggZWxlbS50ZXh0IHx8IGVsZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lckhUTUwgfHwgIiIg
KS5yZXBsYWNlKCByY2xlYW5TY3JpcHQsICIvKiQwKi8iICkgKTsKICAgICAgICB9CgogICAgICAg
IGlmICggZWxlbS5wYXJlbnROb2RlICkgewogICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKCBlbGVtICk7CiAgICAgICAgfQp9CgoKCgp2YXIgcmFscGhhID0gL2FscGhh
XChbXildKlwpL2ksCiAgICAgICAgcm9wYWNpdHkgPSAvb3BhY2l0eT0oW14pXSopLywKICAgICAg
ICAvLyBmaXhlZCBmb3IgSUU5LCBzZWUgIzgzNDYKICAgICAgICBydXBwZXIgPSAvKFtBLVpdfF5t
cykvZywKICAgICAgICBybnVtcHggPSAvXi0/XGQrKD86cHgpPyQvaSwKICAgICAgICBybnVtID0g
L14tP1xkLywKICAgICAgICBycmVsTnVtID0gL14oW1wtK10pPShbXC0rLlxkZV0rKS8sCgogICAg
ICAgIGNzc1Nob3cgPSB7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCB2aXNpYmlsaXR5OiAiaGlkZGVu
IiwgZGlzcGxheTogImJsb2NrIiB9LAogICAgICAgIGNzc1dpZHRoID0gWyAiTGVmdCIsICJSaWdo
dCIgXSwKICAgICAgICBjc3NIZWlnaHQgPSBbICJUb3AiLCAiQm90dG9tIiBdLAogICAgICAgIGN1
ckNTUywKCiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZSwKICAgICAgICBjdXJyZW50U3R5bGU7Cgpq
UXVlcnkuZm4uY3NzID0gZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewogICAgICAgIC8vIFNldHRp
bmcgJ3VuZGVmaW5lZCcgaXMgYSBuby1vcAogICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA9
PT0gMiAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgbmFtZSwg
dmFsdWUsIHRydWUsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8KICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApOwogICAgICAgIH0pOwp9OwoKalF1ZXJ5LmV4dGVu
ZCh7CiAgICAgICAgLy8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5n
IHRoZSBkZWZhdWx0CiAgICAgICAgLy8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBh
IHN0eWxlIHByb3BlcnR5CiAgICAgICAgY3NzSG9va3M6IHsKICAgICAgICAgICAgICAgIG9wYWNp
dHk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0
ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCAib3BhY2l0eSIsICJvcGFj
aXR5IiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
dCA9PT0gIiIgPyAiMSIgOiByZXQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bS5zdHlsZS5vcGFjaXR5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAg
IC8vIEV4Y2x1ZGUgdGhlIGZvbGxvd2luZyBjc3MgcHJvcGVydGllcyB0byBhZGQgcHgKICAgICAg
ICBjc3NOdW1iZXI6IHsKICAgICAgICAgICAgICAgICJmaWxsT3BhY2l0eSI6IHRydWUsCiAgICAg
ICAgICAgICAgICAiZm9udFdlaWdodCI6IHRydWUsCiAgICAgICAgICAgICAgICAibGluZUhlaWdo
dCI6IHRydWUsCiAgICAgICAgICAgICAgICAib3BhY2l0eSI6IHRydWUsCiAgICAgICAgICAgICAg
ICAib3JwaGFucyI6IHRydWUsCiAgICAgICAgICAgICAgICAid2lkb3dzIjogdHJ1ZSwKICAgICAg
ICAgICAgICAgICJ6SW5kZXgiOiB0cnVlLAogICAgICAgICAgICAgICAgInpvb20iOiB0cnVlCiAg
ICAgICAgfSwKCiAgICAgICAgLy8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdp
c2ggdG8gZml4IGJlZm9yZQogICAgICAgIC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWUK
ICAgICAgICBjc3NQcm9wczogewogICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIGZsb2F0IGNz
cyBwcm9wZXJ0eQogICAgICAgICAgICAgICAgImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQuY3NzRmxv
YXQgPyAiY3NzRmxvYXQiIDogInN0eWxlRmxvYXQiCiAgICAgICAgfSwKCiAgICAgICAgLy8gR2V0
IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGUKICAgICAgICBzdHlsZTog
ZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHsKICAgICAgICAgICAgICAgIC8v
IERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwogICAgICAgICAgICAg
ICAgaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09
IDggfHwgIWVsZW0uc3R5bGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3
b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKICAgICAgICAgICAgICAgIHZhciByZXQsIHR5cGUs
IG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLAogICAgICAgICAgICAgICAgICAg
ICAgICBzdHlsZSA9IGVsZW0uc3R5bGUsIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFt
ZSBdOwoKICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0g
fHwgb3JpZ05hbWU7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBh
IHZhbHVlCiAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsdWU7CgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBjb252ZXJ0IHJlbGF0aXZlIG51bWJlciBzdHJpbmdzICgrPSBvciAtPSkgdG8g
cmVsYXRpdmUgbnVtYmVycy4gIzczNDUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBl
ID09PSAic3RyaW5nIiAmJiAocmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICggKyggcmV0WzFdICsgMSkgKiArcmV0
WzJdICkgKyBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICkgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcgIzkyMzcKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gIm51bWJlciI7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IE5hTiBhbmQgbnVs
bCB2YWx1ZXMgYXJlbid0IHNldC4gU2VlOiAjNzExNgogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHZhbHVlID09IG51bGwgfHwgdHlwZSA9PT0gIm51bWJlciIgJiYgaXNOYU4oIHZhbHVlICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIG51bWJlciB3YXMg
cGFzc2VkIGluLCBhZGQgJ3B4JyB0byB0aGUgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVy
dGllcykKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAibnVtYmVyIiAmJiAh
alF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSArPSAicHgiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1
ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29rcykgfHwgKHZhbHVlID0gaG9v
a3Muc2V0KCBlbGVtLCB2YWx1ZSApKSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdyYXBwZWQgdG8gcHJldmVudCBJRSBmcm9tIHRocm93aW5nIGVy
cm9ycyB3aGVuICdpbnZhbGlkJyB2YWx1ZXMgYXJlIHByb3ZpZGVkCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRml4ZXMgYnVnICM1NTA5CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
eWxlWyBuYW1lIF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNh
dGNoKGUpIHt9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdl
dCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVt
LCBmYWxzZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhl
IHN0eWxlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVbIG5hbWUg
XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBjc3M6IGZ1bmN0aW9uKCBl
bGVtLCBuYW1lLCBleHRyYSApIHsKICAgICAgICAgICAgICAgIHZhciByZXQsIGhvb2tzOwoKICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmln
aHQgbmFtZQogICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsK
ICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07CiAgICAgICAg
ICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgbmFtZTsKCiAgICAgICAg
ICAgICAgICAvLyBjc3NGbG9hdCBuZWVkcyBhIHNwZWNpYWwgdHJlYXRtZW50CiAgICAgICAgICAg
ICAgICBpZiAoIG5hbWUgPT09ICJjc3NGbG9hdCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUgPSAiZmxvYXQiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElm
IGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCiAg
ICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29r
cy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXQ7CgogICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBp
ZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXQKICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGN1ckNTUyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGN1ckNTUyggZWxlbSwgbmFtZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0s
CgogICAgICAgIC8vIEEgbWV0aG9kIGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJv
cGVydGllcyB0byBnZXQgY29ycmVjdCBjYWxjdWxhdGlvbnMKICAgICAgICBzd2FwOiBmdW5jdGlv
biggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICB2YXIgb2xkID0g
e307CgogICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNl
cnQgdGhlIG5ldyBvbmVzCiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBvcHRpb25z
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5h
bWUgXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9u
c1sgbmFtZSBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNh
bGwoIGVsZW0gKTsKCiAgICAgICAgICAgICAgICAvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKICAg
ICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQp9KTsKCi8vIERFUFJFQ0FURUQsIFVzZSBqUXVlcnkuY3NzKCkgaW5zdGVhZApq
UXVlcnkuY3VyQ1NTID0galF1ZXJ5LmNzczsKCmpRdWVyeS5lYWNoKFsiaGVpZ2h0IiwgIndpZHRo
Il0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewogICAgICAgIGpRdWVyeS5jc3NIb29rc1sgbmFtZSBd
ID0gewogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJh
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjb21wdXRlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0ub2Zmc2V0V2lkdGggIT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2V0V0goIGVsZW0sIG5hbWUsIGV4dHJhICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5zd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZ2V0
V0goIGVsZW0sIG5hbWUsIGV4dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcm51bXB4LnRlc3QoIHZh
bHVlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIG5lZ2F0
aXZlIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzICMxNTk5CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KCB2YWx1ZSApOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHZhbHVlID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAicHgiOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKfSk7CgppZiAoICFqUXVlcnkuc3Vw
cG9ydC5vcGFjaXR5ICkgewogICAgICAgIGpRdWVyeS5jc3NIb29rcy5vcGFjaXR5ID0gewogICAg
ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElFIHVzZXMgZmlsdGVycyBmb3Igb3BhY2l0eQogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcm9wYWNpdHkudGVzdCggKGNvbXB1dGVkICYmIGVsZW0uY3VycmVu
dFN0eWxlID8gZWxlbS5jdXJyZW50U3R5bGUuZmlsdGVyIDogZWxlbS5zdHlsZS5maWx0ZXIpIHx8
ICIiICkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcGFyc2VGbG9hdCggUmVn
RXhwLiQxICkgLyAxMDAgKSArICIiIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21wdXRlZCA/ICIxIiA6ICIiOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHN0eWxlID0gZWxlbS5zdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcGFjaXR5ID0galF1ZXJ5LmlzTmFOKCB2YWx1ZSApID8gIiIgOiAiYWxwaGEob3BhY2l0
eT0iICsgdmFsdWUgKiAxMDAgKyAiKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsdGVyID0gY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS5maWx0ZXIgfHwgc3R5bGUuZmls
dGVyIHx8ICIiOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgaGFzIHRyb3VibGUgd2l0
aCBvcGFjaXR5IGlmIGl0IGRvZXMgbm90IGhhdmUgbGF5b3V0CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZvcmNlIGl0IGJ5IHNldHRpbmcgdGhlIHpvb20gbGV2ZWwKICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGUuem9vbSA9IDE7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBz
ZXR0aW5nIG9wYWNpdHkgdG8gMSwgYW5kIG5vIG90aGVyIGZpbHRlcnMgZXhpc3QgLSBhdHRlbXB0
IHRvIHJlbW92ZSBmaWx0ZXIgYXR0cmlidXRlICM2NjUyCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdmFsdWUgPj0gMSAmJiBqUXVlcnkudHJpbSggZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwg
IiIgKSApID09PSAiIiApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0
dGluZyBzdHlsZS5maWx0ZXIgdG8gbnVsbCwgIiIgJiAiICIgc3RpbGwgbGVhdmUgImZpbHRlcjoi
IGluIHRoZSBjc3NUZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgImZp
bHRlcjoiIGlzIHByZXNlbnQgYXQgYWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdlIHdhbnQg
dG8gYXZvaWQgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0eWxlLnJl
bW92ZUF0dHJpYnV0ZSBpcyBJRSBPbmx5LCBidXQgc28gYXBwYXJlbnRseSBpcyB0aGlzIGNvZGUg
cGF0aC4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZUF0dHJp
YnV0ZSggImZpbHRlciIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYg
dGhlcmUgdGhlcmUgaXMgbm8gZmlsdGVyIHN0eWxlIGFwcGxpZWQgaW4gYSBjc3MgcnVsZSwgd2Ug
YXJlIGRvbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnRTdHls
ZSAmJiAhY3VycmVudFN0eWxlLmZpbHRlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVy
d2lzZSwgc2V0IG5ldyBmaWx0ZXIgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
LmZpbHRlciA9IHJhbHBoYS50ZXN0KCBmaWx0ZXIgKSA/CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwgb3BhY2l0eSApIDoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgKyAiICIgKyBvcGFjaXR5OwogICAgICAgICAgICAg
ICAgfQogICAgICAgIH07Cn0KCmpRdWVyeShmdW5jdGlvbigpIHsKICAgICAgICAvLyBUaGlzIGhv
b2sgY2Fubm90IGJlIGFkZGVkIHVudGlsIERPTSByZWFkeSBiZWNhdXNlIHRoZSBzdXBwb3J0IHRl
c3QKICAgICAgICAvLyBmb3IgaXQgaXMgbm90IHJ1biB1bnRpbCBhZnRlciBET00gcmVhZHkKICAg
ICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgewogICAgICAg
ICAgICAgICAgalF1ZXJ5LmNzc0hvb2tzLm1hcmdpblJpZ2h0ID0gewogICAgICAgICAgICAgICAg
ICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSBy
ZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXb3JrIGFyb3VuZCBieSB0ZW1wb3JhcmlseSBzZXR0aW5nIGVsZW1lbnQg
ZGlzcGxheSB0byBpbmxpbmUtYmxvY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmV0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zd2FwKCBlbGVt
LCB7ICJkaXNwbGF5IjogImlubGluZS1ibG9jayIgfSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBjdXJDU1MoIGVsZW0s
ICJtYXJnaW4tcmlnaHQiLCAibWFyZ2luUmlnaHQiICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXQgPSBlbGVtLnN0eWxlLm1hcmdpblJpZ2h0OwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgfQp9KTsK
CmlmICggZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZSApIHsKICAgICAgICBnZXRDb21wdXRlZFN0eWxlID0gZnVuY3Rpb24oIGVsZW0s
IG5hbWUgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0LCBkZWZhdWx0VmlldywgY29tcHV0ZWRT
dHlsZTsKCiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKCBydXBwZXIsICItJDEi
ICkudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgICAgICAgICBpZiAoICEoZGVmYXVsdFZpZXcgPSBl
bGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlm
ICggKGNvbXB1dGVkU3R5bGUgPSBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBu
dWxsICkpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBjb21wdXRlZFN0eWxlLmdl
dFByb3BlcnR5VmFsdWUoIG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQg
PT09ICIiICYmICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQsIGVsZW0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBq
UXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKfQoK
aWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlICkgewogICAgICAgIGN1
cnJlbnRTdHlsZSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewogICAgICAgICAgICAgICAgdmFy
IGxlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGVsZW0uY3VycmVudFN0eWxlICYm
IGVsZW0uY3VycmVudFN0eWxlWyBuYW1lIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHJzTGVm
dCA9IGVsZW0ucnVudGltZVN0eWxlICYmIGVsZW0ucnVudGltZVN0eWxlWyBuYW1lIF0sCiAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKCiAgICAgICAgICAgICAgICAv
LyBGcm9tIHRoZSBhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzCiAgICAgICAgICAgICAgICAv
LyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1l
bnQtMTAyMjkxCgogICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBh
IHJlZ3VsYXIgcGl4ZWwgbnVtYmVyCiAgICAgICAgICAgICAgICAvLyBidXQgYSBudW1iZXIgdGhh
dCBoYXMgYSB3ZWlyZCBlbmRpbmcsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMKICAg
ICAgICAgICAgICAgIGlmICggIXJudW1weC50ZXN0KCByZXQgKSAmJiBybnVtLnRlc3QoIHJldCAp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFs
dWVzCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBzdHlsZS5sZWZ0OwoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVk
IHZhbHVlIG91dAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJzTGVmdCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gZWxlbS5j
dXJyZW50U3R5bGUubGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZS5sZWZ0ID0gbmFtZSA9PT0gImZvbnRTaXplIiA/ICIxZW0iIDogKHJl
dCB8fCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gc3R5bGUucGl4ZWxMZWZ0ICsg
InB4IjsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1
ZXMKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUubGVmdCA9IGxlZnQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcnNMZWZ0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0ucnVudGltZVN0eWxlLmxlZnQgPSByc0xlZnQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSAi
IiA/ICJhdXRvIiA6IHJldDsKICAgICAgICB9Owp9CgpjdXJDU1MgPSBnZXRDb21wdXRlZFN0eWxl
IHx8IGN1cnJlbnRTdHlsZTsKCmZ1bmN0aW9uIGdldFdIKCBlbGVtLCBuYW1lLCBleHRyYSApIHsK
CiAgICAgICAgLy8gU3RhcnQgd2l0aCBvZmZzZXQgcHJvcGVydHkKICAgICAgICB2YXIgdmFsID0g
bmFtZSA9PT0gIndpZHRoIiA/IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNldEhlaWdodCwK
ICAgICAgICAgICAgICAgIHdoaWNoID0gbmFtZSA9PT0gIndpZHRoIiA/IGNzc1dpZHRoIDogY3Nz
SGVpZ2h0OwoKICAgICAgICBpZiAoIHZhbCA+IDAgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGV4
dHJhICE9PSAiYm9yZGVyIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2go
IHdoaWNoLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICFleHRyYSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCAt
PSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyB0aGlzICkgKSB8fCAw
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVt
LCBleHRyYSArIHRoaXMgKSApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCAtPSBw
YXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIHRoaXMgKyAiV2lkdGgiICkg
KSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHZh
bCArICJweCI7CiAgICAgICAgfQoKICAgICAgICAvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhl
biB1bmNvbXB1dGVkIGNzcyBpZiBuZWNlc3NhcnkKICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0s
IG5hbWUsIG5hbWUgKTsKICAgICAgICBpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7CiAg
ICAgICAgICAgICAgICB2YWwgPSBlbGVtLnN0eWxlWyBuYW1lIF0gfHwgMDsKICAgICAgICB9CiAg
ICAgICAgLy8gTm9ybWFsaXplICIiLCBhdXRvLCBhbmQgcHJlcGFyZSBmb3IgZXh0cmEKICAgICAg
ICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOwoKICAgICAgICAvLyBBZGQgcGFkZGluZywg
Ym9yZGVyLCBtYXJnaW4KICAgICAgICBpZiAoIGV4dHJhICkgewogICAgICAgICAgICAgICAgalF1
ZXJ5LmVhY2goIHdoaWNoLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFs
ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIHRoaXMgKSApIHx8
IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5
LmNzcyggZWxlbSwgImJvcmRlciIgKyB0aGlzICsgIldpZHRoIiApICkgfHwgMDsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV4dHJhID09PSAi
bWFyZ2luIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VG
bG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgZXh0cmEgKyB0aGlzICkgKSB8fCAwOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHJl
dHVybiB2YWwgKyAicHgiOwp9CgppZiAoIGpRdWVyeS5leHByICYmIGpRdWVyeS5leHByLmZpbHRl
cnMgKSB7CiAgICAgICAgalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4gPSBmdW5jdGlvbiggZWxl
bSApIHsKICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGVsZW0ub2Zmc2V0V2lkdGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IGVsZW0ub2Zmc2V0SGVpZ2h0OwoKICAgICAgICAg
ICAgICAgIHJldHVybiAod2lkdGggPT09IDAgJiYgaGVpZ2h0ID09PSAwKSB8fCAoIWpRdWVyeS5z
dXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAoZWxlbS5zdHlsZS5kaXNwbGF5IHx8IGpR
dWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApKSA9PT0gIm5vbmUiKTsKICAgICAgICB9OwoKICAg
ICAgICBqUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHsKICAg
ICAgICAgICAgICAgIHJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVsZW0gKTsK
ICAgICAgICB9Owp9CgoKCgp2YXIgcjIwID0gLyUyMC9nLAogICAgICAgIHJicmFja2V0ID0gL1xb
XF0kLywKICAgICAgICByQ1JMRiA9IC9ccj9cbi9nLAogICAgICAgIHJoYXNoID0gLyMuKiQvLAog
ICAgICAgIHJoZWFkZXJzID0gL14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZywgLy8gSUUg
bGVhdmVzIGFuIFxyIGNoYXJhY3RlciBhdCBFT0wKICAgICAgICByaW5wdXQgPSAvXig/OmNvbG9y
fGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxw
YXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksCiAgICAgICAg
Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uCiAgICAgICAg
cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lv
bnxmaWxlfHJlc3x3aWRnZXQpOiQvLAogICAgICAgIHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFE
KSQvLAogICAgICAgIHJwcm90b2NvbCA9IC9eXC9cLy8sCiAgICAgICAgcnF1ZXJ5ID0gL1w/LywK
ICAgICAgICByc2NyaXB0ID0gLzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSop
KjxcL3NjcmlwdD4vZ2ksCiAgICAgICAgcnNlbGVjdFRleHRhcmVhID0gL14oPzpzZWxlY3R8dGV4
dGFyZWEpL2ksCiAgICAgICAgcnNwYWNlc0FqYXggPSAvXHMrLywKICAgICAgICBydHMgPSAvKFs/
Jl0pXz1bXiZdKi8sCiAgICAgICAgcnVybCA9IC9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/
IzpdKikoPzo6KFxkKykpPyk/LywKCiAgICAgICAgLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBs
b2FkIG1ldGhvZAogICAgICAgIF9sb2FkID0galF1ZXJ5LmZuLmxvYWQsCgogICAgICAgIC8qIFBy
ZWZpbHRlcnMKICAgICAgICAgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3Rv
bSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKQogICAgICAgICAq
IDIpIFRoZXNlIGFyZSBjYWxsZWQ6CiAgICAgICAgICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBh
IHRyYW5zcG9ydAogICAgICAgICAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5k
YXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSkKICAgICAgICAgKiAzKSBr
ZXkgaXMgdGhlIGRhdGFUeXBlCiAgICAgICAgICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIg
Y2FuIGJlIHVzZWQKICAgICAgICAgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5z
cG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvICIqIiBpZiBuZWVkZWQKICAg
ICAgICAgKi8KICAgICAgICBwcmVmaWx0ZXJzID0ge30sCgogICAgICAgIC8qIFRyYW5zcG9ydHMg
YmluZGluZ3MKICAgICAgICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCiAgICAgICAgICogMikg
dGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKICAgICAgICAgKiAzKSBzZWxlY3Rp
b24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIg
aWYgbmVlZGVkCiAgICAgICAgICovCiAgICAgICAgdHJhbnNwb3J0cyA9IHt9LAoKICAgICAgICAv
LyBEb2N1bWVudCBsb2NhdGlvbgogICAgICAgIGFqYXhMb2NhdGlvbiwKCiAgICAgICAgLy8gRG9j
dW1lbnQgbG9jYXRpb24gc2VnbWVudHMKICAgICAgICBhamF4TG9jUGFydHMsCiAgICAgICAgCiAg
ICAgICAgLy8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVz
dCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uCiAgICAgICAgYWxsVHlwZXMgPSBb
IiovIl0gKyBbIioiXTsKCi8vICM4MTM4LCBJRSBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4g
YWNjZXNzaW5nCi8vIGEgZmllbGQgZnJvbSB3aW5kb3cubG9jYXRpb24gaWYgZG9jdW1lbnQuZG9t
YWluIGhhcyBiZWVuIHNldAp0cnkgewogICAgICAgIGFqYXhMb2NhdGlvbiA9IGxvY2F0aW9uLmhy
ZWY7Cn0gY2F0Y2goIGUgKSB7CiAgICAgICAgLy8gVXNlIHRoZSBocmVmIGF0dHJpYnV0ZSBvZiBh
biBBIGVsZW1lbnQKICAgICAgICAvLyBzaW5jZSBJRSB3aWxsIG1vZGlmeSBpdCBnaXZlbiBkb2N1
bWVudC5sb2NhdGlvbgogICAgICAgIGFqYXhMb2NhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoICJhIiApOwogICAgICAgIGFqYXhMb2NhdGlvbi5ocmVmID0gIiI7CiAgICAgICAgYWpheExv
Y2F0aW9uID0gYWpheExvY2F0aW9uLmhyZWY7Cn0KCi8vIFNlZ21lbnQgbG9jYXRpb24gaW50byBw
YXJ0cwphamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoIGFqYXhMb2NhdGlvbi50b0xvd2VyQ2FzZSgp
ICkgfHwgW107CgovLyBCYXNlICJjb25zdHJ1Y3RvciIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVy
IGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydApmdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5z
cG9ydHMoIHN0cnVjdHVyZSApIHsKCiAgICAgICAgLy8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9w
dGlvbmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGRhdGFU
eXBlRXhwcmVzc2lvbiwgZnVuYyApIHsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBkYXRh
VHlwZUV4cHJlc3Npb24gIT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICBm
dW5jID0gZGF0YVR5cGVFeHByZXNzaW9uOwogICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlw
ZUV4cHJlc3Npb24gPSAiKiI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuaXNGdW5jdGlvbiggZnVuYyApICkgewogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkuc3BsaXQoIHJz
cGFjZXNBamF4ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZGF0YVR5cGVzLmxlbmd0aCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNl
QmVmb3JlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4g
dGhlIGRhdGFUeXBlRXhwcmVzc2lvbgogICAgICAgICAgICAgICAgICAgICAgICBmb3IoOyBpIDwg
bGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUg
PSBkYXRhVHlwZXNbIGkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBj
b250cm9sIGlmIHdlJ3JlIGFza2VkIHRvIGFkZCBiZWZvcmUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhbnkgZXhpc3RpbmcgZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBsYWNlQmVmb3JlID0gL15cKy8udGVzdCggZGF0YVR5cGUgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBsYWNlQmVmb3JlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZS5zdWJzdHIoIDEg
KSB8fCAiKiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1
cmVbIGRhdGFUeXBlIF0gfHwgW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlbiB3ZSBhZGQgdG8gdGhlIHN0cnVjdHVyZSBhY2NvcmRpbmdseQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpc3RbIHBsYWNlQmVmb3JlID8gInVuc2hpZnQiIDogInB1c2giIF0o
IGZ1bmMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg
ICAgIH07Cn0KCi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQg
dHJhbnNwb3J0cwpmdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0
dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLAogICAgICAgICAgICAgICAgZGF0
YVR5cGUgLyogaW50ZXJuYWwgKi8sIGluc3BlY3RlZCAvKiBpbnRlcm5hbCAqLyApIHsKCiAgICAg
ICAgZGF0YVR5cGUgPSBkYXRhVHlwZSB8fCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdOwogICAgICAg
IGluc3BlY3RlZCA9IGluc3BlY3RlZCB8fCB7fTsKCiAgICAgICAgaW5zcGVjdGVkWyBkYXRhVHlw
ZSBdID0gdHJ1ZTsKCiAgICAgICAgdmFyIGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0sCiAg
ICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxpc3QgPyBsaXN0
Lmxlbmd0aCA6IDAsCiAgICAgICAgICAgICAgICBleGVjdXRlT25seSA9ICggc3RydWN0dXJlID09
PSBwcmVmaWx0ZXJzICksCiAgICAgICAgICAgICAgICBzZWxlY3Rpb247CgogICAgICAgIGZvcig7
IGkgPCBsZW5ndGggJiYgKCBleGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICk7IGkrKyApIHsKICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGxpc3RbIGkgXSggb3B0aW9ucywgb3JpZ2luYWxPcHRp
b25zLCBqcVhIUiApOwogICAgICAgICAgICAgICAgLy8gSWYgd2UgZ290IHJlZGlyZWN0ZWQgdG8g
YW5vdGhlciBkYXRhVHlwZQogICAgICAgICAgICAgICAgLy8gd2UgdHJ5IHRoZXJlIGlmIGV4ZWN1
dGluZyBvbmx5IGFuZCBub3QgZG9uZSBhbHJlYWR5CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVv
ZiBzZWxlY3Rpb24gPT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICFleGVjdXRlT25seSB8fCBpbnNwZWN0ZWRbIHNlbGVjdGlvbiBdICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25z
LmRhdGFUeXBlcy51bnNoaWZ0KCBzZWxlY3Rpb24gKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24gPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cygKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvcHRp
b25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCBzZWxlY3Rpb24sIGluc3BlY3RlZCApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg
IC8vIElmIHdlJ3JlIG9ubHkgZXhlY3V0aW5nIG9yIG5vdGhpbmcgd2FzIHNlbGVjdGVkCiAgICAg
ICAgLy8gd2UgdHJ5IHRoZSBjYXRjaGFsbCBkYXRhVHlwZSBpZiBub3QgZG9uZSBhbHJlYWR5CiAg
ICAgICAgaWYgKCAoIGV4ZWN1dGVPbmx5IHx8ICFzZWxlY3Rpb24gKSAmJiAhaW5zcGVjdGVkWyAi
KiIgXSApIHsKICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb3B0
aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwgIioiLCBpbnNwZWN0ZWQgKTsKICAgICAgICB9
CiAgICAgICAgLy8gdW5uZWNlc3Nhcnkgd2hlbiBvbmx5IGV4ZWN1dGluZyAocHJlZmlsdGVycykK
ICAgICAgICAvLyBidXQgaXQnbGwgYmUgaWdub3JlZCBieSB0aGUgY2FsbGVyIGluIHRoYXQgY2Fz
ZQogICAgICAgIHJldHVybiBzZWxlY3Rpb247Cn0KCi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFq
YXggb3B0aW9ucwovLyB0aGF0IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBl
eHRlbmRlZCkKLy8gRml4ZXMgIzk4ODcKZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMg
KSB7CiAgICAgICAgdmFyIGtleSwgZGVlcCwKICAgICAgICAgICAgICAgIGZsYXRPcHRpb25zID0g
alF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTsKICAgICAgICBmb3IoIGtleSBp
biBzcmMgKSB7CiAgICAgICAgICAgICAgICBpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQg
OiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCBkZWVwICkgewogICAgICAgICAgICAg
ICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7CiAgICAgICAgfQp9CgpqUXVl
cnkuZm4uZXh0ZW5kKHsKICAgICAgICBsb2FkOiBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxi
YWNrICkgewogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdXJsICE9PSAic3RyaW5nIiAmJiBf
bG9hZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlz
LCBhcmd1bWVudHMgKTsKCiAgICAgICAgICAgICAgICAvLyBEb24ndCBkbyBhIHJlcXVlc3QgaWYg
bm8gZWxlbWVudHMgYXJlIGJlaW5nIHJlcXVlc3RlZAogICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggIXRoaXMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgb2ZmID0gdXJsLmluZGV4T2Yo
ICIgIiApOwogICAgICAgICAgICAgICAgaWYgKCBvZmYgPj0gMCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHNlbGVjdG9yID0gdXJsLnNsaWNlKCBvZmYsIHVybC5sZW5ndGggKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGEgR0VUIHJlcXVlc3QKICAg
ICAgICAgICAgICAgIHZhciB0eXBlID0gIkdFVCI7CgogICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHNlY29uZCBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkCiAgICAgICAgICAgICAgICBpZiAoIHBhcmFt
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhIGZ1bmN0aW9uCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhl
IGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJh
bXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gdW5kZWZpbmVkOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmlu
ZwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgcGFyYW1zID09PSAi
b2JqZWN0IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBqUXVl
cnkucGFyYW0oIHBhcmFtcywgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAiUE9TVCI7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9
IHRoaXM7CgogICAgICAgICAgICAgICAgLy8gUmVxdWVzdCB0aGUgcmVtb3RlIGRvY3VtZW50CiAg
ICAgICAgICAgICAgICBqUXVlcnkuYWpheCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHVybDog
dXJsLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhVHlwZTogImh0bWwiLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBw
YXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbXBsZXRlIGNhbGxiYWNrIChyZXNw
b25zZVRleHQgaXMgdXNlZCBpbnRlcm5hbGx5KQogICAgICAgICAgICAgICAgICAgICAgICBjb21w
bGV0ZTogZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMsIHJlc3BvbnNlVGV4dCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgcmVzcG9uc2UgYXMgc3BlY2lmaWVk
IGJ5IHRoZSBqcVhIUiBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZVRleHQgPSBqcVhIUi5yZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgc3VjY2Vzc2Z1bCwgaW5qZWN0IHRoZSBIVE1MIGludG8gYWxsIHRoZSBtYXRj
aGVkIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqcVhIUi5p
c1Jlc29sdmVkKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyAjNDgyNTogR2V0IHRoZSBhY3R1YWwgcmVzcG9uc2UgaW4gY2FzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkYXRhRmlsdGVyIGlzIHByZXNlbnQgaW4gYWph
eFNldHRpbmdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5k
b25lKGZ1bmN0aW9uKCByICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZVRleHQgPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBTZWUgaWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLmh0bWwoIHNlbGVjdG9yID8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgZGl2IHRvIGhv
bGQgdGhlIHJlc3VsdHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5KCI8ZGl2PiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaW5qZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgZG9jdW1l
bnQgaW4sIHJlbW92aW5nIHRoZSBzY3JpcHRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgYW55ICdQZXJtaXNzaW9uIERl
bmllZCcgZXJyb3JzIGluIElFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLmFwcGVuZChyZXNwb25zZVRleHQucmVwbGFjZShyc2NyaXB0LCAi
IikpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIExvY2F0ZSB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoc2VsZWN0b3IpIDoKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCwg
anVzdCBpbmplY3QgdGhlIGZ1bGwgcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFj
ayApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWFjaCgg
Y2FsbGJhY2ssIFsgcmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAg
ICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5
LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTsKICAgICAgICB9LAoKICAgICAgICBzZXJp
YWxpemVBcnJheTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAo
ZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudHMg
PyBqUXVlcnkubWFrZUFycmF5KCB0aGlzLmVsZW1lbnRzICkgOiB0aGlzOwogICAgICAgICAgICAg
ICAgfSkKICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubmFtZSAmJiAhdGhpcy5kaXNhYmxlZCAmJgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICggdGhpcy5jaGVja2VkIHx8IHJzZWxlY3RUZXh0YXJlYS50
ZXN0KCB0aGlzLm5vZGVOYW1lICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJpbnB1dC50ZXN0KCB0aGlzLnR5cGUgKSApOwogICAgICAgICAgICAgICAgfSkKICAg
ICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24oIGksIGVsZW0gKXsKICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbCA9PSBudWxsID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBudWxsIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNBcnJheSgg
dmFsICkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1h
cCggdmFsLCBmdW5jdGlvbiggdmFsLCBpICl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5y
ZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0pIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
bmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9Owog
ICAgICAgICAgICAgICAgfSkuZ2V0KCk7CiAgICAgICAgfQp9KTsKCi8vIEF0dGFjaCBhIGJ1bmNo
IG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCmpRdWVyeS5lYWNo
KCAiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3Mg
YWpheFNlbmQiLnNwbGl0KCAiICIgKSwgZnVuY3Rpb24oIGksIG8gKXsKICAgICAgICBqUXVlcnku
Zm5bIG8gXSA9IGZ1bmN0aW9uKCBmICl7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iaW5k
KCBvLCBmICk7CiAgICAgICAgfTsKfSk7CgpqUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3QiIF0s
IGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7CiAgICAgICAgalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0
aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgewogICAgICAgICAgICAgICAgLy8gc2hp
ZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrID0gZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFqYXgoewogICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlOiBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAg
IHVybDogdXJsLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAogICAgICAgICAg
ICAgICAgICAgICAgICBzdWNjZXNzOiBjYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YVR5cGU6IHR5cGUKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH07Cn0pOwoKalF1ZXJ5
LmV4dGVuZCh7CgogICAgICAgIGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxi
YWNrLCAic2NyaXB0IiApOwogICAgICAgIH0sCgogICAgICAgIGdldEpTT046IGZ1bmN0aW9uKCB1
cmwsIGRhdGEsIGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQo
IHVybCwgZGF0YSwgY2FsbGJhY2ssICJqc29uIiApOwogICAgICAgIH0sCgogICAgICAgIC8vIENy
ZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0CiAgICAgICAg
Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLgogICAgICAgIC8v
IElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuCiAgICAgICAg
YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHsKICAgICAgICAgICAgICAg
IGlmICggc2V0dGluZ3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEg
c2V0dGluZ3Mgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhFeHRlbmQoIHRhcmdl
dCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5ncwogICAgICAgICAgICAg
ICAgICAgICAgICBzZXR0aW5ncyA9IHRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0ID0galF1ZXJ5LmFqYXhTZXR0aW5nczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIGFqYXhFeHRlbmQoIHRhcmdldCwgc2V0dGluZ3MgKTsKICAgICAgICAgICAgICAgIHJldHVy
biB0YXJnZXQ7CiAgICAgICAgfSwKCiAgICAgICAgYWpheFNldHRpbmdzOiB7CiAgICAgICAgICAg
ICAgICB1cmw6IGFqYXhMb2NhdGlvbiwKICAgICAgICAgICAgICAgIGlzTG9jYWw6IHJsb2NhbFBy
b3RvY29sLnRlc3QoIGFqYXhMb2NQYXJ0c1sgMSBdICksCiAgICAgICAgICAgICAgICBnbG9iYWw6
IHRydWUsCiAgICAgICAgICAgICAgICB0eXBlOiAiR0VUIiwKICAgICAgICAgICAgICAgIGNvbnRl
bnRUeXBlOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwKICAgICAgICAgICAg
ICAgIHByb2Nlc3NEYXRhOiB0cnVlLAogICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsCiAgICAg
ICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgdGltZW91dDogMCwKICAgICAgICAgICAgICAg
IGRhdGE6IG51bGwsCiAgICAgICAgICAgICAgICBkYXRhVHlwZTogbnVsbCwKICAgICAgICAgICAg
ICAgIHVzZXJuYW1lOiBudWxsLAogICAgICAgICAgICAgICAgcGFzc3dvcmQ6IG51bGwsCiAgICAg
ICAgICAgICAgICBjYWNoZTogbnVsbCwKICAgICAgICAgICAgICAgIHRyYWRpdGlvbmFsOiBmYWxz
ZSwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LAogICAgICAgICAgICAgICAgKi8KCiAgICAg
ICAgICAgICAgICBhY2NlcHRzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHhtbDogImFwcGxp
Y2F0aW9uL3htbCwgdGV4dC94bWwiLAogICAgICAgICAgICAgICAgICAgICAgICBodG1sOiAidGV4
dC9odG1sIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogInRleHQvcGxhaW4iLAogICAg
ICAgICAgICAgICAgICAgICAgICBqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2Ny
aXB0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIioiOiBhbGxUeXBlcwogICAgICAgICAgICAg
ICAgfSwKCiAgICAgICAgICAgICAgICBjb250ZW50czogewogICAgICAgICAgICAgICAgICAgICAg
ICB4bWw6IC94bWwvLAogICAgICAgICAgICAgICAgICAgICAgICBodG1sOiAvaHRtbC8sCiAgICAg
ICAgICAgICAgICAgICAgICAgIGpzb246IC9qc29uLwogICAgICAgICAgICAgICAgfSwKCiAgICAg
ICAgICAgICAgICByZXNwb25zZUZpZWxkczogewogICAgICAgICAgICAgICAgICAgICAgICB4bWw6
ICJyZXNwb25zZVhNTCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJyZXNwb25zZVRl
eHQiCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIC8vIExpc3Qgb2YgZGF0YSBj
b252ZXJ0ZXJzCiAgICAgICAgICAgICAgICAvLyAxKSBrZXkgZm9ybWF0IGlzICJzb3VyY2VfdHlw
ZSBkZXN0aW5hdGlvbl90eXBlIiAoYSBzaW5nbGUgc3BhY2UgaW4tYmV0d2VlbikKICAgICAgICAg
ICAgICAgIC8vIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkIGZvciBzb3Vy
Y2VfdHlwZQogICAgICAgICAgICAgICAgY29udmVydGVyczogewoKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0CiAgICAgICAgICAgICAgICAgICAgICAg
ICIqIHRleHQiOiB3aW5kb3cuU3RyaW5nLAoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4
dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pCiAgICAgICAgICAgICAgICAgICAg
ICAgICJ0ZXh0IGh0bWwiOiB0cnVlLAoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZhbHVh
dGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAidGV4
dCBqc29uIjogalF1ZXJ5LnBhcnNlSlNPTiwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBh
cnNlIHRleHQgYXMgeG1sCiAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IHhtbCI6IGpRdWVy
eS5wYXJzZVhNTAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAvLyBGb3Igb3B0
aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOgogICAgICAgICAgICAgICAgLy8g
eW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZgogICAgICAgICAgICAg
ICAgLy8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKICAgICAgICAg
ICAgICAgIC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKQogICAgICAgICAgICAgICAg
ZmxhdE9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogdHJ1ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsOiB0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAgICAg
fSwKCiAgICAgICAgYWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBw
cmVmaWx0ZXJzICksCiAgICAgICAgYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFu
c3BvcnRzKCB0cmFuc3BvcnRzICksCgogICAgICAgIC8vIE1haW4gbWV0aG9kCiAgICAgICAgYWph
eDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHsKCiAgICAgICAgICAgICAgICAvLyBJZiB1cmwg
aXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQogICAgICAgICAgICAgICAg
aWYgKCB0eXBlb2YgdXJsID09PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
b3B0aW9ucyA9IHVybDsKICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdW5kZWZpbmVkOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUg
YW4gb2JqZWN0CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAg
ICAgICAgICAgICB2YXIgLy8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdAogICAgICAg
ICAgICAgICAgICAgICAgICBzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2tzIGNvbnRleHQKICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSXQncyB0aGUgY2FsbGJhY2tDb250ZXh0IGlmIG9uZSB3YXMgcHJvdmlkZWQgaW4g
dGhlIG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGlmIGl0J3MgYSBET00g
bm9kZSBvciBhIGpRdWVyeSBjb2xsZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2Jh
bEV2ZW50Q29udGV4dCA9IGNhbGxiYWNrQ29udGV4dCAhPT0gcyAmJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29u
dGV4dCBpbnN0YW5jZW9mIGpRdWVyeSApID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6IGpRdWVyeS5ldmVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmZXJyZWRzCiAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuX0RlZmVycmVkKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGlmTW9kaWZpZWQga2V5CiAgICAgICAgICAgICAgICAgICAgICAgIGlmTW9kaWZp
ZWRLZXksCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQg
YWxsIGF0IG9uY2UpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzID0ge30s
CiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSwKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUmVzcG9uc2UgaGVhZGVycwogICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlSGVhZGVycywKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNwb3J0CiAgICAgICAg
ICAgICAgICAgICAgICAgIHRyYW5zcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGlt
ZW91dCBoYW5kbGUKICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dFRpbWVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDcm9zcy1kb21haW4gZGV0ZWN0aW9uIHZhcnMKICAgICAgICAg
ICAgICAgICAgICAgICAgcGFydHMsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBqcVhI
UiBzdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDAsCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hl
ZAogICAgICAgICAgICAgICAgICAgICAgICBmaXJlR2xvYmFscywKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTG9vcCB2YXJpYWJsZQogICAgICAgICAgICAgICAgICAgICAgICBpLAogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBGYWtlIHhocgogICAgICAgICAgICAgICAgICAgICAgICBqcVhI
UiA9IHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHlTdGF0ZTogMCwKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FjaGVzIHRoZSBoZWFkZXIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFt
ZSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICFzdGF0ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGxuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5h
bWUgXSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gfHwgbmFtZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNbIG5hbWUg
XSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUmF3IHN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFsbFJl
c3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBu
dWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24o
IGtleSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRj
aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPT09
IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIXJlc3BvbnNlSGVhZGVycyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgPSB7fTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggKCBtYXRj
aCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNwb25zZUhlYWRlcnNbIG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcmVzcG9uc2VI
ZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoID09PSB1bmRlZmluZWQgPyBudWxsIDogbWF0Y2g7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3Zl
cnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXIKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXRlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLm1pbWVUeXBlID0gdHlwZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbmNl
bCB0aGUgcmVxdWVzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiBmdW5j
dGlvbiggc3RhdHVzVGV4dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXR1c1RleHQgPSBzdGF0dXNUZXh0IHx8ICJhYm9ydCI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRyYW5zcG9ydCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LmFib3J0KCBzdGF0dXNU
ZXh0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKCAwLCBzdGF0dXNUZXh0ICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH07Cgog
ICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lCiAg
ICAgICAgICAgICAgICAvLyBJdCBpcyBkZWZpbmVkIGhlcmUgYmVjYXVzZSBqc2xpbnQgY29tcGxh
aW5zIGlmIGl0IGlzIGRlY2xhcmVkCiAgICAgICAgICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRo
ZSBmdW5jdGlvbiAod2hpY2ggd291bGQgYmUgbW9yZSBsb2dpY2FsIGFuZCByZWFkYWJsZSkKICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVz
cG9uc2VzLCBoZWFkZXJzICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIG9u
Y2UKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXRlIGlzICJkb25lIiBub3cKICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUgPSAyOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xl
YXIgdGltZW91dCBpZiBpdCBleGlzdHMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aW1l
b3V0VGltZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0
KCB0aW1lb3V0VGltZXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNv
bGxlY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgLy8gKG5vIG1hdHRlciBob3cgbG9uZyB0
aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZCkKICAgICAgICAgICAgICAgICAgICAgICAgdHJh
bnNwb3J0ID0gdW5kZWZpbmVkOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FjaGUgcmVz
cG9uc2UgaGVhZGVycwogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNTdHJp
bmcgPSBoZWFkZXJzIHx8ICIiOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHJlYWR5
U3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+
IDAgPyA0IDogMDsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1N1Y2Nlc3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNU
ZXh0ID0gbmF0aXZlU3RhdHVzVGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNwb25zZSA9IHJlc3BvbnNlcyA/IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNw
b25zZXMgKSA6IHVuZGVmaW5lZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0
TW9kaWZpZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRhZzsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAg
fHwgc3RhdHVzID09PSAzMDQgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBp
ZiBpbiBpZk1vZGlmaWVkIG1vZGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBzLmlmTW9kaWZpZWQgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAoIGxhc3RNb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiTGFzdC1N
b2RpZmllZCIgKSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gPSBsYXN0TW9kaWZp
ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggZXRhZyA9IGpxWEhSLmdldFJlc3Bv
bnNlSGVhZGVyKCAiRXRhZyIgKSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdID0gZXRhZzsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5v
dCBtb2RpZmllZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09
PSAzMDQgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVz
VGV4dCA9ICJub3Rtb2RpZmllZCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc1N1Y2Nlc3MgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBoYXZlIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBhamF4Q29u
dmVydCggcywgcmVzcG9uc2UgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJzdWNjZXNzIjsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgcGFyc2VyZXJyb3IK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4
dCA9ICJwYXJzZXJlcnJvciI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yID0gZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZXh0
cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGVuIG5vcm1hbGl6ZSBzdGF0dXNUZXh0IGFuZCBzdGF0dXMgZm9yIG5vbi1hYm9ydHMK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHN0YXR1c1RleHQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFzdGF0dXNUZXh0IHx8IHN0YXR1cyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAiZXJy
b3IiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMg
PCAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0dXMgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmpl
Y3QKICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc3RhdHVzID0gc3RhdHVzOwogICAgICAg
ICAgICAgICAgICAgICAgICBqcVhIUi5zdGF0dXNUZXh0ID0gIiIgKyAoIG5hdGl2ZVN0YXR1c1Rl
eHQgfHwgc3RhdHVzVGV4dCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VjY2Vzcy9F
cnJvcgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250
ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5y
ZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0g
KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKICAgICAgICAgICAgICAgICAgICAgICAganFYSFIu
c3RhdHVzQ29kZSggc3RhdHVzQ29kZSApOwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXND
b2RlID0gdW5kZWZpbmVkOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFs
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQu
dHJpZ2dlciggImFqYXgiICsgKCBpc1N1Y2Nlc3MgPyAiU3VjY2VzcyIgOiAiRXJyb3IiICksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsganFYSFIsIHMs
IGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbXBsZXRlCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXBsZXRlRGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBq
cVhIUiwgc3RhdHVzVGV4dCBdICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmVH
bG9iYWxzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29u
dGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhIUiwgcyBdICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50
cmlnZ2VyKCAiYWpheFN0b3AiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gQXR0YWNoIGRlZmVycmVkcwogICAgICAgICAgICAgICAgZGVmZXJyZWQucHJvbWlzZSgg
anFYSFIgKTsKICAgICAgICAgICAgICAgIGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOwogICAg
ICAgICAgICAgICAganFYSFIuZXJyb3IgPSBqcVhIUi5mYWlsOwogICAgICAgICAgICAgICAganFY
SFIuY29tcGxldGUgPSBjb21wbGV0ZURlZmVycmVkLmRvbmU7CgogICAgICAgICAgICAgICAgLy8g
U3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKICAgICAgICAgICAgICAgIGpxWEhSLnN0YXR1c0Nv
ZGUgPSBmdW5jdGlvbiggbWFwICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hcCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPCAyICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yKCB0bXAgaW4gbWFwICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlWyB0bXAgXSA9IFsgc3Rh
dHVzQ29kZVt0bXBdLCBtYXBbdG1wXSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBtYXBbIGpxWEhSLnN0YXR1
cyBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIudGhlbigg
dG1wLCB0bXAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
ICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBoYXNoIGNoYXJhY3RlciAo
Izc1MzE6IGFuZCBzdHJpbmcgcHJvbW90aW9uKQogICAgICAgICAgICAgICAgLy8gQWRkIHByb3Rv
Y29sIGlmIG5vdCBwcm92aWRlZCAoIzU4NjY6IElFNyBpc3N1ZSB3aXRoIHByb3RvY29sLWxlc3Mg
dXJscykKICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlm
IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgcy51cmwgPSAoICggdXJsIHx8IHMudXJsICkgKyAi
IiApLnJlcGxhY2UoIHJoYXNoLCAiIiApLnJlcGxhY2UoIHJwcm90b2NvbCwgYWpheExvY1BhcnRz
WyAxIF0gKyAiLy8iICk7CgogICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBkYXRhVHlwZXMgbGlz
dAogICAgICAgICAgICAgICAgcy5kYXRhVHlwZXMgPSBqUXVlcnkudHJpbSggcy5kYXRhVHlwZSB8
fCAiKiIgKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCByc3BhY2VzQWpheCApOwoKICAgICAgICAgICAg
ICAgIC8vIERldGVybWluZSBpZiBhIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyCiAg
ICAgICAgICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcGFydHMgPSBydXJsLmV4ZWMoIHMudXJsLnRvTG93ZXJDYXNlKCkgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgcy5jcm9zc0RvbWFpbiA9ICEhKCBwYXJ0cyAmJgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICggcGFydHNbIDEgXSAhPSBhamF4TG9jUGFydHNbIDEg
XSB8fCBwYXJ0c1sgMiBdICE9IGFqYXhMb2NQYXJ0c1sgMiBdIHx8CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBdID09PSAi
aHR0cDoiID8gODAgOiA0NDMgKSApICE9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICggYWpheExvY1BhcnRzWyAzIF0gfHwgKCBhamF4TG9jUGFydHNbIDEg
XSA9PT0gImh0dHA6IiA/IDgwIDogNDQzICkgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICk7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIGlmIG5v
dCBhbHJlYWR5IGEgc3RyaW5nCiAgICAgICAgICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLnByb2Nl
c3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFwcGx5IHByZWZpbHRlcnMKICAg
ICAgICAgICAgICAgIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBz
LCBvcHRpb25zLCBqcVhIUiApOwoKICAgICAgICAgICAgICAgIC8vIElmIHJlcXVlc3Qgd2FzIGFi
b3J0ZWQgaW5zaWRlIGEgcHJlZmlsZXIsIHN0b3AgdGhlcmUKICAgICAgICAgICAgICAgIGlmICgg
c3RhdGUgPT09IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZl
bnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0bwogICAgICAgICAgICAgICAgZmlyZUdsb2JhbHMgPSBz
Lmdsb2JhbDsKCiAgICAgICAgICAgICAgICAvLyBVcHBlcmNhc2UgdGhlIHR5cGUKICAgICAgICAg
ICAgICAgIHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpOwoKICAgICAgICAgICAgICAgIC8v
IERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50CiAgICAgICAgICAgICAgICBzLmhhc0Nv
bnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTsKCiAgICAgICAgICAgICAgICAvLyBX
YXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzCiAgICAgICAgICAgICAgICBpZiAoIGZpcmVH
bG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RhcnQiICk7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3
aXRoIG5vIGNvbnRlbnQKICAgICAgICAgICAgICAgIGlmICggIXMuaGFzQ29udGVudCApIHsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0
YSB0byB1cmwKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLmRhdGEgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/
ICImIiA6ICI/IiApICsgcy5kYXRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwg
cmV0cnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcy5kYXRhOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgaWZN
b2RpZmllZEtleSBiZWZvcmUgYWRkaW5nIHRoZSBhbnRpLWNhY2hlIHBhcmFtZXRlcgogICAgICAg
ICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkS2V5ID0gcy51cmw7CgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB0cyA9IGpRdWVyeS5ub3coKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRyeSByZXBsYWNpbmcgXz0gaWYgaXQgaXMgdGhlcmUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHMudXJsLnJlcGxhY2Uo
IHJ0cywgIiQxXz0iICsgdHMgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aWYgbm90aGluZyB3YXMgcmVwbGFjZWQsIGFkZCB0aW1lc3RhbXAgdG8gdGhlIGVuZAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHMudXJsID0gcmV0ICsgKCAocmV0ID09PSBzLnVybCAp
ID8gKCBycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6ICI/IiApICsgIl89IiArIHRzIDogIiIg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudAog
ICAgICAgICAgICAgICAgaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5
cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRU
eXBlICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBJZi1N
b2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZp
ZWQgbW9kZS4KICAgICAgICAgICAgICAgIGlmICggcy5pZk1vZGlmaWVkICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBpZk1vZGlmaWVkS2V5ID0gaWZNb2RpZmllZEtleSB8fCBzLnVybDsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVk
S2V5IF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVz
dEhlYWRlciggIklmLU1vZGlmaWVkLVNpbmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2Rp
ZmllZEtleSBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJJZi1Ob25lLU1hdGNo
IiwgalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBBY2NlcHRz
IGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQogICAgICAg
ICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigKICAgICAgICAgICAgICAgICAgICAgICAg
IkFjY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5h
Y2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gKyAoIHMuZGF0YVR5cGVzWyAwIF0gIT09ICIq
IiA/ICIsICIgKyBhbGxUeXBlcyArICI7IHE9MC4wMSIgOiAiIiApIDoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzLmFjY2VwdHNbICIqIiBdCiAgICAgICAgICAgICAgICApOwoKICAg
ICAgICAgICAgICAgIC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvbgogICAgICAgICAgICAgICAg
Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnNl
dFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgLy8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJs
eSBhYm9ydAogICAgICAgICAgICAgICAgaWYgKCBzLmJlZm9yZVNlbmQgJiYgKCBzLmJlZm9yZVNl
bmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBzdGF0ZSA9
PT0gMiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIG5v
dCBkb25lIGFscmVhZHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5hYm9y
dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVm
ZXJyZWRzCiAgICAgICAgICAgICAgICBmb3IgKCBpIGluIHsgc3VjY2VzczogMSwgZXJyb3I6IDEs
IGNvbXBsZXRlOiAxIH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSWyBpIF0oIHNb
IGkgXSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEdldCB0cmFuc3Bv
cnQKICAgICAgICAgICAgICAgIHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3Bv
cnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApOwoKICAgICAgICAgICAgICAgIC8v
IElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydAogICAgICAgICAgICAgICAgaWYgKCAhdHJh
bnNwb3J0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBkb25lKCAtMSwgIk5vIFRyYW5zcG9y
dCIgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpx
WEhSLnJlYWR5U3RhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZW5kIGdsb2Jh
bCBldmVudAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAi
YWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaW1lb3V0CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5hYm9ydCggInRpbWVvdXQiICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcy50aW1lb3V0ICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUHJvcGFnYXRlIGV4Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPCAyICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSggLTEsIGUgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTaW1wbHkgcmV0aHJvdyBvdGhlcndpc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmVycm9yKCBlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgcmV0dXJuIGpxWEhSOwogICAgICAgIH0sCgogICAgICAgIC8vIFNlcmlhbGl6ZSBh
biBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mCiAgICAgICAgLy8ga2V5L3ZhbHVl
cyBpbnRvIGEgcXVlcnkgc3RyaW5nCiAgICAgICAgcGFyYW06IGZ1bmN0aW9uKCBhLCB0cmFkaXRp
b25hbCApIHsKICAgICAgICAgICAgICAgIHZhciBzID0gW10sCiAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgcmV0dXJu
IGl0cyB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5
LmlzRnVuY3Rpb24oIHZhbHVlICkgPyB2YWx1ZSgpIDogdmFsdWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkg
KyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH07CgogICAgICAgICAgICAgICAgLy8gU2V0IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpR
dWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KICAgICAgICAgICAgICAgIGlmICggdHJhZGl0aW9uYWwg
PT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJhZGl0aW9uYWwgPSBq
UXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlz
IGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5p
c0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSAp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVu
dHMKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVl
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlICJv
bGQiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlcgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS4KICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIHByZWZpeCBpbiBhICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRp
b25hbCwgYWRkICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCiAg
ICAgICAgICAgICAgICByZXR1cm4gcy5qb2luKCAiJiIgKS5yZXBsYWNlKCByMjAsICIrIiApOwog
ICAgICAgIH0KfSk7CgpmdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlv
bmFsLCBhZGQgKSB7CiAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggb2JqICkgKSB7CiAgICAg
ICAgICAgICAgICAvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4KICAgICAgICAgICAgICAgIGpRdWVy
eS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkgewogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxh
ci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQoIHByZWZpeCwgdiApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBhcnJheSBpdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVu
Y29kZSBpdHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1lcmljIGluZGV4
IHRvIHJlc29sdmUgZGVzZXJpYWxpemF0aW9uIGFtYmlndWl0eSBpc3N1ZXMuCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHJhY2sgKGFzIG9mIDEuMC4wKSBjYW4n
dCBjdXJyZW50bHkgZGVzZXJpYWxpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBuZXN0ZWQgYXJyYXlzIHByb3Blcmx5LCBhbmQgYXR0ZW1wdGluZyB0byBkbyBzbyBtYXkgY2F1
c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHNlcnZlciBlcnJvci4gUG9z
c2libGUgZml4ZXMgYXJlIHRvIG1vZGlmeSByYWNrJ3MKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBkZXNlcmlhbGl6YXRpb24gYWxnb3JpdGhtIG9yIHRvIHByb3ZpZGUgYW4gb3B0
aW9uIG9yIGZsYWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBmb3JjZSBh
cnJheSBzZXJpYWxpemF0aW9uIHRvIGJlIHNoYWxsb3cuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArICggdHlwZW9mIHYgPT09ICJvYmpl
Y3QiIHx8IGpRdWVyeS5pc0FycmF5KHYpID8gaSA6ICIiICkgKyAiXSIsIHYsIHRyYWRpdGlvbmFs
LCBhZGQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7Cgog
ICAgICAgIH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiBvYmogIT0gbnVsbCAmJiB0eXBlb2Yg
b2JqID09PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBvYmplY3Qg
aXRlbS4KICAgICAgICAgICAgICAgIGZvciAoIHZhciBuYW1lIGluIG9iaiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9i
alsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uCiAgICAg
ICAgICAgICAgICBhZGQoIHByZWZpeCwgb2JqICk7CiAgICAgICAgfQp9CgovLyBUaGlzIGlzIHN0
aWxsIG9uIHRoZSBqUXVlcnkgb2JqZWN0Li4uIGZvciBub3cKLy8gV2FudCB0byBtb3ZlIHRoaXMg
dG8galF1ZXJ5LmFqYXggc29tZSBkYXkKalF1ZXJ5LmV4dGVuZCh7CgogICAgICAgIC8vIENvdW50
ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllcwogICAgICAgIGFjdGl2
ZTogMCwKCiAgICAgICAgLy8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVx
dWVzdAogICAgICAgIGxhc3RNb2RpZmllZDoge30sCiAgICAgICAgZXRhZzoge30KCn0pOwoKLyog
SGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OgogKiAtIHNldHMgYWxsIHJlc3Bv
bnNlWFhYIGZpZWxkcyBhY2NvcmRpbmdseQogKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAo
bWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKQogKiAt
IHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKICovCmZ1bmN0aW9uIGFqYXhIYW5k
bGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7CgogICAgICAgIHZhciBjb250ZW50
cyA9IHMuY29udGVudHMsCiAgICAgICAgICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywK
ICAgICAgICAgICAgICAgIHJlc3BvbnNlRmllbGRzID0gcy5yZXNwb25zZUZpZWxkcywKICAgICAg
ICAgICAgICAgIGN0LAogICAgICAgICAgICAgICAgdHlwZSwKICAgICAgICAgICAgICAgIGZpbmFs
RGF0YVR5cGUsCiAgICAgICAgICAgICAgICBmaXJzdERhdGFUeXBlOwoKICAgICAgICAvLyBGaWxs
IHJlc3BvbnNlWFhYIGZpZWxkcwogICAgICAgIGZvciggdHlwZSBpbiByZXNwb25zZUZpZWxkcyAp
IHsKICAgICAgICAgICAgICAgIGlmICggdHlwZSBpbiByZXNwb25zZXMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGpxWEhSWyByZXNwb25zZUZpZWxkc1t0eXBlXSBdID0gcmVzcG9uc2VzWyB0
eXBlIF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZW1vdmUgYXV0
byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2VzcwogICAgICAgIHdo
aWxlKCBkYXRhVHlwZXNbIDAgXSA9PT0gIioiICkgewogICAgICAgICAgICAgICAgZGF0YVR5cGVz
LnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhl
YWRlciggImNvbnRlbnQtdHlwZSIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAg
ICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZQog
ICAgICAgIGlmICggY3QgKSB7CiAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGNvbnRlbnRz
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29u
dGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2Ug
Zm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZQogICAgICAgIGlmICggZGF0YVR5cGVzWyAwIF0gaW4g
cmVzcG9uc2VzICkgewogICAgICAgICAgICAgICAgZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sg
MCBdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBUcnkgY29udmVydGlibGUg
ZGF0YVR5cGVzCiAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJz
WyB0eXBlICsgIiAiICsgZGF0YVR5cGVzWzBdIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmluYWxEYXRhVHlwZSA9IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhZmlyc3REYXRhVHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdERhdGFUeXBlID0gdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gT3IganVzdCB1c2UgZmlyc3Qgb25lCiAg
ICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFU
eXBlOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZQogICAgICAg
IC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkCiAgICAgICAgLy8g
YW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQogICAgICAgIGlmICggZmluYWxE
YXRhVHlwZSApIHsKICAgICAgICAgICAgICAgIGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5
cGVzWyAwIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlcy51bnNoaWZ0KCBm
aW5hbERhdGFUeXBlICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4g
cmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07CiAgICAgICAgfQp9CgovLyBDaGFpbiBjb252ZXJz
aW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCmZ1bmN0aW9u
IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApIHsKCiAgICAgICAgLy8gQXBwbHkgdGhlIGRhdGFG
aWx0ZXIgaWYgcHJvdmlkZWQKICAgICAgICBpZiAoIHMuZGF0YUZpbHRlciApIHsKICAgICAgICAg
ICAgICAgIHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApOwog
ICAgICAgIH0KCiAgICAgICAgdmFyIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLAogICAgICAgICAg
ICAgICAgY29udmVydGVycyA9IHt9LAogICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAg
IGtleSwKICAgICAgICAgICAgICAgIGxlbmd0aCA9IGRhdGFUeXBlcy5sZW5ndGgsCiAgICAgICAg
ICAgICAgICB0bXAsCiAgICAgICAgICAgICAgICAvLyBDdXJyZW50IGFuZCBwcmV2aW91cyBkYXRh
VHlwZXMKICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBkYXRhVHlwZXNbIDAgXSwKICAgICAgICAg
ICAgICAgIHByZXYsCiAgICAgICAgICAgICAgICAvLyBDb252ZXJzaW9uIGV4cHJlc3Npb24KICAg
ICAgICAgICAgICAgIGNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAvLyBDb252ZXJzaW9uIGZ1
bmN0aW9uCiAgICAgICAgICAgICAgICBjb252LAogICAgICAgICAgICAgICAgLy8gQ29udmVyc2lv
biBmdW5jdGlvbnMgKHRyYW5zaXRpdmUgY29udmVyc2lvbikKICAgICAgICAgICAgICAgIGNvbnYx
LAogICAgICAgICAgICAgICAgY29udjI7CgogICAgICAgIC8vIEZvciBlYWNoIGRhdGFUeXBlIGlu
IHRoZSBjaGFpbgogICAgICAgIGZvciggaSA9IDE7IGkgPCBsZW5ndGg7IGkrKyApIHsKCiAgICAg
ICAgICAgICAgICAvLyBDcmVhdGUgY29udmVydGVycyBtYXAKICAgICAgICAgICAgICAgIC8vIHdp
dGggbG93ZXJjYXNlZCBrZXlzCiAgICAgICAgICAgICAgICBpZiAoIGkgPT09IDEgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcigga2V5IGluIHMuY29udmVydGVycyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiggdHlwZW9mIGtleSA9PT0gInN0cmluZyIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzWyBrZXkudG9M
b3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBrZXkgXTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGRhdGFUeXBlcwogICAgICAgICAgICAgICAgcHJl
diA9IGN1cnJlbnQ7CiAgICAgICAgICAgICAgICBjdXJyZW50ID0gZGF0YVR5cGVzWyBpIF07Cgog
ICAgICAgICAgICAgICAgLy8gSWYgY3VycmVudCBpcyBhdXRvIGRhdGFUeXBlLCB1cGRhdGUgaXQg
dG8gcHJldgogICAgICAgICAgICAgICAgaWYoIGN1cnJlbnQgPT09ICIqIiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudCA9IHByZXY7CiAgICAgICAgICAgICAgICAvLyBJZiBubyBh
dXRvIGFuZCBkYXRhVHlwZXMgYXJlIGFjdHVhbGx5IGRpZmZlcmVudAogICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggcHJldiAhPT0gIioiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGNvbnZlcnRlcgogICAgICAgICAgICAgICAgICAg
ICAgICBjb252ZXJzaW9uID0gcHJldiArICIgIiArIGN1cnJlbnQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252ZXJzaW9uIF0gfHwgY29udmVydGVyc1sgIiog
IiArIGN1cnJlbnQgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5v
IGRpcmVjdCBjb252ZXJ0ZXIsIHNlYXJjaCB0cmFuc2l0aXZlbHkKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhY29udiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252
MiA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoIGNvbnYx
IGluIGNvbnZlcnRlcnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBjb252MS5zcGxpdCggIiAiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHRtcFsgMCBdID09PSBwcmV2IHx8IHRtcFsgMCBdID09PSAiKiIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYyID0g
Y29udmVydGVyc1sgdG1wWzFdICsgIiAiICsgY3VycmVudCBdOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYyICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYxID0gY29udmVy
dGVyc1sgY29udjEgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGNvbnYxID09PSB0cnVlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnYy
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIGNvbnYyID09PSB0cnVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnYxOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBmb3VuZCBubyBjb252ZXJ0ZXIsIGRpc3BhdGNoIGFuIGVycm9yCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggISggY29udiB8fCBjb252MiApICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggIk5vIGNvbnZlcnNpb24gZnJv
bSAiICsgY29udmVyc2lvbi5yZXBsYWNlKCIgIiwiIHRvICIpICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZm91bmQgY29udmVydGVyIGlz
IG5vdCBhbiBlcXVpdmFsZW5jZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgIT09
IHRydWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB3aXRo
IDEgb3IgMiBjb252ZXJ0ZXJzIGFjY29yZGluZ2x5CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzcG9uc2UgPSBjb252ID8gY29udiggcmVzcG9uc2UgKSA6IGNvbnYyKCBjb252MShy
ZXNwb25zZSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzcG9uc2U7Cn0KCgoKCnZhciBqc2MgPSBqUXVlcnku
bm93KCksCiAgICAgICAganNyZSA9IC8oXD0pXD8oJnwkKXxcP1w/L2k7CgovLyBEZWZhdWx0IGpz
b25wIHNldHRpbmdzCmpRdWVyeS5hamF4U2V0dXAoewogICAgICAgIGpzb25wOiAiY2FsbGJhY2si
LAogICAgICAgIGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0
dXJuIGpRdWVyeS5leHBhbmRvICsgIl8iICsgKCBqc2MrKyApOwogICAgICAgIH0KfSk7CgovLyBE
ZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAg
cmVxdWVzdHMKalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rpb24oIHMs
IG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkgewoKICAgICAgICB2YXIgaW5zcGVjdERhdGEgPSBz
LmNvbnRlbnRUeXBlID09PSAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiAmJgog
ICAgICAgICAgICAgICAgKCB0eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiApOwoKICAgICAgICBp
ZiAoIHMuZGF0YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgfHwKICAgICAgICAgICAgICAgIHMuanNv
bnAgIT09IGZhbHNlICYmICgganNyZS50ZXN0KCBzLnVybCApIHx8CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zcGVjdERhdGEgJiYganNyZS50ZXN0KCBzLmRhdGEgKSApICkgewoK
ICAgICAgICAgICAgICAgIHZhciByZXNwb25zZUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAg
ICAgICAganNvbnBDYWxsYmFjayA9IHMuanNvbnBDYWxsYmFjayA9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID8gcy5q
c29ucENhbGxiYWNrKCkgOiBzLmpzb25wQ2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZpb3VzID0gd2luZG93WyBqc29ucENhbGxiYWNrIF0sCiAgICAgICAgICAgICAgICAgICAg
ICAgIHVybCA9IHMudXJsLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcy5kYXRhLAog
ICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlID0gIiQxIiArIGpzb25wQ2FsbGJhY2sgKyAi
JDIiOwoKICAgICAgICAgICAgICAgIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKCBqc3JlLCByZXBsYWNlICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggcy51cmwgPT09IHVybCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGluc3BlY3REYXRhICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgganNyZSwgcmVwbGFjZSAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHMuZGF0YSA9PT0gZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCBjYWxsYmFjayBtYW51YWxseQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9ICgvXD8vLnRlc3QoIHVybCApID8gIiYi
IDogIj8iKSArIHMuanNvbnAgKyAiPSIgKyBqc29ucENhbGxiYWNrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHMudXJsID0gdXJsOwogICAgICAgICAgICAgICAgcy5kYXRh
ID0gZGF0YTsKCiAgICAgICAgICAgICAgICAvLyBJbnN0YWxsIGNhbGxiYWNrCiAgICAgICAgICAg
ICAgICB3aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSA9IGZ1bmN0aW9uKCByZXNwb25zZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBbIHJlc3BvbnNlIF07CiAg
ICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIC8vIENsZWFuLXVwIGZ1bmN0aW9uCiAg
ICAgICAgICAgICAgICBqcVhIUi5hbHdheXMoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNldCBjYWxsYmFjayBiYWNrIHRvIHByZXZpb3VzIHZhbHVlCiAgICAgICAgICAg
ICAgICAgICAgICAgIHdpbmRvd1sganNvbnBDYWxsYmFjayBdID0gcHJldmlvdXM7CiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUg
YSByZXNwb25zZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlQ29udGFpbmVy
ICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBwcmV2aW91cyApICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpbmRvd1sganNvbnBDYWxsYmFjayBdKCByZXNwb25zZUNvbnRhaW5lclsg
MCBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAg
ICAgICAgICAgICAgIC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVy
IHNjcmlwdCBleGVjdXRpb24KICAgICAgICAgICAgICAgIHMuY29udmVydGVyc1sic2NyaXB0IGpz
b24iXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZXNwb25z
ZUNvbnRhaW5lciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJy
b3IoIGpzb25wQ2FsbGJhY2sgKyAiIHdhcyBub3QgY2FsbGVkIiApOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZUNvbnRhaW5l
clsgMCBdOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBmb3JjZSBqc29u
IGRhdGFUeXBlCiAgICAgICAgICAgICAgICBzLmRhdGFUeXBlc1sgMCBdID0gImpzb24iOwoKICAg
ICAgICAgICAgICAgIC8vIERlbGVnYXRlIHRvIHNjcmlwdAogICAgICAgICAgICAgICAgcmV0dXJu
ICJzY3JpcHQiOwogICAgICAgIH0KfSk7CgoKCgovLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZQpq
UXVlcnkuYWpheFNldHVwKHsKICAgICAgICBhY2NlcHRzOiB7CiAgICAgICAgICAgICAgICBzY3Jp
cHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9u
L2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKICAgICAgICB9LAogICAgICAg
IGNvbnRlbnRzOiB7CiAgICAgICAgICAgICAgICBzY3JpcHQ6IC9qYXZhc2NyaXB0fGVjbWFzY3Jp
cHQvCiAgICAgICAgfSwKICAgICAgICBjb252ZXJ0ZXJzOiB7CiAgICAgICAgICAgICAgICAidGV4
dCBzY3JpcHQiOiBmdW5jdGlvbiggdGV4dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRl
eHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9KTsKCi8vIEhhbmRsZSBjYWNoZSdzIHNw
ZWNpYWwgY2FzZSBhbmQgZ2xvYmFsCmpRdWVyeS5hamF4UHJlZmlsdGVyKCAic2NyaXB0IiwgZnVu
Y3Rpb24oIHMgKSB7CiAgICAgICAgaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7CiAgICAg
ICAgICAgICAgICBzLmNhY2hlID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICggcy5jcm9z
c0RvbWFpbiApIHsKICAgICAgICAgICAgICAgIHMudHlwZSA9ICJHRVQiOwogICAgICAgICAgICAg
ICAgcy5nbG9iYWwgPSBmYWxzZTsKICAgICAgICB9Cn0pOwoKLy8gQmluZCBzY3JpcHQgdGFnIGhh
Y2sgdHJhbnNwb3J0CmpRdWVyeS5hamF4VHJhbnNwb3J0KCAic2NyaXB0IiwgZnVuY3Rpb24ocykg
ewoKICAgICAgICAvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWlu
IHJlcXVlc3RzCiAgICAgICAgaWYgKCBzLmNyb3NzRG9tYWluICkgewoKICAgICAgICAgICAgICAg
IHZhciBzY3JpcHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBkb2N1bWVudC5oZWFk
IHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiaGVhZCIgKVswXSB8fCBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQ7CgogICAgICAgICAgICAgICAgcmV0dXJuIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBfLCBjYWxsYmFjayApIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNj
cmlwdCIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0g
ImFzeW5jIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnNjcmlwdENo
YXJzZXQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQu
Y2hhcnNldCA9IHMuc2NyaXB0Q2hhcnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBzLnVybDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXR0YWNoIGhhbmRsZXJzIGZvciBh
bGwgYnJvd3NlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2Fk
ID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCB8fCAh
c2NyaXB0LnJlYWR5U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdCggc2NyaXB0LnJlYWR5
U3RhdGUgKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEhhbmRsZSBtZW1vcnkgbGVhayBpbiBJRQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0
ZWNoYW5nZSA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBSZW1vdmUgdGhlIHNjcmlwdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGhlYWQgJiYgc2NyaXB0LnBhcmVudE5vZGUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVh
ZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERlcmVmZXJlbmNlIHRoZSBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gdW5kZWZpbmVkOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgaWYgbm90
IGFib3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWlzQWJvcnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2soIDIwMCwgInN1Y2Nlc3MiICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBpbnNlcnRCZWZvcmUgaW5zdGVh
ZCBvZiBhcHBlbmRDaGlsZCAgdG8gY2lyY3VtdmVudCBhbiBJRTYgYnVnLgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYXJpc2VzIHdoZW4gYSBiYXNlIG5vZGUgaXMgdXNl
ZCAoIzI3MDkgYW5kICM0Mzc4KS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFk
Lmluc2VydEJlZm9yZSggc2NyaXB0LCBoZWFkLmZpcnN0Q2hpbGQgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNjcmlwdCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQoIDAsIDEgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH07CiAgICAgICAgfQp9KTsKCgoKCnZhciAvLyAjNTI4MDogSW50ZXJu
ZXQgRXhwbG9yZXIgd2lsbCBrZWVwIGNvbm5lY3Rpb25zIGFsaXZlIGlmIHdlIGRvbid0IGFib3J0
IG9uIHVubG9hZAogICAgICAgIHhock9uVW5sb2FkQWJvcnQgPSB3aW5kb3cuQWN0aXZlWE9iamVj
dCA/IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgLy8gQWJvcnQgYWxsIHBlbmRpbmcgcmVx
dWVzdHMKICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4geGhyQ2FsbGJhY2tzICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3NbIGtleSBdKCAwLCAxICk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfSA6IGZhbHNlLAogICAgICAgIHhocklkID0gMCwKICAgICAg
ICB4aHJDYWxsYmFja3M7CgovLyBGdW5jdGlvbnMgdG8gY3JlYXRlIHhocnMKZnVuY3Rpb24gY3Jl
YXRlU3RhbmRhcmRYSFIoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBu
ZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgfSBjYXRjaCggZSApIHt9Cn0KCmZ1
bmN0aW9uIGNyZWF0ZUFjdGl2ZVhIUigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxIVFRQIiApOwog
ICAgICAgIH0gY2F0Y2goIGUgKSB7fQp9CgovLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JqZWN0Ci8v
IChUaGlzIGlzIHN0aWxsIGF0dGFjaGVkIHRvIGFqYXhTZXR0aW5ncyBmb3IgYmFja3dhcmQgY29t
cGF0aWJpbGl0eSkKalF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSB3aW5kb3cuQWN0aXZlWE9iamVj
dCA/CiAgICAgICAgLyogTWljcm9zb2Z0IGZhaWxlZCB0byBwcm9wZXJseQogICAgICAgICAqIGlt
cGxlbWVudCB0aGUgWE1MSHR0cFJlcXVlc3QgaW4gSUU3IChjYW4ndCByZXF1ZXN0IGxvY2FsIGZp
bGVzKSwKICAgICAgICAgKiBzbyB3ZSB1c2UgdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBpdCBpcyBh
dmFpbGFibGUKICAgICAgICAgKiBBZGRpdGlvbmFsbHkgWE1MSHR0cFJlcXVlc3QgY2FuIGJlIGRp
c2FibGVkIGluIElFNy9JRTggc28KICAgICAgICAgKiB3ZSBuZWVkIGEgZmFsbGJhY2suCiAgICAg
ICAgICovCiAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMu
aXNMb2NhbCAmJiBjcmVhdGVTdGFuZGFyZFhIUigpIHx8IGNyZWF0ZUFjdGl2ZVhIUigpOwogICAg
ICAgIH0gOgogICAgICAgIC8vIEZvciBhbGwgb3RoZXIgYnJvd3NlcnMsIHVzZSB0aGUgc3RhbmRh
cmQgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0CiAgICAgICAgY3JlYXRlU3RhbmRhcmRYSFI7CgovLyBE
ZXRlcm1pbmUgc3VwcG9ydCBwcm9wZXJ0aWVzCihmdW5jdGlvbiggeGhyICkgewogICAgICAgIGpR
dWVyeS5leHRlbmQoIGpRdWVyeS5zdXBwb3J0LCB7CiAgICAgICAgICAgICAgICBhamF4OiAhIXho
ciwKICAgICAgICAgICAgICAgIGNvcnM6ICEheGhyICYmICggIndpdGhDcmVkZW50aWFscyIgaW4g
eGhyICkKICAgICAgICB9KTsKfSkoIGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCkgKTsKCi8vIENy
ZWF0ZSB0cmFuc3BvcnQgaWYgdGhlIGJyb3dzZXIgY2FuIHByb3ZpZGUgYW4geGhyCmlmICggalF1
ZXJ5LnN1cHBvcnQuYWpheCApIHsKCiAgICAgICAgalF1ZXJ5LmFqYXhUcmFuc3BvcnQoZnVuY3Rp
b24oIHMgKSB7CiAgICAgICAgICAgICAgICAvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlm
IHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0CiAgICAgICAgICAgICAgICBpZiAoICFz
LmNyb3NzRG9tYWluIHx8IGpRdWVyeS5zdXBwb3J0LmNvcnMgKSB7CgogICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgY2FsbGJhY2s7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBj
b21wbGV0ZSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBH
ZXQgYSBuZXcgeGhyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
eGhyID0gcy54aHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZW4g
dGhlIHNvY2tldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFz
c2luZyBudWxsIHVzZXJuYW1lLCBnZW5lcmF0ZXMgYSBsb2dpbiBwb3B1cCBvbiBPcGVyYSAoIzI4
NjUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMudXNlcm5h
bWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHho
ci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5jLCBzLnVzZXJuYW1lLCBzLnBhc3N3b3JkICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3Blbiggcy50eXBl
LCBzLnVybCwgcy5hc3luYyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IGN1
c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggcy54aHJGaWVsZHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gcy54aHJGaWVsZHMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyWyBpIF0gPSBz
LnhockZpZWxkc1sgaSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgbWltZSB0eXBl
IGlmIG5lZWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBz
Lm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSggcy5taW1l
VHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFgtUmVxdWVzdGVkLVdpdGggaGVh
ZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgY3Jvc3Mt
ZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBha2luIHRvIGEgamln
c2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9u
IGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMs
IHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNb
IlgtUmVxdWVzdGVkLVdpdGgiXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVhZGVyc1sgIlgtUmVxdWVzdGVkLVdpdGgiIF0gPSAiWE1MSHR0cFJl
cXVlc3QiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgYW4gZXh0cmEgdHJ5L2Nh
dGNoIGZvciBjcm9zcyBkb21haW4gcmVxdWVzdHMgaW4gRmlyZWZveCAzCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpIGluIGhlYWRlcnMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVl
c3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGNhdGNoKCBfICkge30KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBEbyBzZW5kIHRoZSByZXF1ZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24gd2hpY2ggaXMgYWN0dWFs
bHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZWQgaW4g
alF1ZXJ5LmFqYXggKHNvIG5vIHRyeS9jYXRjaCBoZXJlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeGhyLnNlbmQoICggcy5oYXNDb250ZW50ICYmIHMuZGF0YSApIHx8
IG51bGwgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaXN0
ZW5lcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBm
dW5jdGlvbiggXywgaXNBYm9ydCApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
cG9uc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhtbDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZpcmVmb3ggdGhyb3dzIGV4Y2VwdGlvbnMgd2hlbiBhY2Nlc3NpbmcgcHJvcGVydGll
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiBh
biB4aHIgd2hlbiBhIG5ldHdvcmsgZXJyb3Igb2NjdXJlZAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vaGVscGZ1bC5rbm9icy1kaWFscy5j
b20vaW5kZXgucGhwL0NvbXBvbmVudF9yZXR1cm5lZF9mYWlsdXJlX2NvZGU6XzB4ODAwNDAxMTFf
KE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyeSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlzIGFib3J0ZWQg
b3IgY29tcGxldGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNhbGxiYWNrICYmICggaXNBYm9ydCB8fCB4aHIucmVhZHlTdGF0ZSA9
PT0gNCApICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgY2FsbGVkIG9uY2UKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0g
dW5kZWZpbmVkOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCBrZWVwIGFzIGFjdGl2ZSBhbnltb3JlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGhhbmRsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9
IGpRdWVyeS5ub29wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHhockNhbGxiYWNrc1sgaGFuZGxlIF07CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGFuIGFib3J0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGlzQWJvcnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFib3J0IGl0IG1hbnVhbGx5IGlmIG5l
ZWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHhoci5yZWFkeVN0YXRlICE9PSA0ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHhoci5hYm9ydCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNwb25zZUhlYWRlcnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlcyA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwgPSB4aHIucmVzcG9uc2VYTUw7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgcmVzcG9uc2UgbGlzdAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHhtbCAmJiB4bWwuZG9jdW1lbnRFbGVtZW50IC8qICM0OTU4ICovICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlcy54bWwgPSB4bWw7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VzLnRleHQgPSB4aHIucmVzcG9uc2VUZXh0OwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRmlyZWZveCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHN0YXR1c1RleHQgZm9yIGZhdWx0eSBjcm9zcy1kb21haW4gcmVxdWVzdHMK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0g
eGhyLnN0YXR1c1RleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2Ugbm9ybWFsaXplIHdpdGggV2Via2l0IGdpdmluZyBhbiBlbXB0eSBz
dGF0dXNUZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICIiOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgc3RhdHVzIGZvciBub24gc3RhbmRh
cmQgYmVoYXZpb3JzCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpcyBsb2NhbCBh
bmQgd2UgaGF2ZSBkYXRhOiBhc3N1bWUgYSBzdWNjZXNzCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChzdWNj
ZXNzIHdpdGggbm8gZGF0YSB3b24ndCBnZXQgbm90aWZpZWQsIHRoYXQncyB0aGUgYmVzdCB3ZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjYW4gZG8gZ2l2ZW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIXN0YXR1cyAmJiBzLmlzTG9jYWwgJiYgIXMuY3Jvc3NEb21haW4g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcmVzcG9uc2VzLnRleHQgPyAyMDAg
OiA0MDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElFIC0gIzE0NTA6IHNvbWV0aW1lcyByZXR1cm5zIDEy
MjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0YXR1
cyA9PT0gMTIyMyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAyMDQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gY2F0Y2goIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNB
Ym9ydCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBsZXRlKCAtMSwgZmlyZWZveEFjY2Vzc0V4Y2VwdGlvbiApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBjb21wbGV0
ZSBpZiBuZWVkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCByZXNwb25zZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoIHN0YXR1cywgc3RhdHVzVGV4dCwgcmVzcG9u
c2VzLCByZXNwb25zZUhlYWRlcnMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBp
biBzeW5jIG1vZGUgb3IgaXQncyBpbiBjYWNoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYW5kIGhhcyBiZWVuIHJldHJpZXZlZCBkaXJlY3RseSAoSUU2ICYgSUU3
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBt
YW51YWxseSBmaXJlIHRoZSBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhcy5hc3luYyB8fCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9ICsreGhySWQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyT25V
bmxvYWRBYm9ydCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcyBsaXN0IGlm
IG5lZWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGFuZCBhdHRhY2ggdGhlIHVubG9hZCBoYW5kbGVyCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAheGhyQ2FsbGJhY2tz
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeGhyQ2FsbGJhY2tzID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnVu
bG9hZCggeGhyT25VbmxvYWRBYm9ydCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdG8gbGlzdCBvZiBhY3RpdmUgeGhycyBj
YWxsYmFja3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4aHJDYWxsYmFja3NbIGhhbmRsZSBdID0gY2FsbGJhY2s7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhbGxi
YWNrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFib3J0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKDAsMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0pOwp9CgoKCgp2YXIg
ZWxlbWRpc3BsYXkgPSB7fSwKICAgICAgICBpZnJhbWUsIGlmcmFtZURvYywKICAgICAgICByZnh0
eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLywKICAgICAgICByZnhudW0gPSAvXihbK1wt
XT0pPyhbXGQrLlwtXSspKFthLXolXSopJC9pLAogICAgICAgIHRpbWVySWQsCiAgICAgICAgZnhB
dHRycyA9IFsKICAgICAgICAgICAgICAgIC8vIGhlaWdodCBhbmltYXRpb25zCiAgICAgICAgICAg
ICAgICBbICJoZWlnaHQiLCAibWFyZ2luVG9wIiwgIm1hcmdpbkJvdHRvbSIsICJwYWRkaW5nVG9w
IiwgInBhZGRpbmdCb3R0b20iIF0sCiAgICAgICAgICAgICAgICAvLyB3aWR0aCBhbmltYXRpb25z
CiAgICAgICAgICAgICAgICBbICJ3aWR0aCIsICJtYXJnaW5MZWZ0IiwgIm1hcmdpblJpZ2h0Iiwg
InBhZGRpbmdMZWZ0IiwgInBhZGRpbmdSaWdodCIgXSwKICAgICAgICAgICAgICAgIC8vIG9wYWNp
dHkgYW5pbWF0aW9ucwogICAgICAgICAgICAgICAgWyAib3BhY2l0eSIgXQogICAgICAgIF0sCiAg
ICAgICAgZnhOb3c7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICBzaG93OiBmdW5jdGlvbigg
c3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSwgZGlz
cGxheTsKCiAgICAgICAgICAgICAgICBpZiAoIHNwZWVkIHx8IHNwZWVkID09PSAwICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBnZW5GeCgic2hvdyIsIDMp
LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayk7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBqID0gdGhpcy5sZW5ndGg7IGkg
PCBqOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNb
aV07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBlbGVtLnN0
eWxlLmRpc3BsYXk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
UmVzZXQgdGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBpZiBpdCBp
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVpbmcgaGlkZGVu
IGJ5IGNhc2NhZGVkIHJ1bGVzIG9yIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhalF1ZXJ5Ll9kYXRhKGVsZW0sICJvbGRkaXNwbGF5IikgJiYgZGlzcGxh
eSA9PT0gIm5vbmUiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdp
dGggZGlzcGxheTogbm9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUg
aXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBzdWNoIGFu
IGVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGlz
cGxheSA9PT0gIiIgJiYgalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJub25lIiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
Ll9kYXRhKGVsZW0sICJvbGRkaXNwbGF5IiwgZGVmYXVsdERpc3BsYXkoZWxlbS5ub2RlTmFtZSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBkaXNwbGF5IG9mIG1vc3Qgb2YgdGhlIGVsZW1lbnRz
IGluIGEgc2Vjb25kIGxvb3AKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgdGhl
IGNvbnN0YW50IHJlZmxvdwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8
IGo7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1tp
XTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnN0eWxlICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGVsZW0uc3R5
bGUuZGlzcGxheTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGRpc3BsYXkgPT09ICIiIHx8IGRpc3BsYXkgPT09ICJub25lIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5kaXNwbGF5ID0galF1
ZXJ5Ll9kYXRhKGVsZW0sICJvbGRkaXNwbGF5IikgfHwgIiI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBoaWRlOiBmdW5jdGlv
biggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICBpZiAoIHNwZWVk
IHx8IHNwZWVkID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5h
bmltYXRlKCBnZW5GeCgiaGlkZSIsIDMpLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayk7CgogICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBqID0gdGhpcy5sZW5ndGg7IGkgPCBqOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0aGlzW2ldLnN0eWxlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0aGlzW2ldLCAiZGlz
cGxheSIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRp
c3BsYXkgIT09ICJub25lIiAmJiAhalF1ZXJ5Ll9kYXRhKCB0aGlzW2ldLCAib2xkZGlzcGxheSIg
KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5Ll9kYXRhKCB0aGlzW2ldLCAib2xkZGlzcGxheSIsIGRpc3BsYXkgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAogICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93CiAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgajsgaSsrICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpc1tpXS5zdHlsZSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbaV0uc3R5bGUuZGlzcGxheSA9ICJub25l
IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIFNhdmUgdGhlIG9sZCB0b2dnbGUgZnVuY3Rpb24K
ICAgICAgICBfdG9nZ2xlOiBqUXVlcnkuZm4udG9nZ2xlLAoKICAgICAgICB0b2dnbGU6IGZ1bmN0
aW9uKCBmbiwgZm4yLCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHZhciBib29sID0gdHlw
ZW9mIGZuID09PSAiYm9vbGVhbiI7CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbihmbikgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oZm4yKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fdG9nZ2xlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCiAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBmbiA9PSBudWxsIHx8IGJvb2wgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc3RhdGUgPSBib29sID8gZm4gOiBqUXVlcnkodGhpcykuaXMoIjpoaWRkZW4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhpcylbIHN0YXRlID8gInNo
b3ciIDogImhpZGUiIF0oKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRlKGdlbkZ4
KCJ0b2dnbGUiLCAzKSwgZm4sIGZuMiwgY2FsbGJhY2spOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGZhZGVUbzogZnVu
Y3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsIDApLnNob3coKS5lbmQo
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFuaW1hdGUoe29wYWNp
dHk6IHRvfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2spOwogICAgICAgIH0sCgogICAgICAgIGFu
aW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKICAgICAg
ICAgICAgICAgIHZhciBvcHRhbGwgPSBqUXVlcnkuc3BlZWQoc3BlZWQsIGVhc2luZywgY2FsbGJh
Y2spOwoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggb3B0YWxsLmNvbXBs
ZXRlLCBbIGZhbHNlIF0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBE
byBub3QgY2hhbmdlIHJlZmVyZW5jZWQgcHJvcGVydGllcyBhcyBwZXItcHJvcGVydHkgZWFzaW5n
IHdpbGwgYmUgbG9zdAogICAgICAgICAgICAgICAgcHJvcCA9IGpRdWVyeS5leHRlbmQoIHt9LCBw
cm9wICk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbIG9wdGFsbC5xdWV1ZSA9PT0gZmFs
c2UgPyAiZWFjaCIgOiAicXVldWUiIF0oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFhYWCAndGhpcycgZG9lcyBub3QgYWx3YXlzIGhhdmUgYSBub2RlTmFtZSB3aGVuIHJ1
bm5pbmcgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlc3Qgc3VpdGUKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggb3B0YWxsLnF1ZXVlID09PSBmYWxzZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX21hcmsoIHRoaXMgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wdCA9IGpRdWVyeS5l
eHRlbmQoIHt9LCBvcHRhbGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Vs
ZW1lbnQgPSB0aGlzLm5vZGVUeXBlID09PSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhpZGRlbiA9IGlzRWxlbWVudCAmJiBqUXVlcnkodGhpcykuaXMoIjpoaWRkZW4iKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB2YWwsIHAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlzcGxheSwgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJ0cywgc3RhcnQsIGVuZCwgdW5pdDsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHdpbGwgc3RvcmUgcGVyIHByb3BlcnR5IGVhc2luZyBhbmQgYmUgdXNlZCB0byBkZXRlcm1pbmUg
d2hlbiBhbiBhbmltYXRpb24gaXMgY29tcGxldGUKICAgICAgICAgICAgICAgICAgICAgICAgb3B0
LmFuaW1hdGVkUHJvcGVydGllcyA9IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
cCBpbiBwcm9wICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0
eSBuYW1lIG5vcm1hbGl6YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
ID0galF1ZXJ5LmNhbWVsQ2FzZSggcCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcCAhPT0gbmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3BbIG5hbWUgXSA9IHByb3BbIHAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBwcm9wWyBwIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBwcm9wWyBuYW1l
IF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhc2luZyByZXNvbHV0aW9u
OiBwZXIgcHJvcGVydHkgPiBvcHQuc3BlY2lhbEVhc2luZyA+IG9wdC5lYXNpbmcgPiAnc3dpbmcn
IChkZWZhdWx0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lmlz
QXJyYXkoIHZhbCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3B0LmFuaW1hdGVkUHJvcGVydGllc1sgbmFtZSBdID0gdmFsWyAxIF07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBwcm9wWyBuYW1lIF0gPSB2YWxbIDAgXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0LmFuaW1hdGVkUHJvcGVydGllc1sgbmFtZSBdID0g
b3B0LnNwZWNpYWxFYXNpbmcgJiYgb3B0LnNwZWNpYWxFYXNpbmdbIG5hbWUgXSB8fCBvcHQuZWFz
aW5nIHx8ICdzd2luZyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbCA9PT0gImhpZGUiICYmIGhpZGRlbiB8
fCB2YWwgPT09ICJzaG93IiAmJiAhaGlkZGVuICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG9wdC5jb21wbGV0ZS5jYWxsKCB0aGlzICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGlzRWxlbWVudCAmJiAoIG5hbWUgPT09ICJoZWlnaHQiIHx8IG5hbWUgPT09ICJ3aWR0
aCIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJ
RSBkb2VzIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hh
bmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVyZmxvd1ggYW5kCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvd1kgYXJlIHNldCB0byB0aGUg
c2FtZSB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0Lm92
ZXJmbG93ID0gWyB0aGlzLnN0eWxlLm92ZXJmbG93LCB0aGlzLnN0eWxlLm92ZXJmbG93WCwgdGhp
cy5zdHlsZS5vdmVyZmxvd1kgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTZXQgZGlzcGxheSBwcm9wZXJ0eSB0byBpbmxpbmUtYmxvY2sgZm9yIGhlaWdodC93
aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9u
cyBvbiBpbmxpbmUgZWxlbWVudHMgdGhhdCBhcmUgaGF2aW5nIHdpZHRoL2hlaWdodAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0ZWQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNzcyggdGhpcywgImRpc3Bs
YXkiICkgPT09ICJpbmxpbmUiICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggdGhpcywgImZsb2F0IiApID09PSAibm9u
ZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWpRdWVyeS5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5k
aXNwbGF5ID0gImlubGluZS1ibG9jayI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheSggdGhpcy5u
b2RlTmFtZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBpbmxpbmUtbGV2ZWwgZWxlbWVudHMgYWNjZXB0IGlubGluZS1ibG9jazsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBibG9jay1sZXZlbCBlbGVtZW50cyBuZWVkIHRvIGJlIGlubGluZSB3aXRoIGxheW91dAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZGlzcGxheSA9PT0gImlubGluZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAiaW5s
aW5lLWJsb2NrIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUi
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zdHlsZS56b29tID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0Lm92ZXJmbG93ICE9
IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5vdmVy
ZmxvdyA9ICJoaWRkZW4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBwIGluIHByb3AgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZSA9IG5ldyBqUXVlcnkuZngoIHRoaXMsIG9wdCwgcCApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbCA9IHByb3BbIHAgXTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCByZnh0eXBlcy50ZXN0KHZhbCkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlWyB2YWwgPT09ICJ0b2dnbGUiID8gaGlkZGVuID8gInNob3ci
IDogImhpZGUiIDogdmFsIF0oKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzID0gcmZ4
bnVtLmV4ZWMoIHZhbCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnQgPSBlLmN1cigpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcGFydHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZCA9IHBhcnNlRmxvYXQoIHBhcnRzWzJdICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSBwYXJ0c1szXSB8fCAoIGpRdWVyeS5j
c3NOdW1iZXJbIHAgXSA/ICIiIDogInB4IiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21wdXRlIHN0YXJ0aW5nIHZhbHVl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdW5p
dCAhPT0gInB4IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIHRoaXMsIHAsIChlbmQgfHwgMSkgKyB1bml0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFydCA9ICgoZW5kIHx8IDEpIC8gZS5jdXIoKSkgKiBzdGFydDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIHRoaXMs
IHAsIHN0YXJ0ICsgdW5pdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIGEgKz0vLT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0
aXZlIGFuaW1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHBhcnRzWzFdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZCA9ICggKHBhcnRzWyAxIF0gPT09ICItPSIgPyAtMSA6
IDEpICogZW5kICkgKyBzdGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZS5jdXN0b20oIHN0YXJ0LCBlbmQsIHVuaXQgKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlLmN1c3RvbSggc3RhcnQsIHZhbCwgIiIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZvciBKUyBzdHJpY3QgY29tcGxpYW5jZQogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIHN0b3A6
IGZ1bmN0aW9uKCBjbGVhclF1ZXVlLCBnb3RvRW5kICkgewogICAgICAgICAgICAgICAgaWYgKCBj
bGVhclF1ZXVlICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlKFtdKTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB0aW1lcnMubGVuZ3RoOwogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBjbGVhciBtYXJrZXIgY291bnRlcnMgaWYgd2Uga25vdyB0aGV5IHdvbid0
IGJlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWdvdG9FbmQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll91bm1hcmsoIHRydWUsIHRoaXMgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRpbWVyc1tpXS5lbGVtID09
PSB0aGlzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdv
dG9FbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZm9yY2UgdGhlIG5leHQgc3RlcCB0byBiZSB0aGUgbGFzdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcnNbaV0odHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0p
OwoKICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUg
bGFzdCBzdGVwIHdhc24ndCBmb3JjZWQKICAgICAgICAgICAgICAgIGlmICggIWdvdG9FbmQgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVxdWV1ZSgpOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCn0pOwoKLy8gQW5pbWF0
aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseQpmdW5jdGlv
biBjcmVhdGVGeE5vdygpIHsKICAgICAgICBzZXRUaW1lb3V0KCBjbGVhckZ4Tm93LCAwICk7CiAg
ICAgICAgcmV0dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTsKfQoKZnVuY3Rpb24gY2xlYXJG
eE5vdygpIHsKICAgICAgICBmeE5vdyA9IHVuZGVmaW5lZDsKfQoKLy8gR2VuZXJhdGUgcGFyYW1l
dGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb24KZnVuY3Rpb24gZ2VuRngoIHR5cGUs
IG51bSApIHsKICAgICAgICB2YXIgb2JqID0ge307CgogICAgICAgIGpRdWVyeS5lYWNoKCBmeEF0
dHJzLmNvbmNhdC5hcHBseShbXSwgZnhBdHRycy5zbGljZSgwLG51bSkpLCBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgIG9ialsgdGhpcyBdID0gdHlwZTsKICAgICAgICB9KTsKCiAgICAgICAg
cmV0dXJuIG9iajsKfQoKLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9u
cwpqUXVlcnkuZWFjaCh7CiAgICAgICAgc2xpZGVEb3duOiBnZW5GeCgic2hvdyIsIDEpLAogICAg
ICAgIHNsaWRlVXA6IGdlbkZ4KCJoaWRlIiwgMSksCiAgICAgICAgc2xpZGVUb2dnbGU6IGdlbkZ4
KCJ0b2dnbGUiLCAxKSwKICAgICAgICBmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCiAgICAg
ICAgZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKICAgICAgICBmYWRlVG9nZ2xlOiB7IG9w
YWNpdHk6ICJ0b2dnbGUiIH0KfSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkgewogICAgICAgIGpR
dWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrICk7CiAgICAgICAgfTsKfSk7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICBzcGVl
ZDogZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkgewogICAgICAgICAgICAgICAgdmFyIG9w
dCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKHt9
LCBzcGVlZCkgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmbiB8fCAhZm4g
JiYgZWFzaW5nIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmlzRnVu
Y3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9u
OiBzcGVlZCwKICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwg
ZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbihlYXNpbmcpICYmIGVhc2luZwogICAgICAgICAg
ICAgICAgfTsKCiAgICAgICAgICAgICAgICBvcHQuZHVyYXRpb24gPSBqUXVlcnkuZngub2ZmID8g
MCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8gb3B0LmR1cmF0aW9uIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBq
UXVlcnkuZnguc3BlZWRzW29wdC5kdXJhdGlvbl0gOiBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0
OwoKICAgICAgICAgICAgICAgIC8vIFF1ZXVlaW5nCiAgICAgICAgICAgICAgICBvcHQub2xkID0g
b3B0LmNvbXBsZXRlOwogICAgICAgICAgICAgICAgb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oIG5v
VW5tYXJrICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCBvcHQub2xkICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0Lm9sZC5j
YWxsKCB0aGlzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggb3B0LnF1ZXVlICE9PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcyApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBub1VubWFyayAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5Ll91bm1hcmsoIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICByZXR1cm4gb3B0OwogICAg
ICAgIH0sCgogICAgICAgIGVhc2luZzogewogICAgICAgICAgICAgICAgbGluZWFyOiBmdW5jdGlv
biggcCwgbiwgZmlyc3ROdW0sIGRpZmYgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmaXJzdE51bSArIGRpZmYgKiBwOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAg
IHN3aW5nOiBmdW5jdGlvbiggcCwgbiwgZmlyc3ROdW0sIGRpZmYgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoKC1NYXRoLmNvcyhwKk1hdGguUEkpLzIpICsgMC41KSAqIGRpZmYg
KyBmaXJzdE51bTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICB0aW1lcnM6
IFtdLAoKICAgICAgICBmeDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AgKSB7CiAgICAg
ICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgICAgICAgICAgICAgdGhpcy5l
bGVtID0gZWxlbTsKICAgICAgICAgICAgICAgIHRoaXMucHJvcCA9IHByb3A7CgogICAgICAgICAg
ICAgICAgb3B0aW9ucy5vcmlnID0gb3B0aW9ucy5vcmlnIHx8IHt9OwogICAgICAgIH0KCn0pOwoK
alF1ZXJ5LmZ4LnByb3RvdHlwZSA9IHsKICAgICAgICAvLyBTaW1wbGUgZnVuY3Rpb24gZm9yIHNl
dHRpbmcgYSBzdHlsZSB2YWx1ZQogICAgICAgIHVwZGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICBpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgKGpRdWVyeS5meC5zdGVwW3RoaXMucHJv
cF0gfHwgalF1ZXJ5LmZ4LnN0ZXAuX2RlZmF1bHQpKCB0aGlzICk7CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gR2V0IHRoZSBjdXJyZW50IHNpemUKICAgICAgICBjdXI6IGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgaWYgKCB0aGlzLmVsZW1bdGhpcy5wcm9wXSAhPSBudWxsICYmICghdGhpcy5l
bGVtLnN0eWxlIHx8IHRoaXMuZWxlbS5zdHlsZVt0aGlzLnByb3BdID09IG51bGwpICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtWyB0aGlzLnByb3AgXTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkLAogICAgICAgICAgICAgICAg
ICAgICAgICByID0galF1ZXJ5LmNzcyggdGhpcy5lbGVtLCB0aGlzLnByb3AgKTsKICAgICAgICAg
ICAgICAgIC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBj
b252ZXJ0ZWQgdG8gMCwKICAgICAgICAgICAgICAgIC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMg
InJvdGF0ZSgxcmFkKSIgYXJlIHJldHVybmVkIGFzIGlzLAogICAgICAgICAgICAgICAgLy8gc2lt
cGxlIHZhbHVlcyBzdWNoIGFzICIxMHB4IiBhcmUgcGFyc2VkIHRvIEZsb2F0LgogICAgICAgICAg
ICAgICAgcmV0dXJuIGlzTmFOKCBwYXJzZWQgPSBwYXJzZUZsb2F0KCByICkgKSA/ICFyIHx8IHIg
PT09ICJhdXRvIiA/IDAgOiByIDogcGFyc2VkOwogICAgICAgIH0sCgogICAgICAgIC8vIFN0YXJ0
IGFuIGFuaW1hdGlvbiBmcm9tIG9uZSBudW1iZXIgdG8gYW5vdGhlcgogICAgICAgIGN1c3RvbTog
ZnVuY3Rpb24oIGZyb20sIHRvLCB1bml0ICkgewogICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0
aGlzLAogICAgICAgICAgICAgICAgICAgICAgICBmeCA9IGpRdWVyeS5meDsKCiAgICAgICAgICAg
ICAgICB0aGlzLnN0YXJ0VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCk7CiAgICAgICAgICAg
ICAgICB0aGlzLnN0YXJ0ID0gZnJvbTsKICAgICAgICAgICAgICAgIHRoaXMuZW5kID0gdG87CiAg
ICAgICAgICAgICAgICB0aGlzLnVuaXQgPSB1bml0IHx8IHRoaXMudW5pdCB8fCAoIGpRdWVyeS5j
c3NOdW1iZXJbIHRoaXMucHJvcCBdID8gIiIgOiAicHgiICk7CiAgICAgICAgICAgICAgICB0aGlz
Lm5vdyA9IHRoaXMuc3RhcnQ7CiAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhdGUg
PSAwOwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHQoIGdvdG9FbmQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzZWxmLnN0ZXAoZ290b0VuZCk7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgdC5lbGVtID0gdGhpcy5lbGVtOwoKICAgICAgICAgICAgICAgIGlm
ICggdCgpICYmIGpRdWVyeS50aW1lcnMucHVzaCh0KSAmJiAhdGltZXJJZCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZXJJZCA9IHNldEludGVydmFsKCBmeC50aWNrLCBmeC5pbnRlcnZh
bCApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIFNpbXBsZSAnc2hv
dycgZnVuY3Rpb24KICAgICAgICBzaG93OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIC8v
IFJlbWVtYmVyIHdoZXJlIHdlIHN0YXJ0ZWQsIHNvIHRoYXQgd2UgY2FuIGdvIGJhY2sgdG8gaXQg
bGF0ZXIKICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF0gPSBqUXVl
cnkuc3R5bGUoIHRoaXMuZWxlbSwgdGhpcy5wcm9wICk7CiAgICAgICAgICAgICAgICB0aGlzLm9w
dGlvbnMuc2hvdyA9IHRydWU7CgogICAgICAgICAgICAgICAgLy8gQmVnaW4gdGhlIGFuaW1hdGlv
bgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Ugc3RhcnQgYXQgYSBzbWFsbCB3
aWR0aC9oZWlnaHQgdG8gYXZvaWQgYW55CiAgICAgICAgICAgICAgICAvLyBmbGFzaCBvZiBjb250
ZW50CiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbSh0aGlzLnByb3AgPT09ICJ3aWR0aCIgfHwg
dGhpcy5wcm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwLCB0aGlzLmN1cigpKTsKCiAgICAgICAgICAg
ICAgICAvLyBTdGFydCBieSBzaG93aW5nIHRoZSBlbGVtZW50CiAgICAgICAgICAgICAgICBqUXVl
cnkoIHRoaXMuZWxlbSApLnNob3coKTsKICAgICAgICB9LAoKICAgICAgICAvLyBTaW1wbGUgJ2hp
ZGUnIGZ1bmN0aW9uCiAgICAgICAgaGlkZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAv
LyBSZW1lbWJlciB3aGVyZSB3ZSBzdGFydGVkLCBzbyB0aGF0IHdlIGNhbiBnbyBiYWNrIHRvIGl0
IGxhdGVyCiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdID0galF1
ZXJ5LnN0eWxlKCB0aGlzLmVsZW0sIHRoaXMucHJvcCApOwogICAgICAgICAgICAgICAgdGhpcy5v
cHRpb25zLmhpZGUgPSB0cnVlOwoKICAgICAgICAgICAgICAgIC8vIEJlZ2luIHRoZSBhbmltYXRp
b24KICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tKHRoaXMuY3VyKCksIDApOwogICAgICAgIH0s
CgogICAgICAgIC8vIEVhY2ggc3RlcCBvZiBhbiBhbmltYXRpb24KICAgICAgICBzdGVwOiBmdW5j
dGlvbiggZ290b0VuZCApIHsKICAgICAgICAgICAgICAgIHZhciB0ID0gZnhOb3cgfHwgY3JlYXRl
RnhOb3coKSwKICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0gPSB0aGlzLmVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMgPSB0aGlzLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGksIG47CgogICAg
ICAgICAgICAgICAgaWYgKCBnb3RvRW5kIHx8IHQgPj0gb3B0aW9ucy5kdXJhdGlvbiArIHRoaXMu
c3RhcnRUaW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdyA9IHRoaXMuZW5k
OwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhdGUgPSAxOwogICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSgpOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXNbIHRoaXMucHJvcCBdID0gdHJ1ZTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXMg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLmFuaW1hdGVk
UHJvcGVydGllc1tpXSAhPT0gdHJ1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZG9uZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgb3Zl
cmZsb3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMub3ZlcmZs
b3cgIT0gbnVsbCAmJiAhalF1ZXJ5LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyApIHsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggWyAiIiwgIlgi
LCAiWSIgXSwgZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlWyAib3ZlcmZsb3ciICsgdmFsdWUg
XSA9IG9wdGlvbnMub3ZlcmZsb3dbaW5kZXhdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIaWRlIHRoZSBlbGVtZW50IGlmIHRoZSAiaGlk
ZSIgb3BlcmF0aW9uIHdhcyBkb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBvcHRpb25zLmhpZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkoZWxlbSkuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHByb3BlcnRpZXMs
IGlmIHRoZSBpdGVtIGhhcyBiZWVuIGhpZGRlbiBvciBzaG93bgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggb3B0aW9ucy5oaWRlIHx8IG9wdGlvbnMuc2hvdyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBwIGluIG9wdGlvbnMu
YW5pbWF0ZWRQcm9wZXJ0aWVzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIHAsIG9wdGlvbnMub3JpZ1twXSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhl
Y3V0ZSB0aGUgY29tcGxldGUgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zLmNvbXBsZXRlLmNhbGwoIGVsZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzaWNhbCBlYXNpbmcgY2Fu
bm90IGJlIHVzZWQgd2l0aCBhbiBJbmZpbml0eSBkdXJhdGlvbgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG9wdGlvbnMuZHVyYXRpb24gPT0gSW5maW5pdHkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5ub3cgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSB0IC0gdGhpcy5zdGFy
dFRpbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG4gLyBv
cHRpb25zLmR1cmF0aW9uOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXJm
b3JtIHRoZSBlYXNpbmcgZnVuY3Rpb24sIGRlZmF1bHRzIHRvIHN3aW5nCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSBqUXVlcnkuZWFzaW5nWyBvcHRpb25zLmFuaW1h
dGVkUHJvcGVydGllc1sgdGhpcy5wcm9wIF0gXSggdGhpcy5zdGF0ZSwgbiwgMCwgMSwgb3B0aW9u
cy5kdXJhdGlvbiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm93ID0g
dGhpcy5zdGFydCArICgodGhpcy5lbmQgLSB0aGlzLnN0YXJ0KSAqIHRoaXMucG9zKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIHRo
ZSBuZXh0IHN0ZXAgb2YgdGhlIGFuaW1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnVwZGF0ZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgIH0KfTsKCmpRdWVyeS5leHRlbmQoIGpRdWVyeS5meCwgewogICAgICAgIHRpY2s6
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgZm9yICggdmFyIHRpbWVycyA9IGpRdWVyeS50
aW1lcnMsIGkgPSAwIDsgaSA8IHRpbWVycy5sZW5ndGggOyArK2kgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIXRpbWVyc1tpXSgpICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVycy5zcGxpY2UoaS0tLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggIXRpbWVycy5sZW5ndGggKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5meC5zdG9wKCk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfSwKCiAgICAgICAgaW50ZXJ2YWw6IDEzLAoKICAgICAgICBzdG9wOiBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTsKICAgICAg
ICAgICAgICAgIHRpbWVySWQgPSBudWxsOwogICAgICAgIH0sCgogICAgICAgIHNwZWVkczogewog
ICAgICAgICAgICAgICAgc2xvdzogNjAwLAogICAgICAgICAgICAgICAgZmFzdDogMjAwLAogICAg
ICAgICAgICAgICAgLy8gRGVmYXVsdCBzcGVlZAogICAgICAgICAgICAgICAgX2RlZmF1bHQ6IDQw
MAogICAgICAgIH0sCgogICAgICAgIHN0ZXA6IHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IGZ1
bmN0aW9uKCBmeCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBmeC5l
bGVtLCAib3BhY2l0eSIsIGZ4Lm5vdyApOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICBfZGVmYXVsdDogZnVuY3Rpb24oIGZ4ICkgewogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGZ4LmVsZW0uc3R5bGUgJiYgZnguZWxlbS5zdHlsZVsgZngucHJvcCBdICE9IG51bGwgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnguZWxlbS5zdHlsZVsgZngucHJvcCBd
ID0gKGZ4LnByb3AgPT09ICJ3aWR0aCIgfHwgZngucHJvcCA9PT0gImhlaWdodCIgPyBNYXRoLm1h
eCgwLCBmeC5ub3cpIDogZngubm93KSArIGZ4LnVuaXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnguZWxlbVsgZngucHJv
cCBdID0gZngubm93OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQp9KTsKCmlmICggalF1ZXJ5LmV4cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVycyAp
IHsKICAgICAgICBqUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0g
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVycywgZnVu
Y3Rpb24oIGZuICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZm4u
ZWxlbTsKICAgICAgICAgICAgICAgIH0pLmxlbmd0aDsKICAgICAgICB9Owp9CgovLyBUcnkgdG8g
cmVzdG9yZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnQKZnVuY3Rpb24g
ZGVmYXVsdERpc3BsYXkoIG5vZGVOYW1lICkgewoKICAgICAgICBpZiAoICFlbGVtZGlzcGxheVsg
bm9kZU5hbWUgXSApIHsKCiAgICAgICAgICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHks
CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBqUXVlcnkoICI8IiArIG5vZGVOYW1lICsg
Ij4iICkuYXBwZW5kVG8oIGJvZHkgKSwKICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9
IGVsZW0uY3NzKCAiZGlzcGxheSIgKTsKCiAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZSgpOwoK
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLAogICAgICAgICAgICAg
ICAgLy8gZ2V0IGVsZW1lbnQncyByZWFsIGRlZmF1bHQgZGlzcGxheSBieSBhdHRhY2hpbmcgaXQg
dG8gYSB0ZW1wIGlmcmFtZQogICAgICAgICAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAibm9uZSIg
fHwgZGlzcGxheSA9PT0gIiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGlmcmFt
ZSB0byB1c2UgeWV0LCBzbyBjcmVhdGUgaXQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
aWZyYW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoICJpZnJhbWUiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWZyYW1lLmZyYW1lQm9yZGVyID0gaWZyYW1lLndpZHRoID0gaWZyYW1lLmhlaWdodCA9
IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGJv
ZHkuYXBwZW5kQ2hpbGQoIGlmcmFtZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3Jl
YXRlIGEgY2FjaGVhYmxlIGNvcHkgb2YgdGhlIGlmcmFtZSBkb2N1bWVudCBvbiBmaXJzdCBjYWxs
LgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBhbmQgT3BlcmEgd2lsbCBhbGxvdyB1cyB0
byByZXVzZSB0aGUgaWZyYW1lRG9jIHdpdGhvdXQgcmUtd3JpdGluZyB0aGUgZmFrZSBIVE1MCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGRvY3VtZW50IHRvIGl0OyBXZWJLaXQgJiBGaXJlZm94
IHdvbid0IGFsbG93IHJldXNpbmcgdGhlIGlmcmFtZSBkb2N1bWVudC4KICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhaWZyYW1lRG9jIHx8ICFpZnJhbWUuY3JlYXRlRWxlbWVudCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2MgPSAoIGlmcmFtZS5jb250ZW50
V2luZG93IHx8IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgKS5kb2N1bWVudDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2Mud3JpdGUoICggZG9jdW1lbnQuY29tcGF0TW9k
ZSA9PT0gIkNTUzFDb21wYXQiID8gIjwhZG9jdHlwZSBodG1sPiIgOiAiIiApICsgIjxodG1sPjxi
b2R5PiIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2MuY2xvc2Uo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bSA9IGlmcmFtZURvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgaWZyYW1lRG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoIGlmcmFtZSApOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBjb3JyZWN0IGRlZmF1bHQg
ZGlzcGxheQogICAgICAgICAgICAgICAgZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gPSBkaXNwbGF5
OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdOwp9CgoK
Cgp2YXIgcnRhYmxlID0gL150KD86YWJsZXxkfGgpJC9pLAogICAgICAgIHJyb290ID0gL14oPzpi
b2R5fGh0bWwpJC9pOwoKaWYgKCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiBpbiBkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQgKSB7CiAgICAgICAgalF1ZXJ5LmZuLm9mZnNldCA9IGZ1bmN0aW9uKCBv
cHRpb25zICkgewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdLCBib3g7CgogICAg
ICAgICAgICAgICAgaWYgKCBvcHRpb25zICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlm
ICggIWVsZW0gfHwgIWVsZW0ub3duZXJEb2N1bWVudCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBl
bGVtID09PSBlbGVtLm93bmVyRG9jdW1lbnQuYm9keSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNldCggZWxlbSApOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9
IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoKGUp
IHt9CgogICAgICAgICAgICAgICAgdmFyIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CgogICAgICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSBkaXNjb25uZWN0
ZWQgRE9NIG5vZGUKICAgICAgICAgICAgICAgIGlmICggIWJveCB8fCAhalF1ZXJ5LmNvbnRhaW5z
KCBkb2NFbGVtLCBlbGVtICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBib3gg
PyB7IHRvcDogYm94LnRvcCwgbGVmdDogYm94LmxlZnQgfSA6IHsgdG9wOiAwLCBsZWZ0OiAwIH07
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGJvZHkgPSBkb2MuYm9keSwK
ICAgICAgICAgICAgICAgICAgICAgICAgd2luID0gZ2V0V2luZG93KGRvYyksCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaWVudFRvcCAgPSBkb2NFbGVtLmNsaWVudFRvcCAgfHwgYm9keS5jbGll
bnRUb3AgIHx8IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudExlZnQgPSBkb2NFbGVt
LmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDAsCiAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcm9sbFRvcCAgPSB3aW4ucGFnZVlPZmZzZXQgfHwgalF1ZXJ5LnN1cHBvcnQuYm94TW9k
ZWwgJiYgZG9jRWxlbS5zY3JvbGxUb3AgIHx8IGJvZHkuc2Nyb2xsVG9wLAogICAgICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0IHx8IGpRdWVyeS5zdXBwb3J0
LmJveE1vZGVsICYmIGRvY0VsZW0uc2Nyb2xsTGVmdCB8fCBib2R5LnNjcm9sbExlZnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHRvcCAgPSBib3gudG9wICArIHNjcm9sbFRvcCAgLSBjbGllbnRU
b3AsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBib3gubGVmdCArIHNjcm9sbExlZnQg
LSBjbGllbnRMZWZ0OwoKICAgICAgICAgICAgICAgIHJldHVybiB7IHRvcDogdG9wLCBsZWZ0OiBs
ZWZ0IH07CiAgICAgICAgfTsKCn0gZWxzZSB7CiAgICAgICAgalF1ZXJ5LmZuLm9mZnNldCA9IGZ1
bmN0aW9uKCBvcHRpb25zICkgewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdOwoK
ICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBpZiAoICFlbGVtIHx8ICFlbGVtLm93bmVyRG9jdW1lbnQgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlm
ICggZWxlbSA9PT0gZWxlbS5vd25lckRvY3VtZW50LmJvZHkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkub2Zmc2V0LmJvZHlPZmZzZXQoIGVsZW0gKTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICBqUXVlcnkub2Zmc2V0LmluaXRpYWxpemUoKTsKCiAg
ICAgICAgICAgICAgICB2YXIgY29tcHV0ZWRTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZPZmZzZXRQYXJlbnQgPSBlbGVtLAogICAgICAgICAgICAgICAgICAgICAgICBkb2MgPSBl
bGVtLm93bmVyRG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW0gPSBkb2Mu
ZG9jdW1lbnRFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZG9jLmJvZHks
CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWaWV3ID0gZG9jLmRlZmF1bHRWaWV3LAog
ICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3ID8g
ZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApIDogZWxlbS5jdXJyZW50
U3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHRvcCA9IGVsZW0ub2Zmc2V0VG9wLAogICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gZWxlbS5vZmZzZXRMZWZ0OwoKICAgICAgICAgICAg
ICAgIHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0gIT09IGJvZHkgJiYg
ZWxlbSAhPT0gZG9jRWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
b2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiAmJiBwcmV2Q29tcHV0ZWRTdHlsZS5wb3NpdGlv
biA9PT0gImZpeGVkIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0
ZWRTdHlsZSA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVt
LCBudWxsKSA6IGVsZW0uY3VycmVudFN0eWxlOwogICAgICAgICAgICAgICAgICAgICAgICB0b3Ag
IC09IGVsZW0uc2Nyb2xsVG9wOwogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IC09IGVsZW0u
c2Nyb2xsTGVmdDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSA9PT0gb2Zmc2V0
UGFyZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAgKz0gZWxlbS5v
ZmZzZXRUb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBlbGVtLm9m
ZnNldExlZnQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm9m
ZnNldC5kb2VzTm90QWRkQm9yZGVyICYmICEoalF1ZXJ5Lm9mZnNldC5kb2VzQWRkQm9yZGVyRm9y
VGFibGVBbmRDZWxscyAmJiBydGFibGUudGVzdChlbGVtLm5vZGVOYW1lKSkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGNvbXB1
dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGggICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnQgKz0gcGFyc2VGbG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJM
ZWZ0V2lkdGggKSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVu
dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBlbGVtLm9m
ZnNldFBhcmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkub2Zmc2V0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90Vmlz
aWJsZSAmJiBjb21wdXRlZFN0eWxlLm92ZXJmbG93ICE9PSAidmlzaWJsZSIgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9wICArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxl
LmJvcmRlclRvcFdpZHRoICApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdCArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCApIHx8IDA7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZD
b21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAoIHByZXZDb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAicmVsYXRpdmUiIHx8
IHByZXZDb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAic3RhdGljIiApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgdG9wICArPSBib2R5Lm9mZnNldFRvcDsKICAgICAgICAgICAgICAgICAgICAg
ICAgbGVmdCArPSBib2R5Lm9mZnNldExlZnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiAmJiBwcmV2Q29t
cHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gImZpeGVkIiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdG9wICArPSBNYXRoLm1heCggZG9jRWxlbS5zY3JvbGxUb3AsIGJvZHkuc2Nyb2xsVG9wICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gTWF0aC5tYXgoIGRvY0VsZW0uc2Nyb2xs
TGVmdCwgYm9keS5zY3JvbGxMZWZ0ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgcmV0dXJuIHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKICAgICAgICB9Owp9CgpqUXVlcnku
b2Zmc2V0ID0gewogICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5LCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKSwgaW5uZXJEaXYsIGNoZWNrRGl2LCB0YWJsZSwgdGQsIGJvZHlNYXJnaW5U
b3AgPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJtYXJnaW5Ub3AiKSApIHx8IDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSAiPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1
dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7
d2lkdGg6MXB4O2hlaWdodDoxcHg7Jz48ZGl2PjwvZGl2PjwvZGl2Pjx0YWJsZSBzdHlsZT0ncG9z
aXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAw
MDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7JyBjZWxscGFkZGluZz0nMCcgY2VsbHNw
YWNpbmc9JzAnPjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjsKCiAgICAgICAgICAgICAgICBq
UXVlcnkuZXh0ZW5kKCBjb250YWluZXIuc3R5bGUsIHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHRv
cDogMCwgbGVmdDogMCwgbWFyZ2luOiAwLCBib3JkZXI6IDAsIHdpZHRoOiAiMXB4IiwgaGVpZ2h0
OiAiMXB4IiwgdmlzaWJpbGl0eTogImhpZGRlbiIgfSApOwoKICAgICAgICAgICAgICAgIGNvbnRh
aW5lci5pbm5lckhUTUwgPSBodG1sOwogICAgICAgICAgICAgICAgYm9keS5pbnNlcnRCZWZvcmUo
IGNvbnRhaW5lciwgYm9keS5maXJzdENoaWxkICk7CiAgICAgICAgICAgICAgICBpbm5lckRpdiA9
IGNvbnRhaW5lci5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgY2hlY2tEaXYgPSBpbm5lckRp
di5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgdGQgPSBpbm5lckRpdi5uZXh0U2libGluZy5m
aXJzdENoaWxkLmZpcnN0Q2hpbGQ7CgogICAgICAgICAgICAgICAgdGhpcy5kb2VzTm90QWRkQm9y
ZGVyID0gKGNoZWNrRGl2Lm9mZnNldFRvcCAhPT0gNSk7CiAgICAgICAgICAgICAgICB0aGlzLmRv
ZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzID0gKHRkLm9mZnNldFRvcCA9PT0gNSk7CgogICAg
ICAgICAgICAgICAgY2hlY2tEaXYuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICAgICAg
ICAgICAgY2hlY2tEaXYuc3R5bGUudG9wID0gIjIwcHgiOwoKICAgICAgICAgICAgICAgIC8vIHNh
ZmFyaSBzdWJ0cmFjdHMgcGFyZW50IGJvcmRlciB3aWR0aCBoZXJlIHdoaWNoIGlzIDVweAogICAg
ICAgICAgICAgICAgdGhpcy5zdXBwb3J0c0ZpeGVkUG9zaXRpb24gPSAoY2hlY2tEaXYub2Zmc2V0
VG9wID09PSAyMCB8fCBjaGVja0Rpdi5vZmZzZXRUb3AgPT09IDE1KTsKICAgICAgICAgICAgICAg
IGNoZWNrRGl2LnN0eWxlLnBvc2l0aW9uID0gY2hlY2tEaXYuc3R5bGUudG9wID0gIiI7CgogICAg
ICAgICAgICAgICAgaW5uZXJEaXYuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAgICAgICAg
ICAgICAgIGlubmVyRGl2LnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKCiAgICAgICAgICAg
ICAgICB0aGlzLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSA9IChjaGVja0Rp
di5vZmZzZXRUb3AgPT09IC01KTsKCiAgICAgICAgICAgICAgICB0aGlzLmRvZXNOb3RJbmNsdWRl
TWFyZ2luSW5Cb2R5T2Zmc2V0ID0gKGJvZHkub2Zmc2V0VG9wICE9PSBib2R5TWFyZ2luVG9wKTsK
CiAgICAgICAgICAgICAgICBib2R5LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKICAgICAgICAg
ICAgICAgIGpRdWVyeS5vZmZzZXQuaW5pdGlhbGl6ZSA9IGpRdWVyeS5ub29wOwogICAgICAgIH0s
CgogICAgICAgIGJvZHlPZmZzZXQ6IGZ1bmN0aW9uKCBib2R5ICkgewogICAgICAgICAgICAgICAg
dmFyIHRvcCA9IGJvZHkub2Zmc2V0VG9wLAogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0g
Ym9keS5vZmZzZXRMZWZ0OwoKICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQuaW5pdGlhbGl6
ZSgpOwoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm9mZnNldC5kb2VzTm90SW5jbHVkZU1h
cmdpbkluQm9keU9mZnNldCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9wICArPSBwYXJz
ZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJtYXJnaW5Ub3AiKSApIHx8IDA7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhib2R5LCAibWFyZ2lu
TGVmdCIpICkgfHwgMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4g
eyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OwogICAgICAgIH0sCgogICAgICAgIHNldE9mZnNldDog
ZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7CiAgICAgICAgICAgICAgICB2YXIgcG9zaXRp
b24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICk7CgogICAgICAgICAgICAgICAgLy8g
c2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0
aWMgZWxlbQogICAgICAgICAgICAgICAgaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjdXJFbGVtID0galF1ZXJ5KCBl
bGVtICksCiAgICAgICAgICAgICAgICAgICAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0
KCksCiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0s
ICJ0b3AiICksCiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckNTU0xlZnQgPSBqUXVlcnkuY3Nz
KCBlbGVtLCAibGVmdCIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUG9zaXRp
b24gPSAocG9zaXRpb24gPT09ICJhYnNvbHV0ZSIgfHwgcG9zaXRpb24gPT09ICJmaXhlZCIpICYm
IGpRdWVyeS5pbkFycmF5KCJhdXRvIiwgW2N1ckNTU1RvcCwgY3VyQ1NTTGVmdF0pID4gLTEsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3BzID0ge30sIGN1clBvc2l0aW9uID0ge30sIGN1clRv
cCwgY3VyTGVmdDsKCiAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGFibGUgdG8gY2FsY3Vs
YXRlIHBvc2l0aW9uIGlmIGVpdGhlciB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBp
cyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWQKICAgICAgICAgICAgICAgIGlmICggY2FsY3VsYXRl
UG9zaXRpb24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1clBvc2l0aW9uID0gY3VyRWxl
bS5wb3NpdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICBjdXJUb3AgPSBjdXJQb3NpdGlv
bi50b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0
OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9w
ID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwg
Y3VyT2Zmc2V0ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKG9wdGlv
bnMudG9wICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudG9wID0gKG9w
dGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCkgKyBjdXJUb3A7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sZWZ0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvcHMubGVmdCA9IChvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCkgKyBj
dXJMZWZ0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggInVzaW5nIiBp
biBvcHRpb25zICkgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzaW5nLmNhbGwo
IGVsZW0sIHByb3BzICk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICBjdXJFbGVtLmNzcyggcHJvcHMgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
Cn07CgoKalF1ZXJ5LmZuLmV4dGVuZCh7CiAgICAgICAgcG9zaXRpb246IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgaWYgKCAhdGhpc1swXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGVsZW0g
PSB0aGlzWzBdLAoKICAgICAgICAgICAgICAgIC8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50CiAg
ICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCgpLAoKICAgICAg
ICAgICAgICAgIC8vIEdldCBjb3JyZWN0IG9mZnNldHMKICAgICAgICAgICAgICAgIG9mZnNldCAg
ICAgICA9IHRoaXMub2Zmc2V0KCksCiAgICAgICAgICAgICAgICBwYXJlbnRPZmZzZXQgPSBycm9v
dC50ZXN0KG9mZnNldFBhcmVudFswXS5ub2RlTmFtZSkgPyB7IHRvcDogMCwgbGVmdDogMCB9IDog
b2Zmc2V0UGFyZW50Lm9mZnNldCgpOwoKICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGVsZW1l
bnQgbWFyZ2lucwogICAgICAgICAgICAgICAgLy8gbm90ZTogd2hlbiBhbiBlbGVtZW50IGhhcyBt
YXJnaW46IGF1dG8gdGhlIG9mZnNldExlZnQgYW5kIG1hcmdpbkxlZnQKICAgICAgICAgICAgICAg
IC8vIGFyZSB0aGUgc2FtZSBpbiBTYWZhcmkgY2F1c2luZyBvZmZzZXQubGVmdCB0byBpbmNvcnJl
Y3RseSBiZSAwCiAgICAgICAgICAgICAgICBvZmZzZXQudG9wICAtPSBwYXJzZUZsb2F0KCBqUXVl
cnkuY3NzKGVsZW0sICJtYXJnaW5Ub3AiKSApIHx8IDA7CiAgICAgICAgICAgICAgICBvZmZzZXQu
bGVmdCAtPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJnaW5MZWZ0IikgKSB8fCAw
OwoKICAgICAgICAgICAgICAgIC8vIEFkZCBvZmZzZXRQYXJlbnQgYm9yZGVycwogICAgICAgICAg
ICAgICAgcGFyZW50T2Zmc2V0LnRvcCAgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZzZXRQ
YXJlbnRbMF0sICJib3JkZXJUb3BXaWR0aCIpICkgfHwgMDsKICAgICAgICAgICAgICAgIHBhcmVu
dE9mZnNldC5sZWZ0ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAi
Ym9yZGVyTGVmdFdpZHRoIikgKSB8fCAwOwoKICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHRo
ZSB0d28gb2Zmc2V0cwogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdG9wOiAgb2Zmc2V0LnRvcCAgLSBwYXJlbnRPZmZzZXQudG9wLAogICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0CiAgICAgICAg
ICAgICAgICB9OwogICAgICAgIH0sCgogICAgICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCB8fCBkb2N1
bWVudC5ib2R5OwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG9mZnNldFBhcmVudCAm
JiAoIXJyb290LnRlc3Qob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAmJiBqUXVlcnkuY3NzKG9mZnNl
dFBhcmVudCwgInBvc2l0aW9uIikgPT09ICJzdGF0aWMiKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50Owog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBv
ZmZzZXRQYXJlbnQ7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9Cn0pOwoKCi8vIENyZWF0
ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kcwpqUXVlcnkuZWFjaCggWyJMZWZ0Iiwg
IlRvcCJdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKICAgICAgICB2YXIgbWV0aG9kID0gInNjcm9s
bCIgKyBuYW1lOwoKICAgICAgICBqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCAp
IHsKICAgICAgICAgICAgICAgIHZhciBlbGVtLCB3aW47CgogICAgICAgICAgICAgICAgaWYgKCB2
YWwgPT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNb
IDAgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbiA9IGdldFdpbmRvdyggZWxlbSApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBzY3JvbGwgb2Zmc2V0CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB3aW4gPyAoInBhZ2VYT2Zmc2V0IiBpbiB3aW4pID8gd2lu
WyBpID8gInBhZ2VZT2Zmc2V0IiA6ICJwYWdlWE9mZnNldCIgXSA6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwgJiYgd2luLmRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudFsgbWV0aG9kIF0gfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpbi5kb2N1bWVudC5ib2R5WyBtZXRob2QgXSA6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbVsgbWV0aG9kIF07CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gU2V0IHRoZSBzY3JvbGwgb2Zmc2V0CiAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICB3aW4gPSBnZXRX
aW5kb3coIHRoaXMgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggd2luICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbi5zY3JvbGxUbygKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICFpID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxM
ZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA/IHZhbCA6
IGpRdWVyeSggd2luICkuc2Nyb2xsVG9wKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzWyBtZXRob2QgXSA9IHZhbDsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKfSk7CgpmdW5jdGlvbiBnZXRXaW5k
b3coIGVsZW0gKSB7CiAgICAgICAgcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8KICAg
ICAgICAgICAgICAgIGVsZW0gOgogICAgICAgICAgICAgICAgZWxlbS5ub2RlVHlwZSA9PT0gOSA/
CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZGVmYXVsdFZpZXcgfHwgZWxlbS5wYXJlbnRX
aW5kb3cgOgogICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTsKfQoKCgoKLy8gQ3JlYXRlIHdp
ZHRoLCBoZWlnaHQsIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0
ZXJXaWR0aCBtZXRob2RzCmpRdWVyeS5lYWNoKFsgIkhlaWdodCIsICJXaWR0aCIgXSwgZnVuY3Rp
b24oIGksIG5hbWUgKSB7CgogICAgICAgIHZhciB0eXBlID0gbmFtZS50b0xvd2VyQ2FzZSgpOwoK
ICAgICAgICAvLyBpbm5lckhlaWdodCBhbmQgaW5uZXJXaWR0aAogICAgICAgIGpRdWVyeS5mblsg
ImlubmVyIiArIG5hbWUgXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGVsZW0g
PSB0aGlzWzBdOwogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0gJiYgZWxlbS5zdHlsZSA/CiAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUs
ICJwYWRkaW5nIiApICkgOgogICAgICAgICAgICAgICAgICAgICAgICBudWxsOwogICAgICAgIH07
CgogICAgICAgIC8vIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoCiAgICAgICAgalF1ZXJ5LmZu
WyAib3V0ZXIiICsgbmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiApIHsKICAgICAgICAgICAgICAg
IHZhciBlbGVtID0gdGhpc1swXTsKICAgICAgICAgICAgICAgIHJldHVybiBlbGVtICYmIGVsZW0u
c3R5bGUgPwogICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBl
bGVtLCB0eXBlLCBtYXJnaW4gPyAibWFyZ2luIiA6ICJib3JkZXIiICkgKSA6CiAgICAgICAgICAg
ICAgICAgICAgICAgIG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgalF1ZXJ5LmZuWyB0eXBlIF0g
PSBmdW5jdGlvbiggc2l6ZSApIHsKICAgICAgICAgICAgICAgIC8vIEdldCB3aW5kb3cgd2lkdGgg
b3IgaGVpZ2h0CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF07CiAgICAgICAgICAg
ICAgICBpZiAoICFlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZSA9
PSBudWxsID8gbnVsbCA6IHRoaXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2l6ZSApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZlsgdHlwZSBdKCBzaXplLmNhbGwoIHRoaXMsIGksIHNlbGZbIHR5cGUg
XSgpICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRXZlcnlvbmUgZWxzZSB1c2UgZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50IG9yIGRvY3VtZW50LmJvZHkgZGVwZW5kaW5nIG9uIFF1aXJrcyB2cyBTdGFuZGFyZHMgbW9k
ZQogICAgICAgICAgICAgICAgICAgICAgICAvLyAzcmQgY29uZGl0aW9uIGFsbG93cyBOb2tpYSBz
dXBwb3J0LCBhcyBpdCBzdXBwb3J0cyB0aGUgZG9jRWxlbSBwcm9wIGJ1dCBub3QgQ1NTMUNvbXBh
dAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9jRWxlbVByb3AgPSBlbGVtLmRvY3VtZW50
LmRvY3VtZW50RWxlbWVudFsgImNsaWVudCIgKyBuYW1lIF0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9keSA9IGVsZW0uZG9jdW1lbnQuYm9keTsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0uZG9jdW1lbnQuY29tcGF0TW9kZSA9PT0gIkNTUzFDb21wYXQiICYm
IGRvY0VsZW1Qcm9wIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSAmJiBi
b2R5WyAiY2xpZW50IiArIG5hbWUgXSB8fCBkb2NFbGVtUHJvcDsKCiAgICAgICAgICAgICAgICAv
LyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBlbGVtLm5vZGVUeXBlID09PSA5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBFaXRo
ZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0sIHdoaWNoZXZl
ciBpcyBncmVhdGVyCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmRvY3VtZW50RWxlbWVudFsiY2xpZW50
IiArIG5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsic2Ny
b2xsIiArIG5hbWVdLCBlbGVtLmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIiArIG5hbWVdLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsib2Zmc2V0IiArIG5hbWVdLCBl
bGVtLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IiArIG5hbWVdCiAgICAgICAgICAgICAgICAgICAg
ICAgICk7CgogICAgICAgICAgICAgICAgLy8gR2V0IG9yIHNldCB3aWR0aCBvciBoZWlnaHQgb24g
dGhlIGVsZW1lbnQKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHNpemUgPT09IHVuZGVmaW5l
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yaWcgPSBqUXVlcnkuY3NzKCBlbGVt
LCB0eXBlICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcGFyc2VGbG9h
dCggb3JpZyApOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pc05hTigg
cmV0ICkgPyBvcmlnIDogcmV0OwoKICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgd2lkdGggb3Ig
aGVpZ2h0IG9uIHRoZSBlbGVtZW50IChkZWZhdWx0IHRvIHBpeGVscyBpZiB2YWx1ZSBpcyB1bml0
bGVzcykKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmNzcyggdHlwZSwgdHlwZW9mIHNpemUgPT09ICJzdHJpbmciID8gc2l6ZSA6IHNp
emUgKyAicHgiICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCn0pOwoKCi8vIEV4cG9z
ZSBqUXVlcnkgdG8gdGhlIGdsb2JhbCBvYmplY3QKd2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0g
alF1ZXJ5Owp9KSh3aW5kb3cpOwo8L3NjcmlwdD48c2NyaXB0IGlkPSJqc29uIj5beyJ0aW1lc3Rh
bXAiOiAxMzQ0MDEwOTE0LCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjog
eyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ0Ljg1
MDExMTAwNzY5MDQzLCAibWF4IjogNjYuOTkzOTUxNzk3NDg1MzUyLCAibWVkaWFuIjogNTIuOTQ4
OTUxNzIxMTkxNDA2LCAic3RkZXYiOiAyMy4zNzg2OTE2MzY1NzQ4MzIsICJhdmciOiA1My40MDMz
MTQ3OTEyMjc2NDMsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJj
aHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDEwOTE2LCAi
Y2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9m
aWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDUuMzIwOTg3NzAxNDE2MDE2LCAi
bWF4IjogNjcuODkxODM2MTY2MzgxODM2LCAibWVkaWFuIjogNTIuMzY0MTEwOTQ2NjU1MjczLCAi
c3RkZXYiOiAyNC44Nzc2Njg2Nzg5MTIxNjIsICJhdmciOiA1NC4wMzczMzI1MzQ3OTAwMzksICJ1
bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNpb24i
OiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMDkxNywgIndlYmtpdC1yZXZpc2lvbiI6
ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5z
b24uc3ZnIjogeyJtaW4iOiA0NS4zNjMxODc3ODk5MTY5OTIsICJtYXgiOiA2MS4xOTg5NDk4MTM4
NDI3NzMsICJtZWRpYW4iOiA1MC45NDk4MTE5MzU0MjQ4MDUsICJzdGRldiI6IDE3LjMwNjcyMzgz
NzA3NzAzMywgImF2ZyI6IDUyLjU1OTA5OTY5OTMyMTU0MywgInVuaXQiOiAibXMifX0sICJicmFu
Y2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRp
bWVzdGFtcCI6IDEzNDQwMTA5MTksICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVz
dWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4i
OiA0Ni4xMDUxNDY0MDgwODEwNTUsICJtYXgiOiA2OS4xNzg4MTk2NTYzNzIwNywgIm1lZGlhbiI6
IDUwLjczOTA0OTkxMTQ5OTAyMywgInN0ZGV2IjogMjIuNjg0MTgwNDA3OTA5MzY2LCAiYXZnIjog
NTIuNDU3MTk0NTc5Mjc1MDMzLCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1
bmsiLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTA5
MjEsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2
Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDYuMzYzODMwNTY2NDA2MjUs
ICJtYXgiOiA2Mi41NzIwMDI0MTA4ODg2NzIsICJtZWRpYW4iOiA1MC4wNTEyMTIzMTA3OTEwMTYs
ICJzdGRldiI6IDE4LjMxMjU1ODA0NzQ3NDYxLCAiYXZnIjogNTEuNTc1MjM0MDYxNzkzMjgyLCAi
dW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAiY2hyb21pdW0tcmV2aXNp
b24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMDkyMywgImNocm9taXVtLXJldmlz
aW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gy
X2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ1Ljk0NTg4Mjc5NzI0MTIxMSwgIm1heCI6IDY5LjUwNjE2
ODM2NTQ3ODUxNiwgIm1lZGlhbiI6IDUyLjM0MTIyMjc2MzA2MTUyMywgInN0ZGV2IjogMjAuOTcx
ODkyMDY2NzAwMTcxLCAiYXZnIjogNTMuMTY1MDcxODg4OTczODQxLCAidW5pdCI6ICJtcyJ9fSwg
ImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7
InRpbWVzdGFtcCI6IDEzNDQwMTA5MjQsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIiwgInJl
c3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWlu
IjogNDUuMTgwMDgyMzIxMTY2OTkyLCAibWF4IjogNjguOTczNzc5Njc4MzQ0NzI3LCAibWVkaWFu
IjogNTAuODY4MDM0MzYyNzkyOTY5LCAic3RkZXYiOiAyMy40Nzc4NjMyOTM2MTA5NTUsICJhdmci
OiA1Mi44NzEwNjQxMzU5MDI4MDYsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10
cnVuayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0
MDEwOTI2LCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VM
b2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDguMzczOTM3NjA2
ODExNTIzLCAibWF4IjogNjMuMDEzMDc2NzgyMjI2NTYyLCAibWVkaWFuIjogNTAuNzE5OTc2NDI1
MTcwODk4LCAic3RkZXYiOiAxOC45MzgyNDM5OTUzODEzMzUsICJhdmciOiA1My4wODYzMTg0Njc3
OTI3MDgsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3ZWJraXQt
cmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMDkyOCwgIndlYmtpdC1y
ZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdm
aXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0NS4zNzg5MjM0MTYxMzc2OTUsICJtYXgiOiA2MS4y
NTM3ODYwODcwMzYxMzMsICJtZWRpYW4iOiA1MC4yMjAwMTI2NjQ3OTQ5MjIsICJzdGRldiI6IDE4
LjA3MDIwMjMzMjAyMTQzNCwgImF2ZyI6IDUxLjk0NDM1NjIxNTYyNzU2NSwgInVuaXQiOiAibXMi
fX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYw
MyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTA5MjksICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2
MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3Zn
IjogeyJtaW4iOiA0Ny4wMzcxMjQ2MzM3ODkwNjIsICJtYXgiOiA2NC42MjAwMTgwMDUzNzEwOTQs
ICJtZWRpYW4iOiA1Mi43MDQwOTU4NDA0NTQxMDIsICJzdGRldiI6IDE5LjAyNDExNjkwMDk3NTA4
NCwgImF2ZyI6IDUzLjA5ODI4OTU5MDEzMjg3MiwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAi
d2Via2l0LXRydW5rIiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAi
OiAxMzQ0MDEwOTMxLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQ
YWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ4LjcyNTEy
ODE3MzgyODEyNSwgIm1heCI6IDYwLjk0NTAzNDAyNzA5OTYwOSwgIm1lZGlhbiI6IDUxLjgxMDk3
OTg0MzEzOTY0OCwgInN0ZGV2IjogMTYuMzQ4MTAyNDI1NzAxNzU3LCAiYXZnIjogNTMuMjk4Mzk4
MDY4MDc2Njg2LCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAiY2hy
b21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMDkzMywgImNo
cm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmls
ZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ3LjIxNDk4NDg5Mzc5ODgyOCwgIm1h
eCI6IDYwLjM4NDk4ODc4NDc5MDAzOSwgIm1lZGlhbiI6IDUwLjExODkyMzE4NzI1NTg1OSwgInN0
ZGV2IjogMTIuOTkzNjA5MjcxODYwNzI5LCAiYXZnIjogNTEuMTA0NDk1Mzk5ODc2NjQsICJ1bml0
IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNpb24iOiAi
MTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMDkzNSwgIndlYmtpdC1yZXZpc2lvbiI6ICIx
MjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24u
c3ZnIjogeyJtaW4iOiA0Ny4zNjAxODE4MDg0NzE2OCwgIm1heCI6IDY1Ljc4NDIxNTkyNzEyNDAy
MywgIm1lZGlhbiI6IDUwLjg5NzgzNjY4NTE4MDY2NCwgInN0ZGV2IjogMTguOTEzODk0Mzk1OTM2
NjMsICJhdmciOiA1Mi41MDUyNDIxOTcxMzcxNDMsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjog
IndlYmtpdC10cnVuayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3Rh
bXAiOiAxMzQ0MDEwOTM2LCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMi
OiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDQu
NTc0MDIyMjkzMDkwODIsICJtYXgiOiA2OC4wNDIwMzk4NzEyMTU4MiwgIm1lZGlhbiI6IDUzLjI0
NjAyMTI3MDc1MTk1MywgInN0ZGV2IjogMjMuNDM5OTMyMDIzODcxMzIyLCAiYXZnIjogNTMuMzcw
NDg4MzE3Mzg5MjM4LCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAi
d2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTA5MzgsICJ3
ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxl
cy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDkuMDMxMDE5MjEwODE1NDMsICJtYXgi
OiA2MS4yNjMwODQ0MTE2MjEwOTQsICJtZWRpYW4iOiA1MS4xNTM4OTgyMzkxMzU3NDIsICJzdGRl
diI6IDE2LjY0NTI0NzAzMDk5NjMzNywgImF2ZyI6IDUzLjA0MzgxNzIxODk4MTI5NiwgInVuaXQi
OiAibXMifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjog
IjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTA5NDAsICJjaHJvbWl1bS1yZXZpc2lvbiI6
ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5z
b24uc3ZnIjogeyJtaW4iOiA0Ni45NDEwNDE5NDY0MTExMzMsICJtYXgiOiA2MC4yMDE4ODMzMTYw
NDAwMzksICJtZWRpYW4iOiA1MC4xOTQ5Nzg3MTM5ODkyNTgsICJzdGRldiI6IDEzLjUyODY5NjY5
NzMyNjc1NSwgImF2ZyI6IDUwLjk1OTM0ODY3ODU4ODg2NywgInVuaXQiOiAibXMifX0sICJicmFu
Y2giOiAid2Via2l0LXRydW5rIiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1l
c3RhbXAiOiAxMzQ0MDEwOTQyLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRz
IjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ2
LjYzNTE1MDkwOTQyMzgyOCwgIm1heCI6IDY0LjQ5MTk4NzIyODM5MzU1NSwgIm1lZGlhbiI6IDUx
Ljk4MzgzMzMxMjk4ODI4MSwgInN0ZGV2IjogMjAuOTY3OTAwMTQ0MDM3NjU3LCAiYXZnIjogNTIu
ODc4NTkzMTQzNjYzOTA2LCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsi
LCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMDk0
MywgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9z
dmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ2Ljc1NTc5MDcxMDQ0OTIx
OSwgIm1heCI6IDYwLjgwMTk4Mjg3OTYzODY3MiwgIm1lZGlhbiI6IDUwLjIxMjE0NDg1MTY4NDU3
LCAic3RkZXYiOiAxNC40ODEyMzAxMzg2MTU2ODYsICJhdmciOiA1MS40OTQxNDY2NDgyMDYxOTcs
ICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNp
b24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMDk0NSwgIndlYmtpdC1yZXZpc2lv
biI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9n
YW5zb24uc3ZnIjogeyJtaW4iOiA0OC45NTk5NzA0NzQyNDMxNjQsICJtYXgiOiA2MC4wMjc4Mzc3
NTMyOTU4OTgsICJtZWRpYW4iOiA1MC42MDcyMDQ0MzcyNTU4NTksICJzdGRldiI6IDE3LjM5NzY2
MjgyMzQxNDk2MiwgImF2ZyI6IDUzLjAyNzQyOTA3ODc1NDYyOSwgInVuaXQiOiAibXMifX0sICJi
cmFuY2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7
InRpbWVzdGFtcCI6IDEzNDQwMTA5NDcsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAi
cmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJt
aW4iOiA0Ny4zNDExMDgzMjIxNDM1NTUsICJtYXgiOiA2Ni4xNDgwNDI2Nzg4MzMwMDgsICJtZWRp
YW4iOiA1MC45ODc5NTg5MDgwODEwNTUsICJzdGRldiI6IDE5LjQ5MTg3MjM0NzY1MDUwNiwgImF2
ZyI6IDUyLjQyNjMxMzA5OTEwODI0MiwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0
LXRydW5rIiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0
MDEwOTQ5LCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9h
ZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ2Ljc2Njk5NjM4MzY2
Njk5MiwgIm1heCI6IDY2LjYzNzk5Mjg1ODg4NjcxOSwgIm1lZGlhbiI6IDUxLjI5NTA0MjAzNzk2
Mzg2NywgInN0ZGV2IjogMjIuNzAyMDk1MzA1OTM1OTYzLCAiYXZnIjogNTMuNTEzMDUwMDc5MzQ1
NzAzLCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAiY2hyb21pdW0t
cmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMDk1MCwgImNocm9taXVt
LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jh
d2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ1LjU3NjA5NTU4MTA1NDY4OCwgIm1heCI6IDYx
LjE0NzkyODIzNzkxNTAzOSwgIm1lZGlhbiI6IDQ5Ljk1MDEyMjgzMzI1MTk1MywgInN0ZGV2Ijog
MTQuODE0NTY0OTYzNTcwOTIzLCAiYXZnIjogNTAuOTk0MTMyNjk0NDQ1MTYzLCAidW5pdCI6ICJt
cyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYw
MyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTA5NTIsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAz
IiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6
IHsibWluIjogNDcuNzc1OTgzODEwNDI0ODA1LCAibWF4IjogNjcuMDAxMTA0MzU0ODU4Mzk4LCAi
bWVkaWFuIjogNTAuOTE0MDQ5MTQ4NTU5NTcsICJzdGRldiI6IDIwLjA5NTg2NTEzMTA0NTgxOSwg
ImF2ZyI6IDUyLjc3ODI1NjU2NjkwMDk1NywgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Vi
a2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6
IDEzNDQwMTA5NTQsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsi
UGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0Ny4wNjAw
MTI4MTczODI4MTIsICJtYXgiOiA2MC42NDIwMDQwMTMwNjE1MjMsICJtZWRpYW4iOiA1MS4wNTk5
NjEzMTg5Njk3MjcsICJzdGRldiI6IDE0LjkwMTk2ODQyMzE2MDI3OCwgImF2ZyI6IDUyLjA1MTE0
MjY0MjM3MjUzMywgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgIndl
YmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDEwOTU2LCAid2Vi
a2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMv
Y3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ4LjU0MzkzMDA1MzcxMDkzOCwgIm1heCI6
IDYxLjQ4NDA5ODQzNDQ0ODI0MiwgIm1lZGlhbiI6IDU1LjQxMjA1NDA2MTg4OTY0OCwgInN0ZGV2
IjogMTUuNzA3MzQxMjMzMjQ1NjYyLCAiYXZnIjogNTQuNTk5MTIxOTk3MjMwOTMxLCAidW5pdCI6
ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAiY2hyb21pdW0tcmV2aXNpb24iOiAi
MTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMDk1NywgImNocm9taXVtLXJldmlzaW9uIjog
IjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNv
bi5zdmciOiB7Im1pbiI6IDQ3Ljg4NzA4Njg2ODI4NjEzMywgIm1heCI6IDYwLjAyMTE2MjAzMzA4
MTA1NSwgIm1lZGlhbiI6IDUxLjg0MTk3NDI1ODQyMjg1MiwgInN0ZGV2IjogMTcuOTMzMjM4NDM4
ODY4NzE3LCAiYXZnIjogNTMuMDk5Njk1MDA0OTE0OTQyLCAidW5pdCI6ICJtcyJ9fSwgImJyYW5j
aCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVz
dGFtcCI6IDEzNDQwMTA5NTksICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMi
OiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDku
OTI2MDQyNTU2NzYyNjk1LCAibWF4IjogNzAuNzg3OTA2NjQ2NzI4NTE2LCAibWVkaWFuIjogNTMu
MzgwOTY2MTg2NTIzNDM4LCAic3RkZXYiOiAyMy40ODI1ODUxMDY5MTg5MDQsICJhdmciOiA1NS43
Mjc1MTk0ODcwNzk4MjUsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIs
ICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDEwOTYx
LCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2
Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDYuMDMxOTUxOTA0Mjk2ODc1
LCAibWF4IjogNjAuMDMxODkwODY5MTQwNjI1LCAibWVkaWFuIjogNTEuMDE1MTM4NjI2MDk4NjMz
LCAic3RkZXYiOiAxNi44NzY5MTAzODI1NDg5LCAiYXZnIjogNTIuMjkyODg2NTMzMjM1MjQ3LCAi
dW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9u
IjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTA5NjMsICJ3ZWJraXQtcmV2aXNpb24i
OiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fu
c29uLnN2ZyI6IHsibWluIjogNDkuNDk1OTM1NDQwMDYzNDc3LCAibWF4IjogNjAuMzY4MDYxMDY1
NjczODI4LCAibWVkaWFuIjogNTEuNjg3OTU1ODU2MzIzMjQyLCAic3RkZXYiOiAxNS44OTMyODQy
NzE1Mzc0OTYsICJhdmciOiA1My4xNDQ1MDUxNDk0Mzk3NTksICJ1bml0IjogIm1zIn19LCAiYnJh
bmNoIjogIndlYmtpdC10cnVuayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0
aW1lc3RhbXAiOiAxMzQ0MDEwOTY0LCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIiwgInJl
c3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWlu
IjogNDYuNTI2OTA4ODc0NTExNzE5LCAibWF4IjogNjEuODA5MDYyOTU3NzYzNjcyLCAibWVkaWFu
IjogNTAuNzMxMTgyMDk4Mzg4NjcyLCAic3RkZXYiOiAxNi4xMDk4MDE1ODM4NTU4ODcsICJhdmci
OiA1MS45NzMyNjc2MDU0MzAyMDIsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10
cnVuayIsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAx
MDk2NiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQv
c3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0OC4xMjAwMjE4MjAwNjgz
NTksICJtYXgiOiA2NS42MDYxMTcyNDg1MzUxNTYsICJtZWRpYW4iOiA1Ny40OTI5NzE0MjAyODgw
ODYsICJzdGRldiI6IDIxLjI1NTEyMjMyODE0NDA3NiwgImF2ZyI6IDU1LjczMjU4OTAxODk3MjI5
OCwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJl
dmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTA5NjgsICJjaHJvbWl1bS1y
ZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdm
aXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0OS41ODc5NjUwMTE1OTY2OCwgIm1heCI6IDY2Ljc3
ODg5ODIzOTEzNTc0MiwgIm1lZGlhbiI6IDUwLjU2OTA1NzQ2NDU5OTYwOSwgInN0ZGV2IjogMTgu
NjY1MTY3NTExMjUxODA2LCAiYXZnIjogNTIuMzgxMTM5MDUyNTQxNjQxLCAidW5pdCI6ICJtcyJ9
fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyJ9
LCB7InRpbWVzdGFtcCI6IDEzNDQwMTA5NzAsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIiwg
InJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsi
bWluIjogNDUuMTY4MTYxMzkyMjExOTE0LCAibWF4IjogNjEuNTgwODk2Mzc3NTYzNDc3LCAibWVk
aWFuIjogNTMuMDgyOTQyOTYyNjQ2NDg0LCAic3RkZXYiOiAyMC4yNjcyNjE3NzI3NTY4NjgsICJh
dmciOiA1Mi41ODg4MzkyNzk5Nzc4OTcsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtp
dC10cnVuayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAx
MzQ0MDEwOTcyLCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBh
Z2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDQuOTY1OTgy
NDM3MTMzNzg5LCAibWF4IjogNjAuMjM0MDY5ODI0MjE4NzUsICJtZWRpYW4iOiA1MC4wNjY5NDc5
MzcwMTE3MTksICJzdGRldiI6IDE2LjkwODUxMTgwMjYyMDM1NywgImF2ZyI6IDUxLjIxMzUyNzk4
MDYwMzY3MiwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgIndlYmtp
dC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDEwOTczLCAid2Via2l0
LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jh
d2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ2LjI1MzkxOTYwMTQ0MDQzLCAibWF4IjogNjAu
MDYwMDI0MjYxNDc0NjA5LCAibWVkaWFuIjogNTAuNTc4MTE3MzcwNjA1NDY5LCAic3RkZXYiOiAx
NC45MDI3Mzg3MDUzMDM4ODYsICJhdmciOiA1MS43NDAzMzI2NTM2NDc5NzUsICJ1bml0IjogIm1z
In19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2
MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDEwOTc1LCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0
NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2
ZyI6IHsibWluIjogNDYuMjYwMTE4NDg0NDk3MDcsICJtYXgiOiA2Mi40NzcxMTE4MTY0MDYyNSwg
Im1lZGlhbiI6IDUxLjUxNTEwMjM4NjQ3NDYwOSwgInN0ZGV2IjogMjEuMjkwNTIxMDYwNzM0MTQs
ICJhdmciOiA1My42NDI3NjIzMzQ3MjMyMTYsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndl
YmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjog
MTM0NDAxMDk3NywgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFn
ZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0Ny41NTk5NzY1
Nzc3NTg3ODksICJtYXgiOiA1OS45OTc3OTcwMTIzMjkxMDIsICJtZWRpYW4iOiA1MC43MTkwMjI3
NTA4NTQ0OTIsICJzdGRldiI6IDEzLjc2OTAxODI0ODg0OTU1MiwgImF2ZyI6IDUxLjI3NzAzNTE2
MTA2ODU2OCwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgImNocm9t
aXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTA5NzksICJjaHJv
bWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVz
L2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0Ny4xODY4NTE1MDE0NjQ4NDQsICJtYXgi
OiA2MC44MzYwNzY3MzY0NTAxOTUsICJtZWRpYW4iOiA1MC41NTk5OTc1NTg1OTM3NSwgInN0ZGV2
IjogMTUuNDMyNTk2NTgzNjI1Mjc2LCAiYXZnIjogNTIuMDAwNTg1MzU1MjU2NzMyLCAidW5pdCI6
ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9uIjogIjEy
NDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTA5ODAsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0
NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2
ZyI6IHsibWluIjogNDkuMTY1MDEwNDUyMjcwNTA4LCAibWF4IjogNjcuMTk4MDM4MTAxMTk2Mjg5
LCAibWVkaWFuIjogNTEuMTI4MTQ5MDMyNTkyNzczLCAic3RkZXYiOiAyMS4zOTQ5MzAyMDkxMjU4
NSwgImF2ZyI6IDUzLjU5ODQ0MTU3NTcwMjg2NCwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAi
d2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVzdGFt
cCI6IDEzNDQwMTA5ODIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6
IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0NS4w
OTk5NzM2Nzg1ODg4NjcsICJtYXgiOiA2MC45NTUwNDc2MDc0MjE4NzUsICJtZWRpYW4iOiA0OS41
NzY5OTc3NTY5NTgwMDgsICJzdGRldiI6IDE1LjE4MTc3MjEwMjgwMzU4MywgImF2ZyI6IDUwLjE1
ODQwMDI4NDYxNjU2MiwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwg
IndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDExMjMyLCAi
d2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmls
ZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ3LjM2Mzk5NjUwNTczNzMwNSwgIm1h
eCI6IDYzLjg0OTkyNTk5NDg3MzA0NywgIm1lZGlhbiI6IDUwLjU3NTk3MTYwMzM5MzU1NSwgInN0
ZGV2IjogMTguNzIxMjA3MjE3MjcyNDA4LCAiYXZnIjogNTIuMjk5OTYzODAwNTMwNjkxLCAidW5p
dCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAiY2hyb21pdW0tcmV2aXNpb24i
OiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMTIzNCwgImNocm9taXVtLXJldmlzaW9u
IjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dh
bnNvbi5zdmciOiB7Im1pbiI6IDQ3LjUxMzAwODExNzY3NTc4MSwgIm1heCI6IDYyLjI4MDg5MzMy
NTgwNTY2NCwgIm1lZGlhbiI6IDUwLjk2Njk3ODA3MzEyMDExNywgInN0ZGV2IjogMTguNDczMzE5
MzkwNTA2NzE3LCAiYXZnIjogNTIuOTk4OTU2ODgxMDcxNCwgInVuaXQiOiAibXMifX0sICJicmFu
Y2giOiAid2Via2l0LXRydW5rIiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1l
c3RhbXAiOiAxMzQ0MDExMjM1LCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRz
IjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ4
LjAwNTEwNDA2NDk0MTQwNiwgIm1heCI6IDYzLjc1MTkzNTk1ODg2MjMwNSwgIm1lZGlhbiI6IDUx
LjAyODAxMzIyOTM3MDExNywgInN0ZGV2IjogMTYuNjU3NTMwMTU5NjAxNzAyLCAiYXZnIjogNTIu
NzUxMzI3ODE1ODA4NzUsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIs
ICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDExMjM3
LCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2
Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDguNzUyMDY5NDczMjY2NjAy
LCAibWF4IjogNjIuODkxMDA2NDY5NzI2NTYyLCAibWVkaWFuIjogNTEuMzI3OTQzODAxODc5ODgz
LCAic3RkZXYiOiAxNy4yMTMzMTkxNzI0MTAwMTcsICJhdmciOiA1My4xNjYxMjU5NTAwNjAzOTgs
ICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNp
b24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMTIzOSwgIndlYmtpdC1yZXZpc2lv
biI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9n
YW5zb24uc3ZnIjogeyJtaW4iOiA0Ny42ODgwMDczNTQ3MzYzMjgsICJtYXgiOiA2MS43NTgwNDEz
ODE4MzU5MzgsICJtZWRpYW4iOiA1MC4yOTIwMTUwNzU2ODM1OTQsICJzdGRldiI6IDE0LjYwMjg0
ODgzMTkwMzY3MSwgImF2ZyI6IDUxLjQ2MzY2NjcxNTEyMDAxMywgInVuaXQiOiAibXMifX0sICJi
cmFuY2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7
InRpbWVzdGFtcCI6IDEzNDQwMTEyNDEsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAi
cmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJt
aW4iOiA0NC45NzE5NDI5MDE2MTEzMjgsICJtYXgiOiA2MS40Njc4ODU5NzEwNjkzMzYsICJtZWRp
YW4iOiA1MS43ODkwNDUzMzM4NjIzMDUsICJzdGRldiI6IDE4LjUwNDM4NjM3MjgzODQ2NCwgImF2
ZyI6IDUzLjM5MjQxMDI3ODMyMDMwNSwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0
LXRydW5rIiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0
MDExMjQyLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9h
ZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ3LjE4MDg5MTAzNjk4
NzMwNSwgIm1heCI6IDY4Ljk1MTEyOTkxMzMzMDA3OCwgIm1lZGlhbiI6IDUwLjcyOTAzNjMzMTE3
Njc1OCwgInN0ZGV2IjogMjEuNjEyNzQ1MzI5NDUzODg3LCAiYXZnIjogNTIuNTc1Mjk5NjE0MzU0
MTg2LCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAiY2hyb21pdW0t
cmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMTI0NCwgImNocm9taXVt
LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jh
d2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ1LjcyMTA1NDA3NzE0ODQzOCwgIm1heCI6IDY4
LjAyMzkyMDA1OTIwNDEwMiwgIm1lZGlhbiI6IDUwLjY3ODAxNDc1NTI0OTAyMywgInN0ZGV2Ijog
MjIuOTgxNzA0NzI3MjM0ODcsICJhdmciOiA1My41MDc5OTMwOTU3OTk0OTksICJ1bml0IjogIm1z
In19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAz
In0sIHsidGltZXN0YW1wIjogMTM0NDAxMTI0NiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMi
LCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjog
eyJtaW4iOiA0Ny41Nzc4NTc5NzExOTE0MDYsICJtYXgiOiA2MC40NjYwNTExMDE2ODQ1NywgIm1l
ZGlhbiI6IDUwLjczMjEzNTc3MjcwNTA3OCwgInN0ZGV2IjogMTQuOTU2NzIzMTE2NTIxMTI0LCAi
YXZnIjogNTEuOTMyMjM0NTEzMTMyMjAxLCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJr
aXQtdHJ1bmsiLCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjog
MTM0NDAxMTI0OCwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQ
YWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ2Ljc3ODkx
NzMxMjYyMjA3LCAibWF4IjogNjMuNDMyOTMxOTAwMDI0NDE0LCAibWVkaWFuIjogNTEuMDUyMDkz
NTA1ODU5Mzc1LCAic3RkZXYiOiAxOC43MTc5MDM5MTMyNDg4MzYsICJhdmciOiA1Mi40NTUzMjQ4
NzU2ODEwMTUsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3ZWJr
aXQtcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMTI0OSwgIndlYmtp
dC1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2Ny
YXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0OC45NDMwNDI3NTUxMjY5NTMsICJtYXgiOiA2
MC41NDY4NzUsICJtZWRpYW4iOiA1MC42MjY5OTMxNzkzMjEyODksICJzdGRldiI6IDE2LjE0Nzky
NDM0OTgzNDg1OSwgImF2ZyI6IDUyLjUwMjk3MDk0NjQ2MjUzMywgInVuaXQiOiAibXMifX0sICJi
cmFuY2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7
InRpbWVzdGFtcCI6IDEzNDQwMTEyNTEsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAi
cmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJt
aW4iOiA0Ni41MDQwMjA2OTA5MTc5NjksICJtYXgiOiA2MS4yNDE4NjUxNTgwODEwNTUsICJtZWRp
YW4iOiA1My4xMjEwODk5MzUzMDI3MzQsICJzdGRldiI6IDE4LjQ2NDczOTkxODI1NDc1NywgImF2
ZyI6IDU0LjYyODUxMDIyNDE5MTc3MSwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0
LXRydW5rIiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0
MDExMjUzLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9h
ZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ0Ljg0NjA1Nzg5MTg0
NTcwMywgIm1heCI6IDYyLjc3NTg1MDI5NjAyMDUwOCwgIm1lZGlhbiI6IDUyLjA4NDkyMjc5MDUy
NzM0NCwgInN0ZGV2IjogMjEuNjY1Njk3ODIwNTM3Mzc4LCAiYXZnIjogNTMuNTQ4MjYwNzM4OTc1
MTI0LCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAiY2hyb21pdW0t
cmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMTI1NSwgImNocm9taXVt
LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jh
d2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ2LjEwMTA5MzI5MjIzNjMyOCwgIm1heCI6IDY2
LjcwNDk4ODQ3OTYxNDI1OCwgIm1lZGlhbiI6IDUwLjk3NjAzNzk3OTEyNTk3NywgInN0ZGV2Ijog
MjMuMzc1MTAzODI3OTA5MTg2LCAiYXZnIjogNTIuNDM2ODAzNTE2NTg4NzExLCAidW5pdCI6ICJt
cyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYw
MyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTEyNTYsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAz
IiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6
IHsibWluIjogNDUuMTEwOTQwOTMzMjI3NTM5LCAibWF4IjogNjAuNTg0MDY4Mjk4MzM5ODQ0LCAi
bWVkaWFuIjogNTIuNzgxMTA1MDQxNTAzOTA2LCAic3RkZXYiOiAxOS4wODk5NTU2MjY1MzQxODgs
ICJhdmciOiA1Mi43OTM4NTQxNjEzMTI3MDEsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndl
YmtpdC10cnVuayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAi
OiAxMzQ0MDExMjU4LCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7
IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDUuNTk3
MDc2NDE2MDE1NjI1LCAibWF4IjogNjEuMDQ3MDc3MTc4OTU1MDc4LCAibWVkaWFuIjogNTAuMTQx
MDk2MTE1MTEyMzA1LCAic3RkZXYiOiAxNC40MTk1MjI0MTMxODg4MjIsICJhdmciOiA1MS40MTMx
NDcwNzMwNDMwMjEsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3
ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMTI2MCwgIndl
YmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVz
L2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0Ny41ODkwNjM2NDQ0MDkxOCwgIm1heCI6
IDY0LjcwODk0ODEzNTM3NTk3NywgIm1lZGlhbiI6IDUwLjEyNjc5MTAwMDM2NjIxMSwgInN0ZGV2
IjogMTguMTIyNDE4NzI4NjI1MTY3LCAiYXZnIjogNTEuOTU3NDgxNzg1ODI0NDIsICJ1bml0Ijog
Im1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIx
MjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDExMjYyLCAiY2hyb21pdW0tcmV2aXNpb24iOiAi
MTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29u
LnN2ZyI6IHsibWluIjogNDYuNTc5ODM3Nzk5MDcyMjY2LCAibWF4IjogNjYuOTE4MTM0Njg5MzMx
MDU1LCAibWVkaWFuIjogNTAuNzkwMDcxNDg3NDI2NzU4LCAic3RkZXYiOiAyMC44NDY5NjUwNDIz
NDEyNzEsICJhdmciOiA1MS45OTMzMzI0MTExMTM1MzUsICJ1bml0IjogIm1zIn19LCAiYnJhbmNo
IjogIndlYmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0
YW1wIjogMTM0NDAxMTI2MywgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6
IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0Ny45
MTQwMjgxNjc3MjQ2MDksICJtYXgiOiA1OS4yNTA4MzE2MDQwMDM5MDYsICJtZWRpYW4iOiA1MC4z
NDgwNDM0NDE3NzI0NjEsICJzdGRldiI6IDE1LjE4Njg2MTUzODQ0NzQzMSwgImF2ZyI6IDUyLjAw
MjE3ODk5NTIzMjgzMiwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwg
ImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTEyNjUs
ICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3Zn
L2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0NS42ODc5MTM4OTQ2NTMzMiwg
Im1heCI6IDYyLjIzNzAyNDMwNzI1MDk3NywgIm1lZGlhbiI6IDUyLjA4NjExNDg4MzQyMjg1Miwg
InN0ZGV2IjogMTcuOTUzOTc5NjIyMDcwMjU3LCAiYXZnIjogNTEuODg2MjE5NzI3MzY1NTk5LCAi
dW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9u
IjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTEyNjcsICJ3ZWJraXQtcmV2aXNpb24i
OiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fu
c29uLnN2ZyI6IHsibWluIjogNDUuNzU4MDA4OTU2OTA5MTgsICJtYXgiOiA2My4wNzI5MTk4NDU1
ODEwNTUsICJtZWRpYW4iOiA1MC45NTMxNDk3OTU1MzIyMjcsICJzdGRldiI6IDE1LjgzMzkxODEx
NTA1NjI4MywgImF2ZyI6IDUyLjA1MzExMjczMjczNjY4NiwgInVuaXQiOiAibXMifX0sICJicmFu
Y2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRp
bWVzdGFtcCI6IDEzNDQwMTEyNjksICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVz
dWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4i
OiA0Ni40MTEwMzc0NDUwNjgzNTksICJtYXgiOiA1OS43MzUwNTk3MzgxNTkxOCwgIm1lZGlhbiI6
IDUwLjYwNjAxMjM0NDM2MDM1MiwgInN0ZGV2IjogMTUuNDU3ODE2NTQ4Mjc1NDQ0LCAiYXZnIjog
NTIuMTc5MDEwMjkwODQ4NTg4LCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1
bmsiLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTEy
NzAsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2
Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDcuNDYyOTQwMjE2MDY0NDUz
LCAibWF4IjogNjEuMjc0MDUxNjY2MjU5NzY2LCAibWVkaWFuIjogNTEuODgyMDI4NTc5NzExOTE0
LCAic3RkZXYiOiAxNS43MDEzODI1Mjc1NTM3NDUsICJhdmciOiA1Mi40NTA2OTQ1MzU5MDc5NDIs
ICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJjaHJvbWl1bS1yZXZp
c2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDExMjcyLCAiY2hyb21pdW0tcmV2
aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3Zmlz
aDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDUuODM5MDcxMjczODAzNzExLCAibWF4IjogNjcuNTA3
MDI4NTc5NzExOTE0LCAibWVkaWFuIjogNTMuMDQ1OTg4MDgyODg1NzQyLCAic3RkZXYiOiAyMy4y
MTgxNzQ4NDg1NzkyMjQsICJhdmciOiA1My42MzIxMDg3ODg3NDEyNTYsICJ1bml0IjogIm1zIn19
LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIn0s
IHsidGltZXN0YW1wIjogMTM0NDAxMTI3NCwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAi
cmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJt
aW4iOiA0Ni42NTg5OTI3NjczMzM5ODQsICJtYXgiOiA2OC41MDY5NTYxMDA0NjM4NjcsICJtZWRp
YW4iOiA1Mi4zNDM4NDUzNjc0MzE2NDEsICJzdGRldiI6IDIyLjM5MjYyNzk0OTU2ODY4OCwgImF2
ZyI6IDUzLjYwOTY4NDg5Mzk1OTQ1NCwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0
LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEz
NDQwMTEyNzYsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFn
ZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0Ny45MTkwMzQ5
NTc4ODU3NDIsICJtYXgiOiA2NC4zOTQ5NTA4NjY2OTkyMTksICJtZWRpYW4iOiA1MS4xNjUxMDM5
MTIzNTM1MTYsICJzdGRldiI6IDE4LjI4MTUwODIzNDA4ODA3OSwgImF2ZyI6IDUyLjUyMzE3Mzc4
Mzk1NDgyNSwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgIndlYmtp
dC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDExMjc3LCAid2Via2l0
LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jh
d2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ3LjU1NzExNTU1NDgwOTU3LCAibWF4IjogNzUu
NzkzOTgxNTUyMTI0MDIzLCAibWVkaWFuIjogNTAuMzY5MDI0Mjc2NzMzMzk4LCAic3RkZXYiOiAy
Ni4xNTgwMzk0ODUwNTI5ODEsICJhdmciOiA1Mi44OTg3MjA2OTEwNzg1OTQsICJ1bml0IjogIm1z
In19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2
MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDExMjc5LCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0
NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2
ZyI6IHsibWluIjogNDUuNjAxMTI5NTMxODYwMzUyLCAibWF4IjogNjMuMTk0OTkwMTU4MDgxMDU1
LCAibWVkaWFuIjogNTAuNDkxMDk0NTg5MjMzMzk4LCAic3RkZXYiOiAxOS42MTk2OTQ5NDI0MDIz
ODYsICJhdmciOiA1MS43NzA1ODY3MTY1MDEzNDIsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjog
IndlYmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1w
IjogMTM0NDAxMTI4MSwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsi
UGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4iOiA0OC4wNjIw
ODYxMDUzNDY2OCwgIm1heCI6IDYwLjY3MTA5MTA3OTcxMTkxNCwgIm1lZGlhbiI6IDUwLjMwNzAz
NTQ0NjE2Njk5MiwgInN0ZGV2IjogMTUuMTI2NDgzODcxMDkxNzY0LCAiYXZnIjogNTEuODc0OTEz
NjY3Mzc3Njc2LCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAiY2hy
b21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMTI4MywgImNo
cm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmls
ZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ2LjkzOTg0OTg1MzUxNTYyNSwgIm1h
eCI6IDU5LjAyMzE0MTg2MDk2MTkxNCwgIm1lZGlhbiI6IDUwLjE5NDAyNTAzOTY3Mjg1MiwgInN0
ZGV2IjogMTQuNTEyNDM4OTI0OTk2MDcyLCAiYXZnIjogNTAuNzgwODYxMDAxMjY1NjYzLCAidW5p
dCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9uIjog
IjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTEyODQsICJ3ZWJraXQtcmV2aXNpb24iOiAi
MTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29u
LnN2ZyI6IHsibWluIjogNDUuNTE2OTY3NzczNDM3NSwgIm1heCI6IDYyLjI5OTk2NjgxMjEzMzc4
OSwgIm1lZGlhbiI6IDUxLjE4MzkzODk4MDEwMjUzOSwgInN0ZGV2IjogMjAuMjg1NjAyMjMzMTA1
MTEzLCAiYXZnIjogNTIuNTUyMTczMDEyMTgxMzI4LCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6
ICJ3ZWJraXQtdHJ1bmsiLCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIn0sIHsidGltZXN0
YW1wIjogMTM0NDAxMTI4NiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRz
IjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ0
LjQyODgyNTM3ODQxNzk2OSwgIm1heCI6IDYyLjg3MzEyNTA3NjI5Mzk0NSwgIm1lZGlhbiI6IDUw
LjgxNzk2NjQ2MTE4MTY0MSwgInN0ZGV2IjogMjAuNTcyMDc1NzM0MjQ5ODA0LCAiYXZnIjogNTIu
NDU3NTk2MTI2MzU1NjE4LCAidW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsi
LCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTEyODgs
ICJ3ZWJraXQtcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2FkL3N2Zy9m
aWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDYuNzc3OTYzNjM4MzA1NjY0LCAi
bWF4IjogNjEuNTMwMTEzMjIwMjE0ODQ0LCAibWVkaWFuIjogNTAuOTQ2OTUwOTEyNDc1NTg2LCAi
c3RkZXYiOiAxOC42MzI0OTUwMTQxMzAwMjYsICJhdmciOiA1My4wNjU1Mzg0MDYzNzIwNywgInVu
aXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9u
IjogIjEyNDYwMyJ9LCB7InRpbWVzdGFtcCI6IDEzNDQwMTEyOTAsICJjaHJvbWl1bS1yZXZpc2lv
biI6ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9n
YW5zb24uc3ZnIjogeyJtaW4iOiA0Ny4wOTYwMTQwMjI4MjcxNDgsICJtYXgiOiA2Mi4xMTU5MDc2
NjkwNjczODMsICJtZWRpYW4iOiA1My45MTAwMTcwMTM1NDk4MDUsICJzdGRldiI6IDE4Ljc1MzQy
NTIzNjAyMjk3NywgImF2ZyI6IDU0LjY2NTkyOTM5Mjc2NDQyNiwgInVuaXQiOiAibXMifX0sICJi
cmFuY2giOiAid2Via2l0LXRydW5rIiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0
aW1lc3RhbXAiOiAxMzQ0MDExMjkyLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1
bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6
IDQ3LjM0Nzc4NDA0MjM1ODM5OCwgIm1heCI6IDY1LjIyMjAyNDkxNzYwMjUzOSwgIm1lZGlhbiI6
IDUxLjYwOTAzOTMwNjY0MDYyNSwgInN0ZGV2IjogMjIuMTc5MDA3NTk0OTA5NzIsICJhdmciOiA1
My44MTU5NjcxNTgyNjczNzcsICJ1bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVu
ayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDEx
MjkzLCAiY2hyb21pdW0tcmV2aXNpb24iOiAiMTI0NjAzIiwgInJlc3VsdHMiOiB7IlBhZ2VMb2Fk
L3N2Zy9maWxlcy9jcmF3ZmlzaDJfZ2Fuc29uLnN2ZyI6IHsibWluIjogNDguNTgzOTg0Mzc1LCAi
bWF4IjogNjIuMjI2MDU3MDUyNjEyMzA1LCAibWVkaWFuIjogNTAuOTY2OTc4MDczMTIwMTE3LCAi
c3RkZXYiOiAxNy4zOTYyODA0NDc5ODY4MTgsICJhdmciOiA1Mi43NTIzNDQyMzE4NTY0OTcsICJ1
bml0IjogIm1zIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNpb24i
OiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMTI5NSwgIndlYmtpdC1yZXZpc2lvbiI6
ICIxMjQ2MDMiLCAicmVzdWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5z
b24uc3ZnIjogeyJtaW4iOiA0OC43ODA5MTgxMjEzMzc4OTEsICJtYXgiOiA2OC4zNTUwODM0NjU1
NzYxNzIsICJtZWRpYW4iOiA1Mi40MDcwMjYyOTA4OTM1NTUsICJzdGRldiI6IDIwLjMwOTc5Njgx
MDgxOTI1NCwgImF2ZyI6IDUzLjcyODQ0MjQ0MzA0NDU1NywgInVuaXQiOiAibXMifX0sICJicmFu
Y2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjEyNDYwMyJ9LCB7InRp
bWVzdGFtcCI6IDEzNDQwMTEyOTcsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxMjQ2MDMiLCAicmVz
dWx0cyI6IHsiUGFnZUxvYWQvc3ZnL2ZpbGVzL2NyYXdmaXNoMl9nYW5zb24uc3ZnIjogeyJtaW4i
OiA0Ny43MTA4OTU1MzgzMzAwNzgsICJtYXgiOiA2OC4yOTE5MDI1NDIxMTQyNTgsICJtZWRpYW4i
OiA1MC4zMTYwOTUzNTIxNzI4NTIsICJzdGRldiI6IDIyLjkwNjU5MjU3MzA3NjcxMSwgImF2ZyI6
IDUyLjQ4MTk2NTAxNDgwOTA1NiwgInVuaXQiOiAibXMifX0sICJicmFuY2giOiAid2Via2l0LXRy
dW5rIiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ2MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDEx
Mjk5LCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9z
dmcvZmlsZXMvY3Jhd2Zpc2gyX2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ0LjkwNjEzOTM3Mzc3OTI5
NywgIm1heCI6IDYxLjY3MTk3MjI3NDc4MDI3MywgIm1lZGlhbiI6IDUyLjA5NDkzNjM3MDg0OTYw
OSwgInN0ZGV2IjogMTkuNjQyNDk5NjA5MTMxNzQsICJhdmciOiA1Mi40NzM1ODI3MTk1MDE3LCAi
dW5pdCI6ICJtcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAiY2hyb21pdW0tcmV2aXNp
b24iOiAiMTI0NjAzIn0sIHsidGltZXN0YW1wIjogMTM0NDAxMTMwMCwgImNocm9taXVtLXJldmlz
aW9uIjogIjEyNDYwMyIsICJyZXN1bHRzIjogeyJQYWdlTG9hZC9zdmcvZmlsZXMvY3Jhd2Zpc2gy
X2dhbnNvbi5zdmciOiB7Im1pbiI6IDQ0LjMyNzAyMDY0NTE0MTYwMiwgIm1heCI6IDY5LjAzNTc2
ODUwODkxMTEzMywgIm1lZGlhbiI6IDUwLjc5Njk4NTYyNjIyMDcwMywgInN0ZGV2IjogMjUuMTc1
Nzc0OTM3MzcxNTI1LCAiYXZnIjogNTEuOTgyMjAyMDI3OTczMzcyLCAidW5pdCI6ICJtcyJ9fSwg
ImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDYwMyJ9XTwv
c2NyaXB0Pgo8c2NyaXB0IHRpdGxlPSJqcXVlcnkuZmxvdC5taW4uanMiPgovKiBKYXZhc2NyaXB0
IHBsb3R0aW5nIGxpYnJhcnkgZm9yIGpRdWVyeSwgdi4gMC43LgogKgogKiBSZWxlYXNlZCB1bmRl
ciB0aGUgTUlUIGxpY2Vuc2UgYnkgSU9MQSwgRGVjZW1iZXIgMjAwNy4KICoKICovCihmdW5jdGlv
bihiKXtiLmNvbG9yPXt9O2IuY29sb3IubWFrZT1mdW5jdGlvbihkLGUsZyxmKXt2YXIgYz17fTtj
LnI9ZHx8MDtjLmc9ZXx8MDtjLmI9Z3x8MDtjLmE9ZiE9bnVsbD9mOjE7Yy5hZGQ9ZnVuY3Rpb24o
aCxqKXtmb3IodmFyIGs9MDtrPGgubGVuZ3RoOysrayl7Y1toLmNoYXJBdChrKV0rPWp9cmV0dXJu
IGMubm9ybWFsaXplKCl9O2Muc2NhbGU9ZnVuY3Rpb24oaCxqKXtmb3IodmFyIGs9MDtrPGgubGVu
Z3RoOysrayl7Y1toLmNoYXJBdChrKV0qPWp9cmV0dXJuIGMubm9ybWFsaXplKCl9O2MudG9TdHJp
bmc9ZnVuY3Rpb24oKXtpZihjLmE+PTEpe3JldHVybiJyZ2IoIitbYy5yLGMuZyxjLmJdLmpvaW4o
IiwiKSsiKSJ9ZWxzZXtyZXR1cm4icmdiYSgiK1tjLnIsYy5nLGMuYixjLmFdLmpvaW4oIiwiKSsi
KSJ9fTtjLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoayxqLGwpe3JldHVybiBqPGs/
azooaj5sP2w6ail9Yy5yPWgoMCxwYXJzZUludChjLnIpLDI1NSk7Yy5nPWgoMCxwYXJzZUludChj
LmcpLDI1NSk7Yy5iPWgoMCxwYXJzZUludChjLmIpLDI1NSk7Yy5hPWgoMCxjLmEsMSk7cmV0dXJu
IGN9O2MuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gYi5jb2xvci5tYWtlKGMucixjLmIsYy5nLGMu
YSl9O3JldHVybiBjLm5vcm1hbGl6ZSgpfTtiLmNvbG9yLmV4dHJhY3Q9ZnVuY3Rpb24oZCxlKXt2
YXIgYztkb3tjPWQuY3NzKGUpLnRvTG93ZXJDYXNlKCk7aWYoYyE9IiImJmMhPSJ0cmFuc3BhcmVu
dCIpe2JyZWFrfWQ9ZC5wYXJlbnQoKX13aGlsZSghYi5ub2RlTmFtZShkLmdldCgwKSwiYm9keSIp
KTtpZihjPT0icmdiYSgwLCAwLCAwLCAwKSIpe2M9InRyYW5zcGFyZW50In1yZXR1cm4gYi5jb2xv
ci5wYXJzZShjKX07Yi5jb2xvci5wYXJzZT1mdW5jdGlvbihjKXt2YXIgZCxmPWIuY29sb3IubWFr
ZTtpZihkPS9yZ2JcKFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMqKFsw
LTldezEsM30pXHMqXCkvLmV4ZWMoYykpe3JldHVybiBmKHBhcnNlSW50KGRbMV0sMTApLHBhcnNl
SW50KGRbMl0sMTApLHBhcnNlSW50KGRbM10sMTApKX1pZihkPS9yZ2JhXChccyooWzAtOV17MSwz
fSlccyosXHMqKFswLTldezEsM30pXHMqLFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV0rKD86
XC5bMC05XSspPylccypcKS8uZXhlYyhjKSl7cmV0dXJuIGYocGFyc2VJbnQoZFsxXSwxMCkscGFy
c2VJbnQoZFsyXSwxMCkscGFyc2VJbnQoZFszXSwxMCkscGFyc2VGbG9hdChkWzRdKSl9aWYoZD0v
cmdiXChccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSsp
PylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKlwpLy5leGVjKGMpKXtyZXR1cm4g
ZihwYXJzZUZsb2F0KGRbMV0pKjIuNTUscGFyc2VGbG9hdChkWzJdKSoyLjU1LHBhcnNlRmxvYXQo
ZFszXSkqMi41NSl9aWYoZD0vcmdiYVwoXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMq
KFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyos
XHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXHMqXCkvLmV4ZWMoYykpe3JldHVybiBmKHBhcnNlRmxv
YXQoZFsxXSkqMi41NSxwYXJzZUZsb2F0KGRbMl0pKjIuNTUscGFyc2VGbG9hdChkWzNdKSoyLjU1
LHBhcnNlRmxvYXQoZFs0XSkpfWlmKGQ9LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9
KShbYS1mQS1GMC05XXsyfSkvLmV4ZWMoYykpe3JldHVybiBmKHBhcnNlSW50KGRbMV0sMTYpLHBh
cnNlSW50KGRbMl0sMTYpLHBhcnNlSW50KGRbM10sMTYpKX1pZihkPS8jKFthLWZBLUYwLTldKShb
YS1mQS1GMC05XSkoW2EtZkEtRjAtOV0pLy5leGVjKGMpKXtyZXR1cm4gZihwYXJzZUludChkWzFd
K2RbMV0sMTYpLHBhcnNlSW50KGRbMl0rZFsyXSwxNikscGFyc2VJbnQoZFszXStkWzNdLDE2KSl9
dmFyIGU9Yi50cmltKGMpLnRvTG93ZXJDYXNlKCk7aWYoZT09InRyYW5zcGFyZW50Iil7cmV0dXJu
IGYoMjU1LDI1NSwyNTUsMCl9ZWxzZXtkPWFbZV18fFswLDAsMF07cmV0dXJuIGYoZFswXSxkWzFd
LGRbMl0pfX07dmFyIGE9e2FxdWE6WzAsMjU1LDI1NV0sYXp1cmU6WzI0MCwyNTUsMjU1XSxiZWln
ZTpbMjQ1LDI0NSwyMjBdLGJsYWNrOlswLDAsMF0sYmx1ZTpbMCwwLDI1NV0sYnJvd246WzE2NSw0
Miw0Ml0sY3lhbjpbMCwyNTUsMjU1XSxkYXJrYmx1ZTpbMCwwLDEzOV0sZGFya2N5YW46WzAsMTM5
LDEzOV0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJrZ3JlZW46WzAsMTAwLDBdLGRhcmtraGFr
aTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4
NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0s
ZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmt2aW9sZXQ6WzE0
OCwwLDIxMV0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnb2xkOlsyNTUsMjE1LDBdLGdyZWVuOlswLDEy
OCwwXSxpbmRpZ286Wzc1LDAsMTMwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxpZ2h0Ymx1ZTpbMTcz
LDIxNiwyMzBdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0
XSxsaWdodGdyZXk6WzIxMSwyMTEsMjExXSxsaWdodHBpbms6WzI1NSwxODIsMTkzXSxsaWdodHll
bGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFy
b29uOlsxMjgsMCwwXSxuYXZ5OlswLDAsMTI4XSxvbGl2ZTpbMTI4LDEyOCwwXSxvcmFuZ2U6WzI1
NSwxNjUsMF0scGluazpbMjU1LDE5MiwyMDNdLHB1cnBsZTpbMTI4LDAsMTI4XSx2aW9sZXQ6WzEy
OCwwLDEyOF0scmVkOlsyNTUsMCwwXSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSx3aGl0ZTpbMjU1LDI1
NSwyNTVdLHllbGxvdzpbMjU1LDI1NSwwXX19KShqUXVlcnkpOyhmdW5jdGlvbihjKXtmdW5jdGlv
biBiKGF2LGFpLEosYWYpe3ZhciBRPVtdLE89e2NvbG9yczpbIiNlZGMyNDAiLCIjYWZkOGY4Iiwi
I2NiNGI0YiIsIiM0ZGE3NGQiLCIjOTQ0MGVkIl0sbGVnZW5kOntzaG93OnRydWUsbm9Db2x1bW5z
OjEsbGFiZWxGb3JtYXR0ZXI6bnVsbCxsYWJlbEJveEJvcmRlckNvbG9yOiIjY2NjIixjb250YWlu
ZXI6bnVsbCxwb3NpdGlvbjoibmUiLG1hcmdpbjo1LGJhY2tncm91bmRDb2xvcjpudWxsLGJhY2tn
cm91bmRPcGFjaXR5OjAuODV9LHhheGlzOntzaG93Om51bGwscG9zaXRpb246ImJvdHRvbSIsbW9k
ZTpudWxsLGNvbG9yOm51bGwsdGlja0NvbG9yOm51bGwsdHJhbnNmb3JtOm51bGwsaW52ZXJzZVRy
YW5zZm9ybTpudWxsLG1pbjpudWxsLG1heDpudWxsLGF1dG9zY2FsZU1hcmdpbjpudWxsLHRpY2tz
Om51bGwsdGlja0Zvcm1hdHRlcjpudWxsLGxhYmVsV2lkdGg6bnVsbCxsYWJlbEhlaWdodDpudWxs
LHJlc2VydmVTcGFjZTpudWxsLHRpY2tMZW5ndGg6bnVsbCxhbGlnblRpY2tzV2l0aEF4aXM6bnVs
bCx0aWNrRGVjaW1hbHM6bnVsbCx0aWNrU2l6ZTpudWxsLG1pblRpY2tTaXplOm51bGwsbW9udGhO
YW1lczpudWxsLHRpbWVmb3JtYXQ6bnVsbCx0d2VsdmVIb3VyQ2xvY2s6ZmFsc2V9LHlheGlzOnth
dXRvc2NhbGVNYXJnaW46MC4wMixwb3NpdGlvbjoibGVmdCJ9LHhheGVzOltdLHlheGVzOltdLHNl
cmllczp7cG9pbnRzOntzaG93OmZhbHNlLHJhZGl1czozLGxpbmVXaWR0aDoyLGZpbGw6dHJ1ZSxm
aWxsQ29sb3I6IiNmZmZmZmYiLHN5bWJvbDoiY2lyY2xlIn0sbGluZXM6e2xpbmVXaWR0aDoyLGZp
bGw6ZmFsc2UsZmlsbENvbG9yOm51bGwsc3RlcHM6ZmFsc2V9LGJhcnM6e3Nob3c6ZmFsc2UsbGlu
ZVdpZHRoOjIsYmFyV2lkdGg6MSxmaWxsOnRydWUsZmlsbENvbG9yOm51bGwsYWxpZ246ImxlZnQi
LGhvcml6b250YWw6ZmFsc2V9LHNoYWRvd1NpemU6M30sZ3JpZDp7c2hvdzp0cnVlLGFib3ZlRGF0
YTpmYWxzZSxjb2xvcjoiIzU0NTQ1NCIsYmFja2dyb3VuZENvbG9yOm51bGwsYm9yZGVyQ29sb3I6
bnVsbCx0aWNrQ29sb3I6bnVsbCxsYWJlbE1hcmdpbjo1LGF4aXNNYXJnaW46OCxib3JkZXJXaWR0
aDoyLG1pbkJvcmRlck1hcmdpbjpudWxsLG1hcmtpbmdzOm51bGwsbWFya2luZ3NDb2xvcjoiI2Y0
ZjRmNCIsbWFya2luZ3NMaW5lV2lkdGg6MixjbGlja2FibGU6ZmFsc2UsaG92ZXJhYmxlOmZhbHNl
LGF1dG9IaWdobGlnaHQ6dHJ1ZSxtb3VzZUFjdGl2ZVJhZGl1czoxMH0saG9va3M6e319LGF6PW51
bGwsYWQ9bnVsbCx5PW51bGwsSD1udWxsLEE9bnVsbCxwPVtdLGF3PVtdLHE9e2xlZnQ6MCxyaWdo
dDowLHRvcDowLGJvdHRvbTowfSxHPTAsST0wLGg9MCx3PTAsYWs9e3Byb2Nlc3NPcHRpb25zOltd
LHByb2Nlc3NSYXdEYXRhOltdLHByb2Nlc3NEYXRhcG9pbnRzOltdLGRyYXdTZXJpZXM6W10sZHJh
dzpbXSxiaW5kRXZlbnRzOltdLGRyYXdPdmVybGF5OltdLHNodXRkb3duOltdfSxhcT10aGlzO2Fx
LnNldERhdGE9YWo7YXEuc2V0dXBHcmlkPXQ7YXEuZHJhdz1XO2FxLmdldFBsYWNlaG9sZGVyPWZ1
bmN0aW9uKCl7cmV0dXJuIGF2fTthcS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4gYXp9O2Fx
LmdldFBsb3RPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gcX07YXEud2lkdGg9ZnVuY3Rpb24oKXty
ZXR1cm4gaH07YXEuaGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHd9O2FxLm9mZnNldD1mdW5jdGlv
bigpe3ZhciBhQj15Lm9mZnNldCgpO2FCLmxlZnQrPXEubGVmdDthQi50b3ArPXEudG9wO3JldHVy
biBhQn07YXEuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBRfTthcS5nZXRBeGVzPWZ1bmN0aW9u
KCl7dmFyIGFDPXt9LGFCO2MuZWFjaChwLmNvbmNhdChhdyksZnVuY3Rpb24oYUQsYUUpe2lmKGFF
KXthQ1thRS5kaXJlY3Rpb24rKGFFLm4hPTE/YUUubjoiIikrImF4aXMiXT1hRX19KTtyZXR1cm4g
YUN9O2FxLmdldFhBeGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHB9O2FxLmdldFlBeGVzPWZ1bmN0aW9u
KCl7cmV0dXJuIGF3fTthcS5jMnA9QzthcS5wMmM9YXI7YXEuZ2V0T3B0aW9ucz1mdW5jdGlvbigp
e3JldHVybiBPfTthcS5oaWdobGlnaHQ9eDthcS51bmhpZ2hsaWdodD1UO2FxLnRyaWdnZXJSZWRy
YXdPdmVybGF5PWY7YXEucG9pbnRPZmZzZXQ9ZnVuY3Rpb24oYUIpe3JldHVybntsZWZ0OnBhcnNl
SW50KHBbYUEoYUIsIngiKS0xXS5wMmMoK2FCLngpK3EubGVmdCksdG9wOnBhcnNlSW50KGF3W2FB
KGFCLCJ5IiktMV0ucDJjKCthQi55KStxLnRvcCl9fTthcS5zaHV0ZG93bj1hZzthcS5yZXNpemU9
ZnVuY3Rpb24oKXtCKCk7Zyhheik7ZyhhZCl9O2FxLmhvb2tzPWFrO0YoYXEpO1ooSik7WCgpO2Fq
KGFpKTt0KCk7VygpO2FoKCk7ZnVuY3Rpb24gYW4oYUQsYUIpe2FCPVthcV0uY29uY2F0KGFCKTtm
b3IodmFyIGFDPTA7YUM8YUQubGVuZ3RoOysrYUMpe2FEW2FDXS5hcHBseSh0aGlzLGFCKX19ZnVu
Y3Rpb24gRigpe2Zvcih2YXIgYUI9MDthQjxhZi5sZW5ndGg7KythQil7dmFyIGFDPWFmW2FCXTth
Qy5pbml0KGFxKTtpZihhQy5vcHRpb25zKXtjLmV4dGVuZCh0cnVlLE8sYUMub3B0aW9ucyl9fX1m
dW5jdGlvbiBaKGFDKXt2YXIgYUI7Yy5leHRlbmQodHJ1ZSxPLGFDKTtpZihPLnhheGlzLmNvbG9y
PT1udWxsKXtPLnhheGlzLmNvbG9yPU8uZ3JpZC5jb2xvcn1pZihPLnlheGlzLmNvbG9yPT1udWxs
KXtPLnlheGlzLmNvbG9yPU8uZ3JpZC5jb2xvcn1pZihPLnhheGlzLnRpY2tDb2xvcj09bnVsbCl7
Ty54YXhpcy50aWNrQ29sb3I9Ty5ncmlkLnRpY2tDb2xvcn1pZihPLnlheGlzLnRpY2tDb2xvcj09
bnVsbCl7Ty55YXhpcy50aWNrQ29sb3I9Ty5ncmlkLnRpY2tDb2xvcn1pZihPLmdyaWQuYm9yZGVy
Q29sb3I9PW51bGwpe08uZ3JpZC5ib3JkZXJDb2xvcj1PLmdyaWQuY29sb3J9aWYoTy5ncmlkLnRp
Y2tDb2xvcj09bnVsbCl7Ty5ncmlkLnRpY2tDb2xvcj1jLmNvbG9yLnBhcnNlKE8uZ3JpZC5jb2xv
cikuc2NhbGUoImEiLDAuMjIpLnRvU3RyaW5nKCl9Zm9yKGFCPTA7YUI8TWF0aC5tYXgoMSxPLnhh
eGVzLmxlbmd0aCk7KythQil7Ty54YXhlc1thQl09Yy5leHRlbmQodHJ1ZSx7fSxPLnhheGlzLE8u
eGF4ZXNbYUJdKX1mb3IoYUI9MDthQjxNYXRoLm1heCgxLE8ueWF4ZXMubGVuZ3RoKTsrK2FCKXtP
LnlheGVzW2FCXT1jLmV4dGVuZCh0cnVlLHt9LE8ueWF4aXMsTy55YXhlc1thQl0pfWlmKE8ueGF4
aXMubm9UaWNrcyYmTy54YXhpcy50aWNrcz09bnVsbCl7Ty54YXhpcy50aWNrcz1PLnhheGlzLm5v
VGlja3N9aWYoTy55YXhpcy5ub1RpY2tzJiZPLnlheGlzLnRpY2tzPT1udWxsKXtPLnlheGlzLnRp
Y2tzPU8ueWF4aXMubm9UaWNrc31pZihPLngyYXhpcyl7Ty54YXhlc1sxXT1jLmV4dGVuZCh0cnVl
LHt9LE8ueGF4aXMsTy54MmF4aXMpO08ueGF4ZXNbMV0ucG9zaXRpb249InRvcCJ9aWYoTy55MmF4
aXMpe08ueWF4ZXNbMV09Yy5leHRlbmQodHJ1ZSx7fSxPLnlheGlzLE8ueTJheGlzKTtPLnlheGVz
WzFdLnBvc2l0aW9uPSJyaWdodCJ9aWYoTy5ncmlkLmNvbG9yZWRBcmVhcyl7Ty5ncmlkLm1hcmtp
bmdzPU8uZ3JpZC5jb2xvcmVkQXJlYXN9aWYoTy5ncmlkLmNvbG9yZWRBcmVhc0NvbG9yKXtPLmdy
aWQubWFya2luZ3NDb2xvcj1PLmdyaWQuY29sb3JlZEFyZWFzQ29sb3J9aWYoTy5saW5lcyl7Yy5l
eHRlbmQodHJ1ZSxPLnNlcmllcy5saW5lcyxPLmxpbmVzKX1pZihPLnBvaW50cyl7Yy5leHRlbmQo
dHJ1ZSxPLnNlcmllcy5wb2ludHMsTy5wb2ludHMpfWlmKE8uYmFycyl7Yy5leHRlbmQodHJ1ZSxP
LnNlcmllcy5iYXJzLE8uYmFycyl9aWYoTy5zaGFkb3dTaXplIT1udWxsKXtPLnNlcmllcy5zaGFk
b3dTaXplPU8uc2hhZG93U2l6ZX1mb3IoYUI9MDthQjxPLnhheGVzLmxlbmd0aDsrK2FCKXtWKHAs
YUIrMSkub3B0aW9ucz1PLnhheGVzW2FCXX1mb3IoYUI9MDthQjxPLnlheGVzLmxlbmd0aDsrK2FC
KXtWKGF3LGFCKzEpLm9wdGlvbnM9Ty55YXhlc1thQl19Zm9yKHZhciBhRCBpbiBhayl7aWYoTy5o
b29rc1thRF0mJk8uaG9va3NbYURdLmxlbmd0aCl7YWtbYURdPWFrW2FEXS5jb25jYXQoTy5ob29r
c1thRF0pfX1hbihhay5wcm9jZXNzT3B0aW9ucyxbT10pfWZ1bmN0aW9uIGFqKGFCKXtRPVkoYUIp
O2F4KCk7eigpfWZ1bmN0aW9uIFkoYUUpe3ZhciBhQz1bXTtmb3IodmFyIGFCPTA7YUI8YUUubGVu
Z3RoOysrYUIpe3ZhciBhRD1jLmV4dGVuZCh0cnVlLHt9LE8uc2VyaWVzKTtpZihhRVthQl0uZGF0
YSE9bnVsbCl7YUQuZGF0YT1hRVthQl0uZGF0YTtkZWxldGUgYUVbYUJdLmRhdGE7Yy5leHRlbmQo
dHJ1ZSxhRCxhRVthQl0pO2FFW2FCXS5kYXRhPWFELmRhdGF9ZWxzZXthRC5kYXRhPWFFW2FCXX1h
Qy5wdXNoKGFEKX1yZXR1cm4gYUN9ZnVuY3Rpb24gYUEoYUMsYUQpe3ZhciBhQj1hQ1thRCsiYXhp
cyJdO2lmKHR5cGVvZiBhQj09Im9iamVjdCIpe2FCPWFCLm59aWYodHlwZW9mIGFCIT0ibnVtYmVy
Iil7YUI9MX1yZXR1cm4gYUJ9ZnVuY3Rpb24gbSgpe3JldHVybiBjLmdyZXAocC5jb25jYXQoYXcp
LGZ1bmN0aW9uKGFCKXtyZXR1cm4gYUJ9KX1mdW5jdGlvbiBDKGFFKXt2YXIgYUM9e30sYUIsYUQ7
Zm9yKGFCPTA7YUI8cC5sZW5ndGg7KythQil7YUQ9cFthQl07aWYoYUQmJmFELnVzZWQpe2FDWyJ4
IithRC5uXT1hRC5jMnAoYUUubGVmdCl9fWZvcihhQj0wO2FCPGF3Lmxlbmd0aDsrK2FCKXthRD1h
d1thQl07aWYoYUQmJmFELnVzZWQpe2FDWyJ5IithRC5uXT1hRC5jMnAoYUUudG9wKX19aWYoYUMu
eDEhPT11bmRlZmluZWQpe2FDLng9YUMueDF9aWYoYUMueTEhPT11bmRlZmluZWQpe2FDLnk9YUMu
eTF9cmV0dXJuIGFDfWZ1bmN0aW9uIGFyKGFGKXt2YXIgYUQ9e30sYUMsYUUsYUI7Zm9yKGFDPTA7
YUM8cC5sZW5ndGg7KythQyl7YUU9cFthQ107aWYoYUUmJmFFLnVzZWQpe2FCPSJ4IithRS5uO2lm
KGFGW2FCXT09bnVsbCYmYUUubj09MSl7YUI9IngifWlmKGFGW2FCXSE9bnVsbCl7YUQubGVmdD1h
RS5wMmMoYUZbYUJdKTticmVha319fWZvcihhQz0wO2FDPGF3Lmxlbmd0aDsrK2FDKXthRT1hd1th
Q107aWYoYUUmJmFFLnVzZWQpe2FCPSJ5IithRS5uO2lmKGFGW2FCXT09bnVsbCYmYUUubj09MSl7
YUI9InkifWlmKGFGW2FCXSE9bnVsbCl7YUQudG9wPWFFLnAyYyhhRlthQl0pO2JyZWFrfX19cmV0
dXJuIGFEfWZ1bmN0aW9uIFYoYUMsYUIpe2lmKCFhQ1thQi0xXSl7YUNbYUItMV09e246YUIsZGly
ZWN0aW9uOmFDPT1wPyJ4IjoieSIsb3B0aW9uczpjLmV4dGVuZCh0cnVlLHt9LGFDPT1wP08ueGF4
aXM6Ty55YXhpcyl9fXJldHVybiBhQ1thQi0xXX1mdW5jdGlvbiBheCgpe3ZhciBhRzt2YXIgYU09
US5sZW5ndGgsYUI9W10sYUU9W107Zm9yKGFHPTA7YUc8US5sZW5ndGg7KythRyl7dmFyIGFKPVFb
YUddLmNvbG9yO2lmKGFKIT1udWxsKXstLWFNO2lmKHR5cGVvZiBhSj09Im51bWJlciIpe2FFLnB1
c2goYUopfWVsc2V7YUIucHVzaChjLmNvbG9yLnBhcnNlKFFbYUddLmNvbG9yKSl9fX1mb3IoYUc9
MDthRzxhRS5sZW5ndGg7KythRyl7YU09TWF0aC5tYXgoYU0sYUVbYUddKzEpfXZhciBhQz1bXSxh
Rj0wO2FHPTA7d2hpbGUoYUMubGVuZ3RoPGFNKXt2YXIgYUk7aWYoTy5jb2xvcnMubGVuZ3RoPT1h
Ryl7YUk9Yy5jb2xvci5tYWtlKDEwMCwxMDAsMTAwKX1lbHNle2FJPWMuY29sb3IucGFyc2UoTy5j
b2xvcnNbYUddKX12YXIgYUQ9YUYlMj09MT8tMToxO2FJLnNjYWxlKCJyZ2IiLDErYUQqTWF0aC5j
ZWlsKGFGLzIpKjAuMik7YUMucHVzaChhSSk7KythRztpZihhRz49Ty5jb2xvcnMubGVuZ3RoKXth
Rz0wOysrYUZ9fXZhciBhSD0wLGFOO2ZvcihhRz0wO2FHPFEubGVuZ3RoOysrYUcpe2FOPVFbYUdd
O2lmKGFOLmNvbG9yPT1udWxsKXthTi5jb2xvcj1hQ1thSF0udG9TdHJpbmcoKTsrK2FIfWVsc2V7
aWYodHlwZW9mIGFOLmNvbG9yPT0ibnVtYmVyIil7YU4uY29sb3I9YUNbYU4uY29sb3JdLnRvU3Ry
aW5nKCl9fWlmKGFOLmxpbmVzLnNob3c9PW51bGwpe3ZhciBhTCxhSz10cnVlO2ZvcihhTCBpbiBh
Til7aWYoYU5bYUxdJiZhTlthTF0uc2hvdyl7YUs9ZmFsc2U7YnJlYWt9fWlmKGFLKXthTi5saW5l
cy5zaG93PXRydWV9fWFOLnhheGlzPVYocCxhQShhTiwieCIpKTthTi55YXhpcz1WKGF3LGFBKGFO
LCJ5IikpfX1mdW5jdGlvbiB6KCl7dmFyIGFPPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhST1O
dW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksYUI9TnVtYmVyLk1BWF9WQUxVRSxhVSxhUyxhUixhTixh
RCxhSixhVCxhUCxhSCxhRyxhQyxhMCxhWCxhTDtmdW5jdGlvbiBhRihhMyxhMixhMSl7aWYoYTI8
YTMuZGF0YW1pbiYmYTIhPS1hQil7YTMuZGF0YW1pbj1hMn1pZihhMT5hMy5kYXRhbWF4JiZhMSE9
YUIpe2EzLmRhdGFtYXg9YTF9fWMuZWFjaChtKCksZnVuY3Rpb24oYTEsYTIpe2EyLmRhdGFtaW49
YU87YTIuZGF0YW1heD1hSTthMi51c2VkPWZhbHNlfSk7Zm9yKGFVPTA7YVU8US5sZW5ndGg7Kyth
VSl7YUo9UVthVV07YUouZGF0YXBvaW50cz17cG9pbnRzOltdfTthbihhay5wcm9jZXNzUmF3RGF0
YSxbYUosYUouZGF0YSxhSi5kYXRhcG9pbnRzXSl9Zm9yKGFVPTA7YVU8US5sZW5ndGg7KythVSl7
YUo9UVthVV07dmFyIGFaPWFKLmRhdGEsYVc9YUouZGF0YXBvaW50cy5mb3JtYXQ7aWYoIWFXKXth
Vz1bXTthVy5wdXNoKHt4OnRydWUsbnVtYmVyOnRydWUscmVxdWlyZWQ6dHJ1ZX0pO2FXLnB1c2go
e3k6dHJ1ZSxudW1iZXI6dHJ1ZSxyZXF1aXJlZDp0cnVlfSk7aWYoYUouYmFycy5zaG93fHwoYUou
bGluZXMuc2hvdyYmYUoubGluZXMuZmlsbCkpe2FXLnB1c2goe3k6dHJ1ZSxudW1iZXI6dHJ1ZSxy
ZXF1aXJlZDpmYWxzZSxkZWZhdWx0VmFsdWU6MH0pO2lmKGFKLmJhcnMuaG9yaXpvbnRhbCl7ZGVs
ZXRlIGFXW2FXLmxlbmd0aC0xXS55O2FXW2FXLmxlbmd0aC0xXS54PXRydWV9fWFKLmRhdGFwb2lu
dHMuZm9ybWF0PWFXfWlmKGFKLmRhdGFwb2ludHMucG9pbnRzaXplIT1udWxsKXtjb250aW51ZX1h
Si5kYXRhcG9pbnRzLnBvaW50c2l6ZT1hVy5sZW5ndGg7YVA9YUouZGF0YXBvaW50cy5wb2ludHNp
emU7YVQ9YUouZGF0YXBvaW50cy5wb2ludHM7aW5zZXJ0U3RlcHM9YUoubGluZXMuc2hvdyYmYUou
bGluZXMuc3RlcHM7YUoueGF4aXMudXNlZD1hSi55YXhpcy51c2VkPXRydWU7Zm9yKGFTPWFSPTA7
YVM8YVoubGVuZ3RoOysrYVMsYVIrPWFQKXthTD1hWlthU107dmFyIGFFPWFMPT1udWxsO2lmKCFh
RSl7Zm9yKGFOPTA7YU48YVA7KythTil7YTA9YUxbYU5dO2FYPWFXW2FOXTtpZihhWCl7aWYoYVgu
bnVtYmVyJiZhMCE9bnVsbCl7YTA9K2EwO2lmKGlzTmFOKGEwKSl7YTA9bnVsbH1lbHNle2lmKGEw
PT1JbmZpbml0eSl7YTA9YUJ9ZWxzZXtpZihhMD09LUluZmluaXR5KXthMD0tYUJ9fX19aWYoYTA9
PW51bGwpe2lmKGFYLnJlcXVpcmVkKXthRT10cnVlfWlmKGFYLmRlZmF1bHRWYWx1ZSE9bnVsbCl7
YTA9YVguZGVmYXVsdFZhbHVlfX19YVRbYVIrYU5dPWEwfX1pZihhRSl7Zm9yKGFOPTA7YU48YVA7
KythTil7YTA9YVRbYVIrYU5dO2lmKGEwIT1udWxsKXthWD1hV1thTl07aWYoYVgueCl7YUYoYUou
eGF4aXMsYTAsYTApfWlmKGFYLnkpe2FGKGFKLnlheGlzLGEwLGEwKX19YVRbYVIrYU5dPW51bGx9
fWVsc2V7aWYoaW5zZXJ0U3RlcHMmJmFSPjAmJmFUW2FSLWFQXSE9bnVsbCYmYVRbYVItYVBdIT1h
VFthUl0mJmFUW2FSLWFQKzFdIT1hVFthUisxXSl7Zm9yKGFOPTA7YU48YVA7KythTil7YVRbYVIr
YVArYU5dPWFUW2FSK2FOXX1hVFthUisxXT1hVFthUi1hUCsxXTthUis9YVB9fX19Zm9yKGFVPTA7
YVU8US5sZW5ndGg7KythVSl7YUo9UVthVV07YW4oYWsucHJvY2Vzc0RhdGFwb2ludHMsW2FKLGFK
LmRhdGFwb2ludHNdKX1mb3IoYVU9MDthVTxRLmxlbmd0aDsrK2FVKXthSj1RW2FVXTthVD1hSi5k
YXRhcG9pbnRzLnBvaW50cyxhUD1hSi5kYXRhcG9pbnRzLnBvaW50c2l6ZTt2YXIgYUs9YU8sYVE9
YU8sYU09YUksYVY9YUk7Zm9yKGFTPTA7YVM8YVQubGVuZ3RoO2FTKz1hUCl7aWYoYVRbYVNdPT1u
dWxsKXtjb250aW51ZX1mb3IoYU49MDthTjxhUDsrK2FOKXthMD1hVFthUythTl07YVg9YVdbYU5d
O2lmKCFhWHx8YTA9PWFCfHxhMD09LWFCKXtjb250aW51ZX1pZihhWC54KXtpZihhMDxhSyl7YUs9
YTB9aWYoYTA+YU0pe2FNPWEwfX1pZihhWC55KXtpZihhMDxhUSl7YVE9YTB9aWYoYTA+YVYpe2FW
PWEwfX19fWlmKGFKLmJhcnMuc2hvdyl7dmFyIGFZPWFKLmJhcnMuYWxpZ249PSJsZWZ0Ij8wOi1h
Si5iYXJzLmJhcldpZHRoLzI7aWYoYUouYmFycy5ob3Jpem9udGFsKXthUSs9YVk7YVYrPWFZK2FK
LmJhcnMuYmFyV2lkdGh9ZWxzZXthSys9YVk7YU0rPWFZK2FKLmJhcnMuYmFyV2lkdGh9fWFGKGFK
LnhheGlzLGFLLGFNKTthRihhSi55YXhpcyxhUSxhVil9Yy5lYWNoKG0oKSxmdW5jdGlvbihhMSxh
Mil7aWYoYTIuZGF0YW1pbj09YU8pe2EyLmRhdGFtaW49bnVsbH1pZihhMi5kYXRhbWF4PT1hSSl7
YTIuZGF0YW1heD1udWxsfX0pfWZ1bmN0aW9uIGooYUIsYUMpe3ZhciBhRD1kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJjYW52YXMiKTthRC5jbGFzc05hbWU9YUM7YUQud2lkdGg9RzthRC5oZWlnaHQ9
STtpZighYUIpe2MoYUQpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAsdG9wOjB9KX1j
KGFEKS5hcHBlbmRUbyhhdik7aWYoIWFELmdldENvbnRleHQpe2FEPXdpbmRvdy5HX3ZtbENhbnZh
c01hbmFnZXIuaW5pdEVsZW1lbnQoYUQpfWFELmdldENvbnRleHQoIjJkIikuc2F2ZSgpO3JldHVy
biBhRH1mdW5jdGlvbiBCKCl7Rz1hdi53aWR0aCgpO0k9YXYuaGVpZ2h0KCk7aWYoRzw9MHx8STw9
MCl7dGhyb3ciSW52YWxpZCBkaW1lbnNpb25zIGZvciBwbG90LCB3aWR0aCA9ICIrRysiLCBoZWln
aHQgPSAiK0l9fWZ1bmN0aW9uIGcoYUMpe2lmKGFDLndpZHRoIT1HKXthQy53aWR0aD1HfWlmKGFD
LmhlaWdodCE9SSl7YUMuaGVpZ2h0PUl9dmFyIGFCPWFDLmdldENvbnRleHQoIjJkIik7YUIucmVz
dG9yZSgpO2FCLnNhdmUoKX1mdW5jdGlvbiBYKCl7dmFyIGFDLGFCPWF2LmNoaWxkcmVuKCJjYW52
YXMuYmFzZSIpLGFEPWF2LmNoaWxkcmVuKCJjYW52YXMub3ZlcmxheSIpO2lmKGFCLmxlbmd0aD09
MHx8YUQ9PTApe2F2Lmh0bWwoIiIpO2F2LmNzcyh7cGFkZGluZzowfSk7aWYoYXYuY3NzKCJwb3Np
dGlvbiIpPT0ic3RhdGljIil7YXYuY3NzKCJwb3NpdGlvbiIsInJlbGF0aXZlIil9QigpO2F6PWoo
dHJ1ZSwiYmFzZSIpO2FkPWooZmFsc2UsIm92ZXJsYXkiKTthQz1mYWxzZX1lbHNle2F6PWFCLmdl
dCgwKTthZD1hRC5nZXQoMCk7YUM9dHJ1ZX1IPWF6LmdldENvbnRleHQoIjJkIik7QT1hZC5nZXRD
b250ZXh0KCIyZCIpO3k9YyhbYWQsYXpdKTtpZihhQyl7YXYuZGF0YSgicGxvdCIpLnNodXRkb3du
KCk7YXEucmVzaXplKCk7QS5jbGVhclJlY3QoMCwwLEcsSSk7eS51bmJpbmQoKTthdi5jaGlsZHJl
bigpLm5vdChbYXosYWRdKS5yZW1vdmUoKX1hdi5kYXRhKCJwbG90IixhcSl9ZnVuY3Rpb24gYWgo
KXtpZihPLmdyaWQuaG92ZXJhYmxlKXt5Lm1vdXNlbW92ZShhYSk7eS5tb3VzZWxlYXZlKGwpfWlm
KE8uZ3JpZC5jbGlja2FibGUpe3kuY2xpY2soUil9YW4oYWsuYmluZEV2ZW50cyxbeV0pfWZ1bmN0
aW9uIGFnKCl7aWYoTSl7Y2xlYXJUaW1lb3V0KE0pfXkudW5iaW5kKCJtb3VzZW1vdmUiLGFhKTt5
LnVuYmluZCgibW91c2VsZWF2ZSIsbCk7eS51bmJpbmQoImNsaWNrIixSKTthbihhay5zaHV0ZG93
bixbeV0pfWZ1bmN0aW9uIHIoYUcpe2Z1bmN0aW9uIGFDKGFIKXtyZXR1cm4gYUh9dmFyIGFGLGFC
LGFEPWFHLm9wdGlvbnMudHJhbnNmb3JtfHxhQyxhRT1hRy5vcHRpb25zLmludmVyc2VUcmFuc2Zv
cm07aWYoYUcuZGlyZWN0aW9uPT0ieCIpe2FGPWFHLnNjYWxlPWgvTWF0aC5hYnMoYUQoYUcubWF4
KS1hRChhRy5taW4pKTthQj1NYXRoLm1pbihhRChhRy5tYXgpLGFEKGFHLm1pbikpfWVsc2V7YUY9
YUcuc2NhbGU9dy9NYXRoLmFicyhhRChhRy5tYXgpLWFEKGFHLm1pbikpO2FGPS1hRjthQj1NYXRo
Lm1heChhRChhRy5tYXgpLGFEKGFHLm1pbikpfWlmKGFEPT1hQyl7YUcucDJjPWZ1bmN0aW9uKGFI
KXtyZXR1cm4oYUgtYUIpKmFGfX1lbHNle2FHLnAyYz1mdW5jdGlvbihhSCl7cmV0dXJuKGFEKGFI
KS1hQikqYUZ9fWlmKCFhRSl7YUcuYzJwPWZ1bmN0aW9uKGFIKXtyZXR1cm4gYUIrYUgvYUZ9fWVs
c2V7YUcuYzJwPWZ1bmN0aW9uKGFIKXtyZXR1cm4gYUUoYUIrYUgvYUYpfX19ZnVuY3Rpb24gTChh
RCl7dmFyIGFCPWFELm9wdGlvbnMsYUYsYUo9YUQudGlja3N8fFtdLGFJPVtdLGFFLGFLPWFCLmxh
YmVsV2lkdGgsYUc9YUIubGFiZWxIZWlnaHQsYUM7ZnVuY3Rpb24gYUgoYU0sYUwpe3JldHVybiBj
KCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTEwMDAwcHg7JythTCsnZm9udC1z
aXplOnNtYWxsZXIiPjxkaXYgY2xhc3M9IicrYUQuZGlyZWN0aW9uKyJBeGlzICIrYUQuZGlyZWN0
aW9uK2FELm4rJ0F4aXMiPicrYU0uam9pbigiIikrIjwvZGl2PjwvZGl2PiIpLmFwcGVuZFRvKGF2
KX1pZihhRC5kaXJlY3Rpb249PSJ4Iil7aWYoYUs9PW51bGwpe2FLPU1hdGguZmxvb3IoRy8oYUou
bGVuZ3RoPjA/YUoubGVuZ3RoOjEpKX1pZihhRz09bnVsbCl7YUk9W107Zm9yKGFGPTA7YUY8YUou
bGVuZ3RoOysrYUYpe2FFPWFKW2FGXS5sYWJlbDtpZihhRSl7YUkucHVzaCgnPGRpdiBjbGFzcz0i
dGlja0xhYmVsIiBzdHlsZT0iZmxvYXQ6bGVmdDt3aWR0aDonK2FLKydweCI+JythRSsiPC9kaXY+
Iil9fWlmKGFJLmxlbmd0aD4wKXthSS5wdXNoKCc8ZGl2IHN0eWxlPSJjbGVhcjpsZWZ0Ij48L2Rp
dj4nKTthQz1hSChhSSwid2lkdGg6MTAwMDBweDsiKTthRz1hQy5oZWlnaHQoKTthQy5yZW1vdmUo
KX19fWVsc2V7aWYoYUs9PW51bGx8fGFHPT1udWxsKXtmb3IoYUY9MDthRjxhSi5sZW5ndGg7Kyth
Ril7YUU9YUpbYUZdLmxhYmVsO2lmKGFFKXthSS5wdXNoKCc8ZGl2IGNsYXNzPSJ0aWNrTGFiZWwi
PicrYUUrIjwvZGl2PiIpfX1pZihhSS5sZW5ndGg+MCl7YUM9YUgoYUksIiIpO2lmKGFLPT1udWxs
KXthSz1hQy5jaGlsZHJlbigpLndpZHRoKCl9aWYoYUc9PW51bGwpe2FHPWFDLmZpbmQoImRpdi50
aWNrTGFiZWwiKS5oZWlnaHQoKX1hQy5yZW1vdmUoKX19fWlmKGFLPT1udWxsKXthSz0wfWlmKGFH
PT1udWxsKXthRz0wfWFELmxhYmVsV2lkdGg9YUs7YUQubGFiZWxIZWlnaHQ9YUd9ZnVuY3Rpb24g
YXUoYUQpe3ZhciBhQz1hRC5sYWJlbFdpZHRoLGFMPWFELmxhYmVsSGVpZ2h0LGFIPWFELm9wdGlv
bnMucG9zaXRpb24sYUY9YUQub3B0aW9ucy50aWNrTGVuZ3RoLGFHPU8uZ3JpZC5heGlzTWFyZ2lu
LGFKPU8uZ3JpZC5sYWJlbE1hcmdpbixhSz1hRC5kaXJlY3Rpb249PSJ4Ij9wOmF3LGFFO3ZhciBh
Qj1jLmdyZXAoYUssZnVuY3Rpb24oYU4pe3JldHVybiBhTiYmYU4ub3B0aW9ucy5wb3NpdGlvbj09
YUgmJmFOLnJlc2VydmVTcGFjZX0pO2lmKGMuaW5BcnJheShhRCxhQik9PWFCLmxlbmd0aC0xKXth
Rz0wfWlmKGFGPT1udWxsKXthRj0iZnVsbCJ9dmFyIGFJPWMuZ3JlcChhSyxmdW5jdGlvbihhTil7
cmV0dXJuIGFOJiZhTi5yZXNlcnZlU3BhY2V9KTt2YXIgYU09Yy5pbkFycmF5KGFELGFJKT09MDtp
ZighYU0mJmFGPT0iZnVsbCIpe2FGPTV9aWYoIWlzTmFOKCthRikpe2FKKz0rYUZ9aWYoYUQuZGly
ZWN0aW9uPT0ieCIpe2FMKz1hSjtpZihhSD09ImJvdHRvbSIpe3EuYm90dG9tKz1hTCthRzthRC5i
b3g9e3RvcDpJLXEuYm90dG9tLGhlaWdodDphTH19ZWxzZXthRC5ib3g9e3RvcDpxLnRvcCthRyxo
ZWlnaHQ6YUx9O3EudG9wKz1hTCthR319ZWxzZXthQys9YUo7aWYoYUg9PSJsZWZ0Iil7YUQuYm94
PXtsZWZ0OnEubGVmdCthRyx3aWR0aDphQ307cS5sZWZ0Kz1hQythR31lbHNle3EucmlnaHQrPWFD
K2FHO2FELmJveD17bGVmdDpHLXEucmlnaHQsd2lkdGg6YUN9fX1hRC5wb3NpdGlvbj1hSDthRC50
aWNrTGVuZ3RoPWFGO2FELmJveC5wYWRkaW5nPWFKO2FELmlubmVybW9zdD1hTX1mdW5jdGlvbiBV
KGFCKXtpZihhQi5kaXJlY3Rpb249PSJ4Iil7YUIuYm94LmxlZnQ9cS5sZWZ0O2FCLmJveC53aWR0
aD1ofWVsc2V7YUIuYm94LnRvcD1xLnRvcDthQi5ib3guaGVpZ2h0PXd9fWZ1bmN0aW9uIHQoKXt2
YXIgYUMsYUU9bSgpO2MuZWFjaChhRSxmdW5jdGlvbihhRixhRyl7YUcuc2hvdz1hRy5vcHRpb25z
LnNob3c7aWYoYUcuc2hvdz09bnVsbCl7YUcuc2hvdz1hRy51c2VkfWFHLnJlc2VydmVTcGFjZT1h
Ry5zaG93fHxhRy5vcHRpb25zLnJlc2VydmVTcGFjZTtuKGFHKX0pO2FsbG9jYXRlZEF4ZXM9Yy5n
cmVwKGFFLGZ1bmN0aW9uKGFGKXtyZXR1cm4gYUYucmVzZXJ2ZVNwYWNlfSk7cS5sZWZ0PXEucmln
aHQ9cS50b3A9cS5ib3R0b209MDtpZihPLmdyaWQuc2hvdyl7Yy5lYWNoKGFsbG9jYXRlZEF4ZXMs
ZnVuY3Rpb24oYUYsYUcpe1MoYUcpO1AoYUcpO2FwKGFHLGFHLnRpY2tzKTtMKGFHKX0pO2Zvcihh
Qz1hbGxvY2F0ZWRBeGVzLmxlbmd0aC0xO2FDPj0wOy0tYUMpe2F1KGFsbG9jYXRlZEF4ZXNbYUNd
KX12YXIgYUQ9Ty5ncmlkLm1pbkJvcmRlck1hcmdpbjtpZihhRD09bnVsbCl7YUQ9MDtmb3IoYUM9
MDthQzxRLmxlbmd0aDsrK2FDKXthRD1NYXRoLm1heChhRCxRW2FDXS5wb2ludHMucmFkaXVzK1Fb
YUNdLnBvaW50cy5saW5lV2lkdGgvMil9fWZvcih2YXIgYUIgaW4gcSl7cVthQl0rPU8uZ3JpZC5i
b3JkZXJXaWR0aDtxW2FCXT1NYXRoLm1heChhRCxxW2FCXSl9fWg9Ry1xLmxlZnQtcS5yaWdodDt3
PUktcS5ib3R0b20tcS50b3A7Yy5lYWNoKGFFLGZ1bmN0aW9uKGFGLGFHKXtyKGFHKX0pO2lmKE8u
Z3JpZC5zaG93KXtjLmVhY2goYWxsb2NhdGVkQXhlcyxmdW5jdGlvbihhRixhRyl7VShhRyl9KTtr
KCl9bygpfWZ1bmN0aW9uIG4oYUUpe3ZhciBhRj1hRS5vcHRpb25zLGFEPSsoYUYubWluIT1udWxs
P2FGLm1pbjphRS5kYXRhbWluKSxhQj0rKGFGLm1heCE9bnVsbD9hRi5tYXg6YUUuZGF0YW1heCks
YUg9YUItYUQ7aWYoYUg9PTApe3ZhciBhQz1hQj09MD8xOjAuMDE7aWYoYUYubWluPT1udWxsKXth
RC09YUN9aWYoYUYubWF4PT1udWxsfHxhRi5taW4hPW51bGwpe2FCKz1hQ319ZWxzZXt2YXIgYUc9
YUYuYXV0b3NjYWxlTWFyZ2luO2lmKGFHIT1udWxsKXtpZihhRi5taW49PW51bGwpe2FELT1hSCph
RztpZihhRDwwJiZhRS5kYXRhbWluIT1udWxsJiZhRS5kYXRhbWluPj0wKXthRD0wfX1pZihhRi5t
YXg9PW51bGwpe2FCKz1hSCphRztpZihhQj4wJiZhRS5kYXRhbWF4IT1udWxsJiZhRS5kYXRhbWF4
PD0wKXthQj0wfX19fWFFLm1pbj1hRDthRS5tYXg9YUJ9ZnVuY3Rpb24gUyhhRyl7dmFyIGFNPWFH
Lm9wdGlvbnM7dmFyIGFIO2lmKHR5cGVvZiBhTS50aWNrcz09Im51bWJlciImJmFNLnRpY2tzPjAp
e2FIPWFNLnRpY2tzfWVsc2V7YUg9MC4zKk1hdGguc3FydChhRy5kaXJlY3Rpb249PSJ4Ij9HOkkp
fXZhciBhVD0oYUcubWF4LWFHLm1pbikvYUgsYU8sYUIsYU4sYVIsYVMsYVEsYUk7aWYoYU0ubW9k
ZT09InRpbWUiKXt2YXIgYUo9e3NlY29uZDoxMDAwLG1pbnV0ZTo2MCoxMDAwLGhvdXI6NjAqNjAq
MTAwMCxkYXk6MjQqNjAqNjAqMTAwMCxtb250aDozMCoyNCo2MCo2MCoxMDAwLHllYXI6MzY1LjI0
MjUqMjQqNjAqNjAqMTAwMH07dmFyIGFLPVtbMSwic2Vjb25kIl0sWzIsInNlY29uZCJdLFs1LCJz
ZWNvbmQiXSxbMTAsInNlY29uZCJdLFszMCwic2Vjb25kIl0sWzEsIm1pbnV0ZSJdLFsyLCJtaW51
dGUiXSxbNSwibWludXRlIl0sWzEwLCJtaW51dGUiXSxbMzAsIm1pbnV0ZSJdLFsxLCJob3VyIl0s
WzIsImhvdXIiXSxbNCwiaG91ciJdLFs4LCJob3VyIl0sWzEyLCJob3VyIl0sWzEsImRheSJdLFsy
LCJkYXkiXSxbMywiZGF5Il0sWzAuMjUsIm1vbnRoIl0sWzAuNSwibW9udGgiXSxbMSwibW9udGgi
XSxbMiwibW9udGgiXSxbMywibW9udGgiXSxbNiwibW9udGgiXSxbMSwieWVhciJdXTt2YXIgYUM9
MDtpZihhTS5taW5UaWNrU2l6ZSE9bnVsbCl7aWYodHlwZW9mIGFNLnRpY2tTaXplPT0ibnVtYmVy
Iil7YUM9YU0udGlja1NpemV9ZWxzZXthQz1hTS5taW5UaWNrU2l6ZVswXSphSlthTS5taW5UaWNr
U2l6ZVsxXV19fWZvcih2YXIgYVM9MDthUzxhSy5sZW5ndGgtMTsrK2FTKXtpZihhVDwoYUtbYVNd
WzBdKmFKW2FLW2FTXVsxXV0rYUtbYVMrMV1bMF0qYUpbYUtbYVMrMV1bMV1dKS8yJiZhS1thU11b
MF0qYUpbYUtbYVNdWzFdXT49YUMpe2JyZWFrfX1hTz1hS1thU11bMF07YU49YUtbYVNdWzFdO2lm
KGFOPT0ieWVhciIpe2FRPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coYVQvYUoueWVh
cikvTWF0aC5MTjEwKSk7YUk9KGFUL2FKLnllYXIpL2FRO2lmKGFJPDEuNSl7YU89MX1lbHNle2lm
KGFJPDMpe2FPPTJ9ZWxzZXtpZihhSTw3LjUpe2FPPTV9ZWxzZXthTz0xMH19fWFPKj1hUX1hRy50
aWNrU2l6ZT1hTS50aWNrU2l6ZXx8W2FPLGFOXTthQj1mdW5jdGlvbihhWCl7dmFyIGEyPVtdLGEw
PWFYLnRpY2tTaXplWzBdLGEzPWFYLnRpY2tTaXplWzFdLGExPW5ldyBEYXRlKGFYLm1pbik7dmFy
IGFXPWEwKmFKW2EzXTtpZihhMz09InNlY29uZCIpe2ExLnNldFVUQ1NlY29uZHMoYShhMS5nZXRV
VENTZWNvbmRzKCksYTApKX1pZihhMz09Im1pbnV0ZSIpe2ExLnNldFVUQ01pbnV0ZXMoYShhMS5n
ZXRVVENNaW51dGVzKCksYTApKX1pZihhMz09ImhvdXIiKXthMS5zZXRVVENIb3VycyhhKGExLmdl
dFVUQ0hvdXJzKCksYTApKX1pZihhMz09Im1vbnRoIil7YTEuc2V0VVRDTW9udGgoYShhMS5nZXRV
VENNb250aCgpLGEwKSl9aWYoYTM9PSJ5ZWFyIil7YTEuc2V0VVRDRnVsbFllYXIoYShhMS5nZXRV
VENGdWxsWWVhcigpLGEwKSl9YTEuc2V0VVRDTWlsbGlzZWNvbmRzKDApO2lmKGFXPj1hSi5taW51
dGUpe2ExLnNldFVUQ1NlY29uZHMoMCl9aWYoYVc+PWFKLmhvdXIpe2ExLnNldFVUQ01pbnV0ZXMo
MCl9aWYoYVc+PWFKLmRheSl7YTEuc2V0VVRDSG91cnMoMCl9aWYoYVc+PWFKLmRheSo0KXthMS5z
ZXRVVENEYXRlKDEpfWlmKGFXPj1hSi55ZWFyKXthMS5zZXRVVENNb250aCgwKX12YXIgYTU9MCxh
ND1OdW1iZXIuTmFOLGFZO2Rve2FZPWE0O2E0PWExLmdldFRpbWUoKTthMi5wdXNoKGE0KTtpZihh
Mz09Im1vbnRoIil7aWYoYTA8MSl7YTEuc2V0VVRDRGF0ZSgxKTt2YXIgYVY9YTEuZ2V0VGltZSgp
O2ExLnNldFVUQ01vbnRoKGExLmdldFVUQ01vbnRoKCkrMSk7dmFyIGFaPWExLmdldFRpbWUoKTth
MS5zZXRUaW1lKGE0K2E1KmFKLmhvdXIrKGFaLWFWKSphMCk7YTU9YTEuZ2V0VVRDSG91cnMoKTth
MS5zZXRVVENIb3VycygwKX1lbHNle2ExLnNldFVUQ01vbnRoKGExLmdldFVUQ01vbnRoKCkrYTAp
fX1lbHNle2lmKGEzPT0ieWVhciIpe2ExLnNldFVUQ0Z1bGxZZWFyKGExLmdldFVUQ0Z1bGxZZWFy
KCkrYTApfWVsc2V7YTEuc2V0VGltZShhNCthVyl9fX13aGlsZShhNDxhWC5tYXgmJmE0IT1hWSk7
cmV0dXJuIGEyfTthUj1mdW5jdGlvbihhVixhWSl7dmFyIGEwPW5ldyBEYXRlKGFWKTtpZihhTS50
aW1lZm9ybWF0IT1udWxsKXtyZXR1cm4gYy5wbG90LmZvcm1hdERhdGUoYTAsYU0udGltZWZvcm1h
dCxhTS5tb250aE5hbWVzKX12YXIgYVc9YVkudGlja1NpemVbMF0qYUpbYVkudGlja1NpemVbMV1d
O3ZhciBhWD1hWS5tYXgtYVkubWluO3ZhciBhWj0oYU0udHdlbHZlSG91ckNsb2NrKT8iICVwIjoi
IjtpZihhVzxhSi5taW51dGUpe2ZtdD0iJWg6JU06JVMiK2FafWVsc2V7aWYoYVc8YUouZGF5KXtp
ZihhWDwyKmFKLmRheSl7Zm10PSIlaDolTSIrYVp9ZWxzZXtmbXQ9IiViICVkICVoOiVNIithWn19
ZWxzZXtpZihhVzxhSi5tb250aCl7Zm10PSIlYiAlZCJ9ZWxzZXtpZihhVzxhSi55ZWFyKXtpZihh
WDxhSi55ZWFyKXtmbXQ9IiViIn1lbHNle2ZtdD0iJWIgJXkifX1lbHNle2ZtdD0iJXkifX19fXJl
dHVybiBjLnBsb3QuZm9ybWF0RGF0ZShhMCxmbXQsYU0ubW9udGhOYW1lcyl9fWVsc2V7dmFyIGFV
PWFNLnRpY2tEZWNpbWFsczt2YXIgYVA9LU1hdGguZmxvb3IoTWF0aC5sb2coYVQpL01hdGguTE4x
MCk7aWYoYVUhPW51bGwmJmFQPmFVKXthUD1hVX1hUT1NYXRoLnBvdygxMCwtYVApO2FJPWFUL2FR
O2lmKGFJPDEuNSl7YU89MX1lbHNle2lmKGFJPDMpe2FPPTI7aWYoYUk+Mi4yNSYmKGFVPT1udWxs
fHxhUCsxPD1hVSkpe2FPPTIuNTsrK2FQfX1lbHNle2lmKGFJPDcuNSl7YU89NX1lbHNle2FPPTEw
fX19YU8qPWFRO2lmKGFNLm1pblRpY2tTaXplIT1udWxsJiZhTzxhTS5taW5UaWNrU2l6ZSl7YU89
YU0ubWluVGlja1NpemV9YUcudGlja0RlY2ltYWxzPU1hdGgubWF4KDAsYVUhPW51bGw/YVU6YVAp
O2FHLnRpY2tTaXplPWFNLnRpY2tTaXplfHxhTzthQj1mdW5jdGlvbihhWCl7dmFyIGFaPVtdO3Zh
ciBhMD1hKGFYLm1pbixhWC50aWNrU2l6ZSksYVc9MCxhVj1OdW1iZXIuTmFOLGFZO2Rve2FZPWFW
O2FWPWEwK2FXKmFYLnRpY2tTaXplO2FaLnB1c2goYVYpOysrYVd9d2hpbGUoYVY8YVgubWF4JiZh
ViE9YVkpO3JldHVybiBhWn07YVI9ZnVuY3Rpb24oYVYsYVcpe3JldHVybiBhVi50b0ZpeGVkKGFX
LnRpY2tEZWNpbWFscyl9fWlmKGFNLmFsaWduVGlja3NXaXRoQXhpcyE9bnVsbCl7dmFyIGFGPShh
Ry5kaXJlY3Rpb249PSJ4Ij9wOmF3KVthTS5hbGlnblRpY2tzV2l0aEF4aXMtMV07aWYoYUYmJmFG
LnVzZWQmJmFGIT1hRyl7dmFyIGFMPWFCKGFHKTtpZihhTC5sZW5ndGg+MCl7aWYoYU0ubWluPT1u
dWxsKXthRy5taW49TWF0aC5taW4oYUcubWluLGFMWzBdKX1pZihhTS5tYXg9PW51bGwmJmFMLmxl
bmd0aD4xKXthRy5tYXg9TWF0aC5tYXgoYUcubWF4LGFMW2FMLmxlbmd0aC0xXSl9fWFCPWZ1bmN0
aW9uKGFYKXt2YXIgYVk9W10sYVYsYVc7Zm9yKGFXPTA7YVc8YUYudGlja3MubGVuZ3RoOysrYVcp
e2FWPShhRi50aWNrc1thV10udi1hRi5taW4pLyhhRi5tYXgtYUYubWluKTthVj1hWC5taW4rYVYq
KGFYLm1heC1hWC5taW4pO2FZLnB1c2goYVYpfXJldHVybiBhWX07aWYoYUcubW9kZSE9InRpbWUi
JiZhTS50aWNrRGVjaW1hbHM9PW51bGwpe3ZhciBhRT1NYXRoLm1heCgwLC1NYXRoLmZsb29yKE1h
dGgubG9nKGFUKS9NYXRoLkxOMTApKzEpLGFEPWFCKGFHKTtpZighKGFELmxlbmd0aD4xJiYvXC4u
KjAkLy50ZXN0KChhRFsxXS1hRFswXSkudG9GaXhlZChhRSkpKSl7YUcudGlja0RlY2ltYWxzPWFF
fX19fWFHLnRpY2tHZW5lcmF0b3I9YUI7aWYoYy5pc0Z1bmN0aW9uKGFNLnRpY2tGb3JtYXR0ZXIp
KXthRy50aWNrRm9ybWF0dGVyPWZ1bmN0aW9uKGFWLGFXKXtyZXR1cm4iIithTS50aWNrRm9ybWF0
dGVyKGFWLGFXKX19ZWxzZXthRy50aWNrRm9ybWF0dGVyPWFSfX1mdW5jdGlvbiBQKGFGKXt2YXIg
YUg9YUYub3B0aW9ucy50aWNrcyxhRz1bXTtpZihhSD09bnVsbHx8KHR5cGVvZiBhSD09Im51bWJl
ciImJmFIPjApKXthRz1hRi50aWNrR2VuZXJhdG9yKGFGKX1lbHNle2lmKGFIKXtpZihjLmlzRnVu
Y3Rpb24oYUgpKXthRz1hSCh7bWluOmFGLm1pbixtYXg6YUYubWF4fSl9ZWxzZXthRz1hSH19fXZh
ciBhRSxhQjthRi50aWNrcz1bXTtmb3IoYUU9MDthRTxhRy5sZW5ndGg7KythRSl7dmFyIGFDPW51
bGw7dmFyIGFEPWFHW2FFXTtpZih0eXBlb2YgYUQ9PSJvYmplY3QiKXthQj0rYURbMF07aWYoYUQu
bGVuZ3RoPjEpe2FDPWFEWzFdfX1lbHNle2FCPSthRH1pZihhQz09bnVsbCl7YUM9YUYudGlja0Zv
cm1hdHRlcihhQixhRil9aWYoIWlzTmFOKGFCKSl7YUYudGlja3MucHVzaCh7djphQixsYWJlbDph
Q30pfX19ZnVuY3Rpb24gYXAoYUIsYUMpe2lmKGFCLm9wdGlvbnMuYXV0b3NjYWxlTWFyZ2luJiZh
Qy5sZW5ndGg+MCl7aWYoYUIub3B0aW9ucy5taW49PW51bGwpe2FCLm1pbj1NYXRoLm1pbihhQi5t
aW4sYUNbMF0udil9aWYoYUIub3B0aW9ucy5tYXg9PW51bGwmJmFDLmxlbmd0aD4xKXthQi5tYXg9
TWF0aC5tYXgoYUIubWF4LGFDW2FDLmxlbmd0aC0xXS52KX19fWZ1bmN0aW9uIFcoKXtILmNsZWFy
UmVjdCgwLDAsRyxJKTt2YXIgYUM9Ty5ncmlkO2lmKGFDLnNob3cmJmFDLmJhY2tncm91bmRDb2xv
cil7TigpfWlmKGFDLnNob3cmJiFhQy5hYm92ZURhdGEpe2FjKCl9Zm9yKHZhciBhQj0wO2FCPFEu
bGVuZ3RoOysrYUIpe2FuKGFrLmRyYXdTZXJpZXMsW0gsUVthQl1dKTtkKFFbYUJdKX1hbihhay5k
cmF3LFtIXSk7aWYoYUMuc2hvdyYmYUMuYWJvdmVEYXRhKXthYygpfX1mdW5jdGlvbiBEKGFCLGFJ
KXt2YXIgYUUsYUgsYUcsYUQsYUY9bSgpO2ZvcihpPTA7aTxhRi5sZW5ndGg7KytpKXthRT1hRltp
XTtpZihhRS5kaXJlY3Rpb249PWFJKXthRD1hSSthRS5uKyJheGlzIjtpZighYUJbYURdJiZhRS5u
PT0xKXthRD1hSSsiYXhpcyJ9aWYoYUJbYURdKXthSD1hQlthRF0uZnJvbTthRz1hQlthRF0udG87
YnJlYWt9fX1pZighYUJbYURdKXthRT1hST09IngiP3BbMF06YXdbMF07YUg9YUJbYUkrIjEiXTth
Rz1hQlthSSsiMiJdfWlmKGFIIT1udWxsJiZhRyE9bnVsbCYmYUg+YUcpe3ZhciBhQz1hSDthSD1h
RzthRz1hQ31yZXR1cm57ZnJvbTphSCx0bzphRyxheGlzOmFFfX1mdW5jdGlvbiBOKCl7SC5zYXZl
KCk7SC50cmFuc2xhdGUocS5sZWZ0LHEudG9wKTtILmZpbGxTdHlsZT1hbShPLmdyaWQuYmFja2dy
b3VuZENvbG9yLHcsMCwicmdiYSgyNTUsIDI1NSwgMjU1LCAwKSIpO0guZmlsbFJlY3QoMCwwLGgs
dyk7SC5yZXN0b3JlKCl9ZnVuY3Rpb24gYWMoKXt2YXIgYUY7SC5zYXZlKCk7SC50cmFuc2xhdGUo
cS5sZWZ0LHEudG9wKTt2YXIgYUg9Ty5ncmlkLm1hcmtpbmdzO2lmKGFIKXtpZihjLmlzRnVuY3Rp
b24oYUgpKXt2YXIgYUs9YXEuZ2V0QXhlcygpO2FLLnhtaW49YUsueGF4aXMubWluO2FLLnhtYXg9
YUsueGF4aXMubWF4O2FLLnltaW49YUsueWF4aXMubWluO2FLLnltYXg9YUsueWF4aXMubWF4O2FI
PWFIKGFLKX1mb3IoYUY9MDthRjxhSC5sZW5ndGg7KythRil7dmFyIGFEPWFIW2FGXSxhQz1EKGFE
LCJ4IiksYUk9RChhRCwieSIpO2lmKGFDLmZyb209PW51bGwpe2FDLmZyb209YUMuYXhpcy5taW59
aWYoYUMudG89PW51bGwpe2FDLnRvPWFDLmF4aXMubWF4fWlmKGFJLmZyb209PW51bGwpe2FJLmZy
b209YUkuYXhpcy5taW59aWYoYUkudG89PW51bGwpe2FJLnRvPWFJLmF4aXMubWF4fWlmKGFDLnRv
PGFDLmF4aXMubWlufHxhQy5mcm9tPmFDLmF4aXMubWF4fHxhSS50bzxhSS5heGlzLm1pbnx8YUku
ZnJvbT5hSS5heGlzLm1heCl7Y29udGludWV9YUMuZnJvbT1NYXRoLm1heChhQy5mcm9tLGFDLmF4
aXMubWluKTthQy50bz1NYXRoLm1pbihhQy50byxhQy5heGlzLm1heCk7YUkuZnJvbT1NYXRoLm1h
eChhSS5mcm9tLGFJLmF4aXMubWluKTthSS50bz1NYXRoLm1pbihhSS50byxhSS5heGlzLm1heCk7
aWYoYUMuZnJvbT09YUMudG8mJmFJLmZyb209PWFJLnRvKXtjb250aW51ZX1hQy5mcm9tPWFDLmF4
aXMucDJjKGFDLmZyb20pO2FDLnRvPWFDLmF4aXMucDJjKGFDLnRvKTthSS5mcm9tPWFJLmF4aXMu
cDJjKGFJLmZyb20pO2FJLnRvPWFJLmF4aXMucDJjKGFJLnRvKTtpZihhQy5mcm9tPT1hQy50b3x8
YUkuZnJvbT09YUkudG8pe0guYmVnaW5QYXRoKCk7SC5zdHJva2VTdHlsZT1hRC5jb2xvcnx8Ty5n
cmlkLm1hcmtpbmdzQ29sb3I7SC5saW5lV2lkdGg9YUQubGluZVdpZHRofHxPLmdyaWQubWFya2lu
Z3NMaW5lV2lkdGg7SC5tb3ZlVG8oYUMuZnJvbSxhSS5mcm9tKTtILmxpbmVUbyhhQy50byxhSS50
byk7SC5zdHJva2UoKX1lbHNle0guZmlsbFN0eWxlPWFELmNvbG9yfHxPLmdyaWQubWFya2luZ3ND
b2xvcjtILmZpbGxSZWN0KGFDLmZyb20sYUkudG8sYUMudG8tYUMuZnJvbSxhSS5mcm9tLWFJLnRv
KX19fXZhciBhSz1tKCksYU09Ty5ncmlkLmJvcmRlcldpZHRoO2Zvcih2YXIgYUU9MDthRTxhSy5s
ZW5ndGg7KythRSl7dmFyIGFCPWFLW2FFXSxhRz1hQi5ib3gsYVE9YUIudGlja0xlbmd0aCxhTixh
TCxhUCxhSjtpZighYUIuc2hvd3x8YUIudGlja3MubGVuZ3RoPT0wKXtjb250aW51ZX1ILnN0cm9r
ZVN0eWxlPWFCLm9wdGlvbnMudGlja0NvbG9yfHxjLmNvbG9yLnBhcnNlKGFCLm9wdGlvbnMuY29s
b3IpLnNjYWxlKCJhIiwwLjIyKS50b1N0cmluZygpO0gubGluZVdpZHRoPTE7aWYoYUIuZGlyZWN0
aW9uPT0ieCIpe2FOPTA7aWYoYVE9PSJmdWxsIil7YUw9KGFCLnBvc2l0aW9uPT0idG9wIj8wOncp
fWVsc2V7YUw9YUcudG9wLXEudG9wKyhhQi5wb3NpdGlvbj09InRvcCI/YUcuaGVpZ2h0OjApfX1l
bHNle2FMPTA7aWYoYVE9PSJmdWxsIil7YU49KGFCLnBvc2l0aW9uPT0ibGVmdCI/MDpoKX1lbHNl
e2FOPWFHLmxlZnQtcS5sZWZ0KyhhQi5wb3NpdGlvbj09ImxlZnQiP2FHLndpZHRoOjApfX1pZigh
YUIuaW5uZXJtb3N0KXtILmJlZ2luUGF0aCgpO2FQPWFKPTA7aWYoYUIuZGlyZWN0aW9uPT0ieCIp
e2FQPWh9ZWxzZXthSj13fWlmKEgubGluZVdpZHRoPT0xKXthTj1NYXRoLmZsb29yKGFOKSswLjU7
YUw9TWF0aC5mbG9vcihhTCkrMC41fUgubW92ZVRvKGFOLGFMKTtILmxpbmVUbyhhTithUCxhTCth
Sik7SC5zdHJva2UoKX1ILmJlZ2luUGF0aCgpO2ZvcihhRj0wO2FGPGFCLnRpY2tzLmxlbmd0aDsr
K2FGKXt2YXIgYU89YUIudGlja3NbYUZdLnY7YVA9YUo9MDtpZihhTzxhQi5taW58fGFPPmFCLm1h
eHx8KGFRPT0iZnVsbCImJmFNPjAmJihhTz09YUIubWlufHxhTz09YUIubWF4KSkpe2NvbnRpbnVl
fWlmKGFCLmRpcmVjdGlvbj09IngiKXthTj1hQi5wMmMoYU8pO2FKPWFRPT0iZnVsbCI/LXc6YVE7
aWYoYUIucG9zaXRpb249PSJ0b3AiKXthSj0tYUp9fWVsc2V7YUw9YUIucDJjKGFPKTthUD1hUT09
ImZ1bGwiPy1oOmFRO2lmKGFCLnBvc2l0aW9uPT0ibGVmdCIpe2FQPS1hUH19aWYoSC5saW5lV2lk
dGg9PTEpe2lmKGFCLmRpcmVjdGlvbj09IngiKXthTj1NYXRoLmZsb29yKGFOKSswLjV9ZWxzZXth
TD1NYXRoLmZsb29yKGFMKSswLjV9fUgubW92ZVRvKGFOLGFMKTtILmxpbmVUbyhhTithUCxhTCth
Sil9SC5zdHJva2UoKX1pZihhTSl7SC5saW5lV2lkdGg9YU07SC5zdHJva2VTdHlsZT1PLmdyaWQu
Ym9yZGVyQ29sb3I7SC5zdHJva2VSZWN0KC1hTS8yLC1hTS8yLGgrYU0sdythTSl9SC5yZXN0b3Jl
KCl9ZnVuY3Rpb24gaygpe2F2LmZpbmQoIi50aWNrTGFiZWxzIikucmVtb3ZlKCk7dmFyIGFHPVsn
PGRpdiBjbGFzcz0idGlja0xhYmVscyIgc3R5bGU9ImZvbnQtc2l6ZTpzbWFsbGVyIj4nXTt2YXIg
YUo9bSgpO2Zvcih2YXIgYUQ9MDthRDxhSi5sZW5ndGg7KythRCl7dmFyIGFDPWFKW2FEXSxhRj1h
Qy5ib3g7aWYoIWFDLnNob3cpe2NvbnRpbnVlfWFHLnB1c2goJzxkaXYgY2xhc3M9IicrYUMuZGly
ZWN0aW9uKyJBeGlzICIrYUMuZGlyZWN0aW9uK2FDLm4rJ0F4aXMiIHN0eWxlPSJjb2xvcjonK2FD
Lm9wdGlvbnMuY29sb3IrJyI+Jyk7Zm9yKHZhciBhRT0wO2FFPGFDLnRpY2tzLmxlbmd0aDsrK2FF
KXt2YXIgYUg9YUMudGlja3NbYUVdO2lmKCFhSC5sYWJlbHx8YUgudjxhQy5taW58fGFILnY+YUMu
bWF4KXtjb250aW51ZX12YXIgYUs9e30sYUk7aWYoYUMuZGlyZWN0aW9uPT0ieCIpe2FJPSJjZW50
ZXIiO2FLLmxlZnQ9TWF0aC5yb3VuZChxLmxlZnQrYUMucDJjKGFILnYpLWFDLmxhYmVsV2lkdGgv
Mik7aWYoYUMucG9zaXRpb249PSJib3R0b20iKXthSy50b3A9YUYudG9wK2FGLnBhZGRpbmd9ZWxz
ZXthSy5ib3R0b209SS0oYUYudG9wK2FGLmhlaWdodC1hRi5wYWRkaW5nKX19ZWxzZXthSy50b3A9
TWF0aC5yb3VuZChxLnRvcCthQy5wMmMoYUgudiktYUMubGFiZWxIZWlnaHQvMik7aWYoYUMucG9z
aXRpb249PSJsZWZ0Iil7YUsucmlnaHQ9Ry0oYUYubGVmdCthRi53aWR0aC1hRi5wYWRkaW5nKTth
ST0icmlnaHQifWVsc2V7YUsubGVmdD1hRi5sZWZ0K2FGLnBhZGRpbmc7YUk9ImxlZnQifX1hSy53
aWR0aD1hQy5sYWJlbFdpZHRoO3ZhciBhQj1bInBvc2l0aW9uOmFic29sdXRlIiwidGV4dC1hbGln
bjoiK2FJXTtmb3IodmFyIGFMIGluIGFLKXthQi5wdXNoKGFMKyI6IithS1thTF0rInB4Iil9YUcu
cHVzaCgnPGRpdiBjbGFzcz0idGlja0xhYmVsIiBzdHlsZT0iJythQi5qb2luKCI7IikrJyI+Jyth
SC5sYWJlbCsiPC9kaXY+Iil9YUcucHVzaCgiPC9kaXY+Iil9YUcucHVzaCgiPC9kaXY+Iik7YXYu
YXBwZW5kKGFHLmpvaW4oIiIpKX1mdW5jdGlvbiBkKGFCKXtpZihhQi5saW5lcy5zaG93KXthdChh
Qil9aWYoYUIuYmFycy5zaG93KXtlKGFCKX1pZihhQi5wb2ludHMuc2hvdyl7YW8oYUIpfX1mdW5j
dGlvbiBhdChhRSl7ZnVuY3Rpb24gYUQoYVAsYVEsYUksYVUsYVQpe3ZhciBhVj1hUC5wb2ludHMs
YUo9YVAucG9pbnRzaXplLGFOPW51bGwsYU09bnVsbDtILmJlZ2luUGF0aCgpO2Zvcih2YXIgYU89
YUo7YU88YVYubGVuZ3RoO2FPKz1hSil7dmFyIGFMPWFWW2FPLWFKXSxhUz1hVlthTy1hSisxXSxh
Sz1hVlthT10sYVI9YVZbYU8rMV07aWYoYUw9PW51bGx8fGFLPT1udWxsKXtjb250aW51ZX1pZihh
Uzw9YVImJmFTPGFULm1pbil7aWYoYVI8YVQubWluKXtjb250aW51ZX1hTD0oYVQubWluLWFTKS8o
YVItYVMpKihhSy1hTCkrYUw7YVM9YVQubWlufWVsc2V7aWYoYVI8PWFTJiZhUjxhVC5taW4pe2lm
KGFTPGFULm1pbil7Y29udGludWV9YUs9KGFULm1pbi1hUykvKGFSLWFTKSooYUstYUwpK2FMO2FS
PWFULm1pbn19aWYoYVM+PWFSJiZhUz5hVC5tYXgpe2lmKGFSPmFULm1heCl7Y29udGludWV9YUw9
KGFULm1heC1hUykvKGFSLWFTKSooYUstYUwpK2FMO2FTPWFULm1heH1lbHNle2lmKGFSPj1hUyYm
YVI+YVQubWF4KXtpZihhUz5hVC5tYXgpe2NvbnRpbnVlfWFLPShhVC5tYXgtYVMpLyhhUi1hUykq
KGFLLWFMKSthTDthUj1hVC5tYXh9fWlmKGFMPD1hSyYmYUw8YVUubWluKXtpZihhSzxhVS5taW4p
e2NvbnRpbnVlfWFTPShhVS5taW4tYUwpLyhhSy1hTCkqKGFSLWFTKSthUzthTD1hVS5taW59ZWxz
ZXtpZihhSzw9YUwmJmFLPGFVLm1pbil7aWYoYUw8YVUubWluKXtjb250aW51ZX1hUj0oYVUubWlu
LWFMKS8oYUstYUwpKihhUi1hUykrYVM7YUs9YVUubWlufX1pZihhTD49YUsmJmFMPmFVLm1heCl7
aWYoYUs+YVUubWF4KXtjb250aW51ZX1hUz0oYVUubWF4LWFMKS8oYUstYUwpKihhUi1hUykrYVM7
YUw9YVUubWF4fWVsc2V7aWYoYUs+PWFMJiZhSz5hVS5tYXgpe2lmKGFMPmFVLm1heCl7Y29udGlu
dWV9YVI9KGFVLm1heC1hTCkvKGFLLWFMKSooYVItYVMpK2FTO2FLPWFVLm1heH19aWYoYUwhPWFO
fHxhUyE9YU0pe0gubW92ZVRvKGFVLnAyYyhhTCkrYVEsYVQucDJjKGFTKSthSSl9YU49YUs7YU09
YVI7SC5saW5lVG8oYVUucDJjKGFLKSthUSxhVC5wMmMoYVIpK2FJKX1ILnN0cm9rZSgpfWZ1bmN0
aW9uIGFGKGFJLGFRLGFQKXt2YXIgYVc9YUkucG9pbnRzLGFWPWFJLnBvaW50c2l6ZSxhTj1NYXRo
Lm1pbihNYXRoLm1heCgwLGFQLm1pbiksYVAubWF4KSxhWD0wLGFVLGFUPWZhbHNlLGFNPTEsYUw9
MCxhUj0wO3doaWxlKHRydWUpe2lmKGFWPjAmJmFYPmFXLmxlbmd0aCthVil7YnJlYWt9YVgrPWFW
O3ZhciBhWj1hV1thWC1hVl0sYUs9YVdbYVgtYVYrYU1dLGFZPWFXW2FYXSxhSj1hV1thWCthTV07
aWYoYVQpe2lmKGFWPjAmJmFaIT1udWxsJiZhWT09bnVsbCl7YVI9YVg7YVY9LWFWO2FNPTI7Y29u
dGludWV9aWYoYVY8MCYmYVg9PWFMK2FWKXtILmZpbGwoKTthVD1mYWxzZTthVj0tYVY7YU09MTth
WD1hTD1hUithVjtjb250aW51ZX19aWYoYVo9PW51bGx8fGFZPT1udWxsKXtjb250aW51ZX1pZihh
Wjw9YVkmJmFaPGFRLm1pbil7aWYoYVk8YVEubWluKXtjb250aW51ZX1hSz0oYVEubWluLWFaKS8o
YVktYVopKihhSi1hSykrYUs7YVo9YVEubWlufWVsc2V7aWYoYVk8PWFaJiZhWTxhUS5taW4pe2lm
KGFaPGFRLm1pbil7Y29udGludWV9YUo9KGFRLm1pbi1hWikvKGFZLWFaKSooYUotYUspK2FLO2FZ
PWFRLm1pbn19aWYoYVo+PWFZJiZhWj5hUS5tYXgpe2lmKGFZPmFRLm1heCl7Y29udGludWV9YUs9
KGFRLm1heC1hWikvKGFZLWFaKSooYUotYUspK2FLO2FaPWFRLm1heH1lbHNle2lmKGFZPj1hWiYm
YVk+YVEubWF4KXtpZihhWj5hUS5tYXgpe2NvbnRpbnVlfWFKPShhUS5tYXgtYVopLyhhWS1hWikq
KGFKLWFLKSthSzthWT1hUS5tYXh9fWlmKCFhVCl7SC5iZWdpblBhdGgoKTtILm1vdmVUbyhhUS5w
MmMoYVopLGFQLnAyYyhhTikpO2FUPXRydWV9aWYoYUs+PWFQLm1heCYmYUo+PWFQLm1heCl7SC5s
aW5lVG8oYVEucDJjKGFaKSxhUC5wMmMoYVAubWF4KSk7SC5saW5lVG8oYVEucDJjKGFZKSxhUC5w
MmMoYVAubWF4KSk7Y29udGludWV9ZWxzZXtpZihhSzw9YVAubWluJiZhSjw9YVAubWluKXtILmxp
bmVUbyhhUS5wMmMoYVopLGFQLnAyYyhhUC5taW4pKTtILmxpbmVUbyhhUS5wMmMoYVkpLGFQLnAy
YyhhUC5taW4pKTtjb250aW51ZX19dmFyIGFPPWFaLGFTPWFZO2lmKGFLPD1hSiYmYUs8YVAubWlu
JiZhSj49YVAubWluKXthWj0oYVAubWluLWFLKS8oYUotYUspKihhWS1hWikrYVo7YUs9YVAubWlu
fWVsc2V7aWYoYUo8PWFLJiZhSjxhUC5taW4mJmFLPj1hUC5taW4pe2FZPShhUC5taW4tYUspLyhh
Si1hSykqKGFZLWFaKSthWjthSj1hUC5taW59fWlmKGFLPj1hSiYmYUs+YVAubWF4JiZhSjw9YVAu
bWF4KXthWj0oYVAubWF4LWFLKS8oYUotYUspKihhWS1hWikrYVo7YUs9YVAubWF4fWVsc2V7aWYo
YUo+PWFLJiZhSj5hUC5tYXgmJmFLPD1hUC5tYXgpe2FZPShhUC5tYXgtYUspLyhhSi1hSykqKGFZ
LWFaKSthWjthSj1hUC5tYXh9fWlmKGFaIT1hTyl7SC5saW5lVG8oYVEucDJjKGFPKSxhUC5wMmMo
YUspKX1ILmxpbmVUbyhhUS5wMmMoYVopLGFQLnAyYyhhSykpO0gubGluZVRvKGFRLnAyYyhhWSks
YVAucDJjKGFKKSk7aWYoYVkhPWFTKXtILmxpbmVUbyhhUS5wMmMoYVkpLGFQLnAyYyhhSikpO0gu
bGluZVRvKGFRLnAyYyhhUyksYVAucDJjKGFKKSl9fX1ILnNhdmUoKTtILnRyYW5zbGF0ZShxLmxl
ZnQscS50b3ApO0gubGluZUpvaW49InJvdW5kIjt2YXIgYUc9YUUubGluZXMubGluZVdpZHRoLGFC
PWFFLnNoYWRvd1NpemU7aWYoYUc+MCYmYUI+MCl7SC5saW5lV2lkdGg9YUI7SC5zdHJva2VTdHls
ZT0icmdiYSgwLDAsMCwwLjEpIjt2YXIgYUg9TWF0aC5QSS8xODthRChhRS5kYXRhcG9pbnRzLE1h
dGguc2luKGFIKSooYUcvMithQi8yKSxNYXRoLmNvcyhhSCkqKGFHLzIrYUIvMiksYUUueGF4aXMs
YUUueWF4aXMpO0gubGluZVdpZHRoPWFCLzI7YUQoYUUuZGF0YXBvaW50cyxNYXRoLnNpbihhSCkq
KGFHLzIrYUIvNCksTWF0aC5jb3MoYUgpKihhRy8yK2FCLzQpLGFFLnhheGlzLGFFLnlheGlzKX1I
LmxpbmVXaWR0aD1hRztILnN0cm9rZVN0eWxlPWFFLmNvbG9yO3ZhciBhQz1hZShhRS5saW5lcyxh
RS5jb2xvciwwLHcpO2lmKGFDKXtILmZpbGxTdHlsZT1hQzthRihhRS5kYXRhcG9pbnRzLGFFLnhh
eGlzLGFFLnlheGlzKX1pZihhRz4wKXthRChhRS5kYXRhcG9pbnRzLDAsMCxhRS54YXhpcyxhRS55
YXhpcyl9SC5yZXN0b3JlKCl9ZnVuY3Rpb24gYW8oYUUpe2Z1bmN0aW9uIGFIKGFOLGFNLGFVLGFL
LGFTLGFULGFRLGFKKXt2YXIgYVI9YU4ucG9pbnRzLGFJPWFOLnBvaW50c2l6ZTtmb3IodmFyIGFM
PTA7YUw8YVIubGVuZ3RoO2FMKz1hSSl7dmFyIGFQPWFSW2FMXSxhTz1hUlthTCsxXTtpZihhUD09
bnVsbHx8YVA8YVQubWlufHxhUD5hVC5tYXh8fGFPPGFRLm1pbnx8YU8+YVEubWF4KXtjb250aW51
ZX1ILmJlZ2luUGF0aCgpO2FQPWFULnAyYyhhUCk7YU89YVEucDJjKGFPKSthSztpZihhSj09ImNp
cmNsZSIpe0guYXJjKGFQLGFPLGFNLDAsYVM/TWF0aC5QSTpNYXRoLlBJKjIsZmFsc2UpfWVsc2V7
YUooSCxhUCxhTyxhTSxhUyl9SC5jbG9zZVBhdGgoKTtpZihhVSl7SC5maWxsU3R5bGU9YVU7SC5m
aWxsKCl9SC5zdHJva2UoKX19SC5zYXZlKCk7SC50cmFuc2xhdGUocS5sZWZ0LHEudG9wKTt2YXIg
YUc9YUUucG9pbnRzLmxpbmVXaWR0aCxhQz1hRS5zaGFkb3dTaXplLGFCPWFFLnBvaW50cy5yYWRp
dXMsYUY9YUUucG9pbnRzLnN5bWJvbDtpZihhRz4wJiZhQz4wKXt2YXIgYUQ9YUMvMjtILmxpbmVX
aWR0aD1hRDtILnN0cm9rZVN0eWxlPSJyZ2JhKDAsMCwwLDAuMSkiO2FIKGFFLmRhdGFwb2ludHMs
YUIsbnVsbCxhRCthRC8yLHRydWUsYUUueGF4aXMsYUUueWF4aXMsYUYpO0guc3Ryb2tlU3R5bGU9
InJnYmEoMCwwLDAsMC4yKSI7YUgoYUUuZGF0YXBvaW50cyxhQixudWxsLGFELzIsdHJ1ZSxhRS54
YXhpcyxhRS55YXhpcyxhRil9SC5saW5lV2lkdGg9YUc7SC5zdHJva2VTdHlsZT1hRS5jb2xvcjth
SChhRS5kYXRhcG9pbnRzLGFCLGFlKGFFLnBvaW50cyxhRS5jb2xvciksMCxmYWxzZSxhRS54YXhp
cyxhRS55YXhpcyxhRik7SC5yZXN0b3JlKCl9ZnVuY3Rpb24gRShhTixhTSxhVixhSSxhUSxhRixh
RCxhTCxhSyxhVSxhUixhQyl7dmFyIGFFLGFULGFKLGFQLGFHLGFCLGFPLGFILGFTO2lmKGFSKXth
SD1hQj1hTz10cnVlO2FHPWZhbHNlO2FFPWFWO2FUPWFOO2FQPWFNK2FJO2FKPWFNK2FRO2lmKGFU
PGFFKXthUz1hVDthVD1hRTthRT1hUzthRz10cnVlO2FCPWZhbHNlfX1lbHNle2FHPWFCPWFPPXRy
dWU7YUg9ZmFsc2U7YUU9YU4rYUk7YVQ9YU4rYVE7YUo9YVY7YVA9YU07aWYoYVA8YUope2FTPWFQ
O2FQPWFKO2FKPWFTO2FIPXRydWU7YU89ZmFsc2V9fWlmKGFUPGFMLm1pbnx8YUU+YUwubWF4fHxh
UDxhSy5taW58fGFKPmFLLm1heCl7cmV0dXJufWlmKGFFPGFMLm1pbil7YUU9YUwubWluO2FHPWZh
bHNlfWlmKGFUPmFMLm1heCl7YVQ9YUwubWF4O2FCPWZhbHNlfWlmKGFKPGFLLm1pbil7YUo9YUsu
bWluO2FIPWZhbHNlfWlmKGFQPmFLLm1heCl7YVA9YUsubWF4O2FPPWZhbHNlfWFFPWFMLnAyYyhh
RSk7YUo9YUsucDJjKGFKKTthVD1hTC5wMmMoYVQpO2FQPWFLLnAyYyhhUCk7aWYoYUQpe2FVLmJl
Z2luUGF0aCgpO2FVLm1vdmVUbyhhRSxhSik7YVUubGluZVRvKGFFLGFQKTthVS5saW5lVG8oYVQs
YVApO2FVLmxpbmVUbyhhVCxhSik7YVUuZmlsbFN0eWxlPWFEKGFKLGFQKTthVS5maWxsKCl9aWYo
YUM+MCYmKGFHfHxhQnx8YU98fGFIKSl7YVUuYmVnaW5QYXRoKCk7YVUubW92ZVRvKGFFLGFKK2FG
KTtpZihhRyl7YVUubGluZVRvKGFFLGFQK2FGKX1lbHNle2FVLm1vdmVUbyhhRSxhUCthRil9aWYo
YU8pe2FVLmxpbmVUbyhhVCxhUCthRil9ZWxzZXthVS5tb3ZlVG8oYVQsYVArYUYpfWlmKGFCKXth
VS5saW5lVG8oYVQsYUorYUYpfWVsc2V7YVUubW92ZVRvKGFULGFKK2FGKX1pZihhSCl7YVUubGlu
ZVRvKGFFLGFKK2FGKX1lbHNle2FVLm1vdmVUbyhhRSxhSithRil9YVUuc3Ryb2tlKCl9fWZ1bmN0
aW9uIGUoYUQpe2Z1bmN0aW9uIGFDKGFKLGFJLGFMLGFHLGFLLGFOLGFNKXt2YXIgYU89YUoucG9p
bnRzLGFGPWFKLnBvaW50c2l6ZTtmb3IodmFyIGFIPTA7YUg8YU8ubGVuZ3RoO2FIKz1hRil7aWYo
YU9bYUhdPT1udWxsKXtjb250aW51ZX1FKGFPW2FIXSxhT1thSCsxXSxhT1thSCsyXSxhSSxhTCxh
RyxhSyxhTixhTSxILGFELmJhcnMuaG9yaXpvbnRhbCxhRC5iYXJzLmxpbmVXaWR0aCl9fUguc2F2
ZSgpO0gudHJhbnNsYXRlKHEubGVmdCxxLnRvcCk7SC5saW5lV2lkdGg9YUQuYmFycy5saW5lV2lk
dGg7SC5zdHJva2VTdHlsZT1hRC5jb2xvcjt2YXIgYUI9YUQuYmFycy5hbGlnbj09ImxlZnQiPzA6
LWFELmJhcnMuYmFyV2lkdGgvMjt2YXIgYUU9YUQuYmFycy5maWxsP2Z1bmN0aW9uKGFGLGFHKXty
ZXR1cm4gYWUoYUQuYmFycyxhRC5jb2xvcixhRixhRyl9Om51bGw7YUMoYUQuZGF0YXBvaW50cyxh
QixhQithRC5iYXJzLmJhcldpZHRoLDAsYUUsYUQueGF4aXMsYUQueWF4aXMpO0gucmVzdG9yZSgp
fWZ1bmN0aW9uIGFlKGFELGFCLGFDLGFGKXt2YXIgYUU9YUQuZmlsbDtpZighYUUpe3JldHVybiBu
dWxsfWlmKGFELmZpbGxDb2xvcil7cmV0dXJuIGFtKGFELmZpbGxDb2xvcixhQyxhRixhQil9dmFy
IGFHPWMuY29sb3IucGFyc2UoYUIpO2FHLmE9dHlwZW9mIGFFPT0ibnVtYmVyIj9hRTowLjQ7YUcu
bm9ybWFsaXplKCk7cmV0dXJuIGFHLnRvU3RyaW5nKCl9ZnVuY3Rpb24gbygpe2F2LmZpbmQoIi5s
ZWdlbmQiKS5yZW1vdmUoKTtpZighTy5sZWdlbmQuc2hvdyl7cmV0dXJufXZhciBhSD1bXSxhRj1m
YWxzZSxhTj1PLmxlZ2VuZC5sYWJlbEZvcm1hdHRlcixhTSxhSjtmb3IodmFyIGFFPTA7YUU8US5s
ZW5ndGg7KythRSl7YU09UVthRV07YUo9YU0ubGFiZWw7aWYoIWFKKXtjb250aW51ZX1pZihhRSVP
LmxlZ2VuZC5ub0NvbHVtbnM9PTApe2lmKGFGKXthSC5wdXNoKCI8L3RyPiIpfWFILnB1c2goIjx0
cj4iKTthRj10cnVlfWlmKGFOKXthSj1hTihhSixhTSl9YUgucHVzaCgnPHRkIGNsYXNzPSJsZWdl
bmRDb2xvckJveCI+PGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAnK08ubGVnZW5kLmxhYmVs
Qm94Qm9yZGVyQ29sb3IrJztwYWRkaW5nOjFweCI+PGRpdiBzdHlsZT0id2lkdGg6NHB4O2hlaWdo
dDowO2JvcmRlcjo1cHggc29saWQgJythTS5jb2xvcisnO292ZXJmbG93OmhpZGRlbiI+PC9kaXY+
PC9kaXY+PC90ZD48dGQgY2xhc3M9ImxlZ2VuZExhYmVsIj4nK2FKKyI8L3RkPiIpfWlmKGFGKXth
SC5wdXNoKCI8L3RyPiIpfWlmKGFILmxlbmd0aD09MCl7cmV0dXJufXZhciBhTD0nPHRhYmxlIHN0
eWxlPSJmb250LXNpemU6c21hbGxlcjtjb2xvcjonK08uZ3JpZC5jb2xvcisnIj4nK2FILmpvaW4o
IiIpKyI8L3RhYmxlPiI7aWYoTy5sZWdlbmQuY29udGFpbmVyIT1udWxsKXtjKE8ubGVnZW5kLmNv
bnRhaW5lcikuaHRtbChhTCl9ZWxzZXt2YXIgYUk9IiIsYUM9Ty5sZWdlbmQucG9zaXRpb24sYUQ9
Ty5sZWdlbmQubWFyZ2luO2lmKGFEWzBdPT1udWxsKXthRD1bYUQsYURdfWlmKGFDLmNoYXJBdCgw
KT09Im4iKXthSSs9InRvcDoiKyhhRFsxXStxLnRvcCkrInB4OyJ9ZWxzZXtpZihhQy5jaGFyQXQo
MCk9PSJzIil7YUkrPSJib3R0b206IisoYURbMV0rcS5ib3R0b20pKyJweDsifX1pZihhQy5jaGFy
QXQoMSk9PSJlIil7YUkrPSJyaWdodDoiKyhhRFswXStxLnJpZ2h0KSsicHg7In1lbHNle2lmKGFD
LmNoYXJBdCgxKT09InciKXthSSs9ImxlZnQ6IisoYURbMF0rcS5sZWZ0KSsicHg7In19dmFyIGFL
PWMoJzxkaXYgY2xhc3M9ImxlZ2VuZCI+JythTC5yZXBsYWNlKCdzdHlsZT0iJywnc3R5bGU9InBv
c2l0aW9uOmFic29sdXRlOycrYUkrIjsiKSsiPC9kaXY+IikuYXBwZW5kVG8oYXYpO2lmKE8ubGVn
ZW5kLmJhY2tncm91bmRPcGFjaXR5IT0wKXt2YXIgYUc9Ty5sZWdlbmQuYmFja2dyb3VuZENvbG9y
O2lmKGFHPT1udWxsKXthRz1PLmdyaWQuYmFja2dyb3VuZENvbG9yO2lmKGFHJiZ0eXBlb2YgYUc9
PSJzdHJpbmciKXthRz1jLmNvbG9yLnBhcnNlKGFHKX1lbHNle2FHPWMuY29sb3IuZXh0cmFjdChh
SywiYmFja2dyb3VuZC1jb2xvciIpfWFHLmE9MTthRz1hRy50b1N0cmluZygpfXZhciBhQj1hSy5j
aGlsZHJlbigpO2MoJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOicrYUIud2lk
dGgoKSsicHg7aGVpZ2h0OiIrYUIuaGVpZ2h0KCkrInB4OyIrYUkrImJhY2tncm91bmQtY29sb3I6
IithRysnOyI+IDwvZGl2PicpLnByZXBlbmRUbyhhSykuY3NzKCJvcGFjaXR5IixPLmxlZ2VuZC5i
YWNrZ3JvdW5kT3BhY2l0eSl9fX12YXIgYWI9W10sTT1udWxsO2Z1bmN0aW9uIEsoYUksYUcsYUQp
e3ZhciBhTz1PLmdyaWQubW91c2VBY3RpdmVSYWRpdXMsYTA9YU8qYU8rMSxhWT1udWxsLGFSPWZh
bHNlLGFXLGFVO2ZvcihhVz1RLmxlbmd0aC0xO2FXPj0wOy0tYVcpe2lmKCFhRChRW2FXXSkpe2Nv
bnRpbnVlfXZhciBhUD1RW2FXXSxhSD1hUC54YXhpcyxhRj1hUC55YXhpcyxhVj1hUC5kYXRhcG9p
bnRzLnBvaW50cyxhVD1hUC5kYXRhcG9pbnRzLnBvaW50c2l6ZSxhUT1hSC5jMnAoYUkpLGFOPWFG
LmMycChhRyksYUM9YU8vYUguc2NhbGUsYUI9YU8vYUYuc2NhbGU7aWYoYUgub3B0aW9ucy5pbnZl
cnNlVHJhbnNmb3JtKXthQz1OdW1iZXIuTUFYX1ZBTFVFfWlmKGFGLm9wdGlvbnMuaW52ZXJzZVRy
YW5zZm9ybSl7YUI9TnVtYmVyLk1BWF9WQUxVRX1pZihhUC5saW5lcy5zaG93fHxhUC5wb2ludHMu
c2hvdyl7Zm9yKGFVPTA7YVU8YVYubGVuZ3RoO2FVKz1hVCl7dmFyIGFLPWFWW2FVXSxhSj1hVlth
VSsxXTtpZihhSz09bnVsbCl7Y29udGludWV9aWYoYUstYVE+YUN8fGFLLWFRPC1hQ3x8YUotYU4+
YUJ8fGFKLWFOPC1hQil7Y29udGludWV9dmFyIGFNPU1hdGguYWJzKGFILnAyYyhhSyktYUkpLGFM
PU1hdGguYWJzKGFGLnAyYyhhSiktYUcpLGFTPWFNKmFNK2FMKmFMO2lmKGFTPGEwKXthMD1hUzth
WT1bYVcsYVUvYVRdfX19aWYoYVAuYmFycy5zaG93JiYhYVkpe3ZhciBhRT1hUC5iYXJzLmFsaWdu
PT0ibGVmdCI/MDotYVAuYmFycy5iYXJXaWR0aC8yLGFYPWFFK2FQLmJhcnMuYmFyV2lkdGg7Zm9y
KGFVPTA7YVU8YVYubGVuZ3RoO2FVKz1hVCl7dmFyIGFLPWFWW2FVXSxhSj1hVlthVSsxXSxhWj1h
VlthVSsyXTtpZihhSz09bnVsbCl7Y29udGludWV9aWYoUVthV10uYmFycy5ob3Jpem9udGFsPyhh
UTw9TWF0aC5tYXgoYVosYUspJiZhUT49TWF0aC5taW4oYVosYUspJiZhTj49YUorYUUmJmFOPD1h
SithWCk6KGFRPj1hSythRSYmYVE8PWFLK2FYJiZhTj49TWF0aC5taW4oYVosYUopJiZhTjw9TWF0
aC5tYXgoYVosYUopKSl7YVk9W2FXLGFVL2FUXX19fX1pZihhWSl7YVc9YVlbMF07YVU9YVlbMV07
YVQ9UVthV10uZGF0YXBvaW50cy5wb2ludHNpemU7cmV0dXJue2RhdGFwb2ludDpRW2FXXS5kYXRh
cG9pbnRzLnBvaW50cy5zbGljZShhVSphVCwoYVUrMSkqYVQpLGRhdGFJbmRleDphVSxzZXJpZXM6
UVthV10sc2VyaWVzSW5kZXg6YVd9fXJldHVybiBudWxsfWZ1bmN0aW9uIGFhKGFCKXtpZihPLmdy
aWQuaG92ZXJhYmxlKXt1KCJwbG90aG92ZXIiLGFCLGZ1bmN0aW9uKGFDKXtyZXR1cm4gYUMuaG92
ZXJhYmxlIT1mYWxzZX0pfX1mdW5jdGlvbiBsKGFCKXtpZihPLmdyaWQuaG92ZXJhYmxlKXt1KCJw
bG90aG92ZXIiLGFCLGZ1bmN0aW9uKGFDKXtyZXR1cm4gZmFsc2V9KX19ZnVuY3Rpb24gUihhQil7
dSgicGxvdGNsaWNrIixhQixmdW5jdGlvbihhQyl7cmV0dXJuIGFDLmNsaWNrYWJsZSE9ZmFsc2V9
KX1mdW5jdGlvbiB1KGFDLGFCLGFEKXt2YXIgYUU9eS5vZmZzZXQoKSxhSD1hQi5wYWdlWC1hRS5s
ZWZ0LXEubGVmdCxhRj1hQi5wYWdlWS1hRS50b3AtcS50b3AsYUo9Qyh7bGVmdDphSCx0b3A6YUZ9
KTthSi5wYWdlWD1hQi5wYWdlWDthSi5wYWdlWT1hQi5wYWdlWTt2YXIgYUs9SyhhSCxhRixhRCk7
aWYoYUspe2FLLnBhZ2VYPXBhcnNlSW50KGFLLnNlcmllcy54YXhpcy5wMmMoYUsuZGF0YXBvaW50
WzBdKSthRS5sZWZ0K3EubGVmdCk7YUsucGFnZVk9cGFyc2VJbnQoYUsuc2VyaWVzLnlheGlzLnAy
YyhhSy5kYXRhcG9pbnRbMV0pK2FFLnRvcCtxLnRvcCl9aWYoTy5ncmlkLmF1dG9IaWdobGlnaHQp
e2Zvcih2YXIgYUc9MDthRzxhYi5sZW5ndGg7KythRyl7dmFyIGFJPWFiW2FHXTtpZihhSS5hdXRv
PT1hQyYmIShhSyYmYUkuc2VyaWVzPT1hSy5zZXJpZXMmJmFJLnBvaW50WzBdPT1hSy5kYXRhcG9p
bnRbMF0mJmFJLnBvaW50WzFdPT1hSy5kYXRhcG9pbnRbMV0pKXtUKGFJLnNlcmllcyxhSS5wb2lu
dCl9fWlmKGFLKXt4KGFLLnNlcmllcyxhSy5kYXRhcG9pbnQsYUMpfX1hdi50cmlnZ2VyKGFDLFth
SixhS10pfWZ1bmN0aW9uIGYoKXtpZighTSl7TT1zZXRUaW1lb3V0KHMsMzApfX1mdW5jdGlvbiBz
KCl7TT1udWxsO0Euc2F2ZSgpO0EuY2xlYXJSZWN0KDAsMCxHLEkpO0EudHJhbnNsYXRlKHEubGVm
dCxxLnRvcCk7dmFyIGFDLGFCO2ZvcihhQz0wO2FDPGFiLmxlbmd0aDsrK2FDKXthQj1hYlthQ107
aWYoYUIuc2VyaWVzLmJhcnMuc2hvdyl7dihhQi5zZXJpZXMsYUIucG9pbnQpfWVsc2V7YXkoYUIu
c2VyaWVzLGFCLnBvaW50KX19QS5yZXN0b3JlKCk7YW4oYWsuZHJhd092ZXJsYXksW0FdKX1mdW5j
dGlvbiB4KGFELGFCLGFGKXtpZih0eXBlb2YgYUQ9PSJudW1iZXIiKXthRD1RW2FEXX1pZih0eXBl
b2YgYUI9PSJudW1iZXIiKXt2YXIgYUU9YUQuZGF0YXBvaW50cy5wb2ludHNpemU7YUI9YUQuZGF0
YXBvaW50cy5wb2ludHMuc2xpY2UoYUUqYUIsYUUqKGFCKzEpKX12YXIgYUM9YWwoYUQsYUIpO2lm
KGFDPT0tMSl7YWIucHVzaCh7c2VyaWVzOmFELHBvaW50OmFCLGF1dG86YUZ9KTtmKCl9ZWxzZXtp
ZighYUYpe2FiW2FDXS5hdXRvPWZhbHNlfX19ZnVuY3Rpb24gVChhRCxhQil7aWYoYUQ9PW51bGwm
JmFCPT1udWxsKXthYj1bXTtmKCl9aWYodHlwZW9mIGFEPT0ibnVtYmVyIil7YUQ9UVthRF19aWYo
dHlwZW9mIGFCPT0ibnVtYmVyIil7YUI9YUQuZGF0YVthQl19dmFyIGFDPWFsKGFELGFCKTtpZihh
QyE9LTEpe2FiLnNwbGljZShhQywxKTtmKCl9fWZ1bmN0aW9uIGFsKGFELGFFKXtmb3IodmFyIGFC
PTA7YUI8YWIubGVuZ3RoOysrYUIpe3ZhciBhQz1hYlthQl07aWYoYUMuc2VyaWVzPT1hRCYmYUMu
cG9pbnRbMF09PWFFWzBdJiZhQy5wb2ludFsxXT09YUVbMV0pe3JldHVybiBhQn19cmV0dXJuIC0x
fWZ1bmN0aW9uIGF5KGFFLGFEKXt2YXIgYUM9YURbMF0sYUk9YURbMV0sYUg9YUUueGF4aXMsYUc9
YUUueWF4aXM7aWYoYUM8YUgubWlufHxhQz5hSC5tYXh8fGFJPGFHLm1pbnx8YUk+YUcubWF4KXty
ZXR1cm59dmFyIGFGPWFFLnBvaW50cy5yYWRpdXMrYUUucG9pbnRzLmxpbmVXaWR0aC8yO0EubGlu
ZVdpZHRoPWFGO0Euc3Ryb2tlU3R5bGU9Yy5jb2xvci5wYXJzZShhRS5jb2xvcikuc2NhbGUoImEi
LDAuNSkudG9TdHJpbmcoKTt2YXIgYUI9MS41KmFGLGFDPWFILnAyYyhhQyksYUk9YUcucDJjKGFJ
KTtBLmJlZ2luUGF0aCgpO2lmKGFFLnBvaW50cy5zeW1ib2w9PSJjaXJjbGUiKXtBLmFyYyhhQyxh
SSxhQiwwLDIqTWF0aC5QSSxmYWxzZSl9ZWxzZXthRS5wb2ludHMuc3ltYm9sKEEsYUMsYUksYUIs
ZmFsc2UpfUEuY2xvc2VQYXRoKCk7QS5zdHJva2UoKX1mdW5jdGlvbiB2KGFFLGFCKXtBLmxpbmVX
aWR0aD1hRS5iYXJzLmxpbmVXaWR0aDtBLnN0cm9rZVN0eWxlPWMuY29sb3IucGFyc2UoYUUuY29s
b3IpLnNjYWxlKCJhIiwwLjUpLnRvU3RyaW5nKCk7dmFyIGFEPWMuY29sb3IucGFyc2UoYUUuY29s
b3IpLnNjYWxlKCJhIiwwLjUpLnRvU3RyaW5nKCk7dmFyIGFDPWFFLmJhcnMuYWxpZ249PSJsZWZ0
Ij8wOi1hRS5iYXJzLmJhcldpZHRoLzI7RShhQlswXSxhQlsxXSxhQlsyXXx8MCxhQyxhQythRS5i
YXJzLmJhcldpZHRoLDAsZnVuY3Rpb24oKXtyZXR1cm4gYUR9LGFFLnhheGlzLGFFLnlheGlzLEEs
YUUuYmFycy5ob3Jpem9udGFsLGFFLmJhcnMubGluZVdpZHRoKX1mdW5jdGlvbiBhbShhSixhQixh
SCxhQyl7aWYodHlwZW9mIGFKPT0ic3RyaW5nIil7cmV0dXJuIGFKfWVsc2V7dmFyIGFJPUguY3Jl
YXRlTGluZWFyR3JhZGllbnQoMCxhSCwwLGFCKTtmb3IodmFyIGFFPTAsYUQ9YUouY29sb3JzLmxl
bmd0aDthRTxhRDsrK2FFKXt2YXIgYUY9YUouY29sb3JzW2FFXTtpZih0eXBlb2YgYUYhPSJzdHJp
bmciKXt2YXIgYUc9Yy5jb2xvci5wYXJzZShhQyk7aWYoYUYuYnJpZ2h0bmVzcyE9bnVsbCl7YUc9
YUcuc2NhbGUoInJnYiIsYUYuYnJpZ2h0bmVzcyl9aWYoYUYub3BhY2l0eSE9bnVsbCl7YUcuYSo9
YUYub3BhY2l0eX1hRj1hRy50b1N0cmluZygpfWFJLmFkZENvbG9yU3RvcChhRS8oYUQtMSksYUYp
fXJldHVybiBhSX19fWMucGxvdD1mdW5jdGlvbihnLGUsZCl7dmFyIGY9bmV3IGIoYyhnKSxlLGQs
Yy5wbG90LnBsdWdpbnMpO3JldHVybiBmfTtjLnBsb3QudmVyc2lvbj0iMC43IjtjLnBsb3QucGx1
Z2lucz1bXTtjLnBsb3QuZm9ybWF0RGF0ZT1mdW5jdGlvbihsLGYsaCl7dmFyIG89ZnVuY3Rpb24o
ZCl7ZD0iIitkO3JldHVybiBkLmxlbmd0aD09MT8iMCIrZDpkfTt2YXIgZT1bXTt2YXIgcD1mYWxz
ZSxqPWZhbHNlO3ZhciBuPWwuZ2V0VVRDSG91cnMoKTt2YXIgaz1uPDEyO2lmKGg9PW51bGwpe2g9
WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJP
Y3QiLCJOb3YiLCJEZWMiXX1pZihmLnNlYXJjaCgvJXB8JVAvKSE9LTEpe2lmKG4+MTIpe249bi0x
Mn1lbHNle2lmKG49PTApe249MTJ9fX1mb3IodmFyIGc9MDtnPGYubGVuZ3RoOysrZyl7dmFyIG09
Zi5jaGFyQXQoZyk7aWYocCl7c3dpdGNoKG0pe2Nhc2UiaCI6bT0iIituO2JyZWFrO2Nhc2UiSCI6
bT1vKG4pO2JyZWFrO2Nhc2UiTSI6bT1vKGwuZ2V0VVRDTWludXRlcygpKTticmVhaztjYXNlIlMi
Om09byhsLmdldFVUQ1NlY29uZHMoKSk7YnJlYWs7Y2FzZSJkIjptPSIiK2wuZ2V0VVRDRGF0ZSgp
O2JyZWFrO2Nhc2UibSI6bT0iIisobC5nZXRVVENNb250aCgpKzEpO2JyZWFrO2Nhc2UieSI6bT0i
IitsLmdldFVUQ0Z1bGxZZWFyKCk7YnJlYWs7Y2FzZSJiIjptPSIiK2hbbC5nZXRVVENNb250aCgp
XTticmVhaztjYXNlInAiOm09KGspPygiYW0iKTooInBtIik7YnJlYWs7Y2FzZSJQIjptPShrKT8o
IkFNIik6KCJQTSIpO2JyZWFrO2Nhc2UiMCI6bT0iIjtqPXRydWU7YnJlYWt9aWYobSYmail7bT1v
KG0pO2o9ZmFsc2V9ZS5wdXNoKG0pO2lmKCFqKXtwPWZhbHNlfX1lbHNle2lmKG09PSIlIil7cD10
cnVlfWVsc2V7ZS5wdXNoKG0pfX19cmV0dXJuIGUuam9pbigiIil9O2Z1bmN0aW9uIGEoZSxkKXty
ZXR1cm4gZCpNYXRoLmZsb29yKGUvZCl9fSkoalF1ZXJ5KTsKPC9zY3JpcHQ+CjxzY3JpcHQgdGl0
bGU9ImpxdWVyeS5mbG90LmZpbGxiZXR3ZWVuLm1pbi5qcyI+CihmdW5jdGlvbihiKXt2YXIgYT17
c2VyaWVzOntmaWxsQmV0d2VlbjpudWxsfX07ZnVuY3Rpb24gYyhmKXtmdW5jdGlvbiBkKGosaCl7
dmFyIGc7Zm9yKGc9MDtnPGgubGVuZ3RoOysrZyl7aWYoaFtnXS5pZD09ai5maWxsQmV0d2Vlbil7
cmV0dXJuIGhbZ119fWlmKHR5cGVvZiBqLmZpbGxCZXR3ZWVuPT0ibnVtYmVyIil7Zz1qLmZpbGxC
ZXR3ZWVuO2lmKGc8MHx8Zz49aC5sZW5ndGgpe3JldHVybiBudWxsfXJldHVybiBoW2ddfXJldHVy
biBudWxsfWZ1bmN0aW9uIGUoQix1LGcpe2lmKHUuZmlsbEJldHdlZW49PW51bGwpe3JldHVybn12
YXIgcD1kKHUsQi5nZXREYXRhKCkpO2lmKCFwKXtyZXR1cm59dmFyIHk9Zy5wb2ludHNpemUsRT1n
LnBvaW50cyxoPXAuZGF0YXBvaW50cy5wb2ludHNpemUseD1wLmRhdGFwb2ludHMucG9pbnRzLHI9
W10sdyx2LGssRyxGLHEsdD11LmxpbmVzLnNob3csbz15PjImJmcuZm9ybWF0WzJdLnksbj10JiZ1
LmxpbmVzLnN0ZXBzLEQ9dHJ1ZSxDPTAsQT0wLHo7d2hpbGUodHJ1ZSl7aWYoQz49RS5sZW5ndGgp
e2JyZWFrfXo9ci5sZW5ndGg7aWYoRVtDXT09bnVsbCl7Zm9yKG09MDttPHk7KyttKXtyLnB1c2go
RVtDK21dKX1DKz15fWVsc2V7aWYoQT49eC5sZW5ndGgpe2lmKCF0KXtmb3IobT0wO208eTsrK20p
e3IucHVzaChFW0MrbV0pfX1DKz15fWVsc2V7aWYoeFtBXT09bnVsbCl7Zm9yKG09MDttPHk7Kytt
KXtyLnB1c2gobnVsbCl9RD10cnVlO0ErPWh9ZWxzZXt3PUVbQ107dj1FW0MrMV07Rz14W0FdO0Y9
eFtBKzFdO3E9MDtpZih3PT1HKXtmb3IobT0wO208eTsrK20pe3IucHVzaChFW0MrbV0pfXE9RjtD
Kz15O0ErPWh9ZWxzZXtpZih3Pkcpe2lmKHQmJkM+MCYmRVtDLXldIT1udWxsKXtrPXYrKEVbQy15
KzFdLXYpKihHLXcpLyhFW0MteV0tdyk7ci5wdXNoKEcpO3IucHVzaChrKTtmb3IobT0yO208eTsr
K20pe3IucHVzaChFW0MrbV0pfXE9Rn1BKz1ofWVsc2V7aWYoRCYmdCl7Qys9eTtjb250aW51ZX1m
b3IobT0wO208eTsrK20pe3IucHVzaChFW0MrbV0pfWlmKHQmJkE+MCYmeFtBLWhdIT1udWxsKXtx
PUYrKHhbQS1oKzFdLUYpKih3LUcpLyh4W0EtaF0tRyl9Qys9eX19RD1mYWxzZTtpZih6IT1yLmxl
bmd0aCYmbyl7clt6KzJdPXF9fX19aWYobiYmeiE9ci5sZW5ndGgmJno+MCYmclt6XSE9bnVsbCYm
clt6XSE9clt6LXldJiZyW3orMV0hPXJbei15KzFdKXtmb3IobT0wO208eTsrK20pe3Jbeit5K21d
PXJbeittXX1yW3orMV09clt6LXkrMV19fWcucG9pbnRzPXJ9Zi5ob29rcy5wcm9jZXNzRGF0YXBv
aW50cy5wdXNoKGUpfWIucGxvdC5wbHVnaW5zLnB1c2goe2luaXQ6YyxvcHRpb25zOmEsbmFtZToi
ZmlsbGJldHdlZW4iLHZlcnNpb246IjEuMCJ9KX0pKGpRdWVyeSk7Cjwvc2NyaXB0Pgo8c3R5bGUg
dHlwZT0idGV4dC9jc3MiPgoKc2VjdGlvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAg
ICBwYWRkaW5nOiAwIDEwcHg7Cn0KCnNlY3Rpb24gaDEgewogICAgdGV4dC1hbGlnbjogY2VudGVy
OwogICAgZm9udC1zaXplOiAxZW07Cn0KCnNlY3Rpb24gLnRvb2x0aXAgewogICAgcG9zaXRpb246
IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgYmFja2dyb3VuZDogI2ZmY2M2
NjsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIHBhZGRpbmc6IDBweCA1cHg7Cn0KCjwvc3R5
bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9ImNvbnRhaW5lciI+CjwvZGl2Pgo8c2NyaXB0PgoK
ZnVuY3Rpb24gYXR0YWNoUGxvdCh0ZXN0TmFtZSkgewogICAgdmFyIHNlY3Rpb24gPSAkKCc8c2Vj
dGlvbj48aDE+PC9oMT48ZGl2IGNsYXNzPSJwbG90IiBzdHlsZT0id2lkdGg6IDgwMHB4OyBoZWln
aHQ6IDMwMHB4OyI+PC9kaXY+JwogICAgICAgICsgJzxzcGFuIGNsYXNzPSJ0b29sdGlwIj48L3Nw
YW4+PHNlY3Rpb24+Jyk7CiAgICB2YXIgdW5pdCA9IHRlc3RVbml0c1t0ZXN0TmFtZV07CiAgICBz
ZWN0aW9uLmNoaWxkcmVuKCdoMScpLmh0bWwodGVzdE5hbWUgKyAodW5pdCA/ICcgKCcgKyB1bml0
ICsgJyknIDogJycpKTsKICAgICQoJyNjb250YWluZXInKS5hcHBlbmQoc2VjdGlvbik7CgogICAg
dmFyIGF2ZXJhZ2VzID0gdGVzdFJlc3VsdHNbdGVzdE5hbWVdOwogICAgdmFyIGNvbG9yID0gJ3Jn
YigyMzAsNTAsNTApJzsKCiAgICB2YXIgbWluTWF4T3B0aW9ucyA9IHtsaW5lczoge3Nob3c6dHJ1
ZSwgbGluZVdpZHRoOiAwfSwKICAgICAgICBjb2xvcjogY29sb3IsCiAgICAgICAgcG9pbnRzOiB7
c2hvdzogdHJ1ZSwgcmFkaXVzOiAxfX07CiAgICBmdW5jdGlvbiBtYWtlTG93UGxvdChpZCwgZGF0
YSkgeyByZXR1cm4gJC5leHRlbmQodHJ1ZSwge30sIG1pbk1heE9wdGlvbnMsIHtpZDogaWQsIGRh
dGE6IGRhdGF9KTsgfSAgICAKICAgIGZ1bmN0aW9uIG1ha2VIaWdoUGxvdChmcm9tLCB0bywgZmls
bCwgZGF0YSkgeyByZXR1cm4gJC5leHRlbmQodHJ1ZSwge30sIG1pbk1heE9wdGlvbnMsCiAgICAg
ICAge2lkOiB0bywgZGF0YTogZGF0YSwgbGluZXM6IHtmaWxsOiBmaWxsfSwgZmlsbEJldHdlZW46
IGZyb219KTsgfQoKICAgIHZhciBwbG90RGF0YSA9IFsKICAgICAgICBtYWtlTG93UGxvdCgnbWlu
JywgdGVzdFJlc3VsdHNNaW5bdGVzdE5hbWVdKSwKICAgICAgICBtYWtlSGlnaFBsb3QoJ21pbics
ICdtYXgnLCAwLjIsIHRlc3RSZXN1bHRzTWF4W3Rlc3ROYW1lXSksCiAgICAgICAgbWFrZUxvd1Bs
b3QoJy0mIzk2MzsnLCB0ZXN0UmVzdWx0c1N0ZGV2TG93W3Rlc3ROYW1lXSksIC8vIHNtYWxsIGxl
dHRlciBzZ2ltYS4KICAgICAgICBtYWtlSGlnaFBsb3QoJy0mIzk2MzsnLCAnKyYjOTYzOycsIDAu
NCwgdGVzdFJlc3VsdHNTdGRldkhpZ2hbdGVzdE5hbWVdKSwKICAgICAgICB7ZGF0YTogYXZlcmFn
ZXMsIGNvbG9yOiBjb2xvcn1dOwoKICAgIHZhciBwbG90Q29udGFpbmVyID0gc2VjdGlvbi5jaGls
ZHJlbignLnBsb3QnKTsKICAgICQucGxvdChwbG90Q29udGFpbmVyLCBwbG90RGF0YSwgewogICAg
ICAgIHhheGlzOiB7CiAgICAgICAgICAgIG1pbjogYXZlcmFnZXNbMF1bMF0gLSAwLjI1LAogICAg
ICAgICAgICBtYXg6IGF2ZXJhZ2VzW2F2ZXJhZ2VzLmxlbmd0aCAtIDFdWzBdICsgMC4yNSwKICAg
ICAgICAgICAgdGlja1NpemU6IDEsCiAgICAgICAgICAgIHRpY2tEZWNpbWFsczogMCwKICAgICAg
ICAgICAgdGlja0Zvcm1hdHRlcjogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggPj0gMCA/IHggOiAn
JzsgfX0sCiAgICAgICAgeWF4aXM6IHt9LAogICAgICAgIGNyb3NzaGFpcjogeyBtb2RlOiAneScg
fSwKICAgICAgICBzZXJpZXM6IHsgc2hhZG93U2l6ZTogMCB9LAogICAgICAgIGxpbmVzOiB7IHNo
b3c6IGZhbHNlIH0sCiAgICAgICAgcG9pbnRzOiB7IHNob3c6IHRydWUgfSwKICAgICAgICBncmlk
OiB7CiAgICAgICAgICAgIGJvcmRlcldpZHRoOiAyLAogICAgICAgICAgICBiYWNrZ3JvdW5kQ29s
b3I6ICcjZmZmJywKICAgICAgICAgICAgaG92ZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBhdXRv
SGlnaGxpZ2h0OiB0cnVlLAogICAgICAgIH0KICAgIH0pOwoKICAgIHZhciB0b29sdGlwID0gc2Vj
dGlvbi5jaGlsZHJlbignLnRvb2x0aXAnKTsKICAgIHBsb3RDb250YWluZXIuYmluZCgncGxvdGhv
dmVyJywgZnVuY3Rpb24gKGV2ZW50LCBwb3NpdGlvbiwgaXRlbSkgewogICAgICAgIGlmIChpdGVt
KSB7CiAgICAgICAgICAgIHZhciBwb3N0Zml4ID0gaXRlbS5zZXJpZXMuaWQgPyAnICgnICsgaXRl
bS5zZXJpZXMuaWQgKyAnKScgOiAnJzsKICAgICAgICAgICAgdG9vbHRpcC5odG1sKGl0ZW0uZGF0
YXBvaW50WzFdLnRvUHJlY2lzaW9uKDQpICsgcG9zdGZpeCk7CiAgICAgICAgICAgIHRvb2x0aXAu
Y3NzKHtsZWZ0OiBpdGVtLnBhZ2VYIC0gdG9vbHRpcC5vdXRlcldpZHRoKCkgLyAyLCB0b3A6IGl0
ZW0ucGFnZVkgKyAxMH0pOwogICAgICAgICAgICB0b29sdGlwLmZhZGVJbigyMDApOwogICAgICAg
IH0gZWxzZQogICAgICAgICAgICB0b29sdGlwLmhpZGUoKTsKICAgIH0pOwp9Cgp2YXIgcmVzdWx0
cyA9IEpTT04ucGFyc2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pzb24nKS50ZXh0Q29udGVu
dCk7CnZhciB0ZXN0cyA9IFtdOwp2YXIgdGVzdFJlc3VsdHMgPSB7fSwgdGVzdFJlc3VsdHNNaW4g
PSB7fSwgdGVzdFJlc3VsdHNNYXggPSB7fSwgdGVzdFJlc3VsdHNTdGRldkxvdyA9IHt9LCB0ZXN0
UmVzdWx0c1N0ZGV2SGlnaCA9IHt9Owp2YXIgdGVzdFVuaXRzID0ge307CiQuZWFjaChyZXN1bHRz
LCBmdW5jdGlvbiAoaW5kZXgsIGVudHJ5KSB7CiAgICAkLmVhY2goZW50cnkucmVzdWx0cywgZnVu
Y3Rpb24gKHRlc3QsIHJlc3VsdCkgewogICAgICAgIGlmICh0ZXN0cy5pbmRleE9mKHRlc3QpIDwg
MCkKICAgICAgICAgICAgdGVzdHMucHVzaCh0ZXN0KTsKICAgICAgICBpZiAoIXRlc3RSZXN1bHRz
W3Rlc3RdKSB7CiAgICAgICAgICAgIHRlc3RSZXN1bHRzW3Rlc3RdID0gW107CiAgICAgICAgICAg
IHRlc3RSZXN1bHRzTWluW3Rlc3RdID0gW107CiAgICAgICAgICAgIHRlc3RSZXN1bHRzTWF4W3Rl
c3RdID0gW107CiAgICAgICAgICAgIHRlc3RSZXN1bHRzU3RkZXZMb3dbdGVzdF0gPSBbXTsKICAg
ICAgICAgICAgdGVzdFJlc3VsdHNTdGRldkhpZ2hbdGVzdF0gPSBbXTsKICAgICAgICB9CiAgICAg
ICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ251bWJlcicpCiAgICAgICAgICAgIHRlc3RSZXN1bHRz
W3Rlc3RdLnB1c2goW2luZGV4LCByZXN1bHRdKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
dGVzdFJlc3VsdHNbdGVzdF0ucHVzaChbaW5kZXgsIHJlc3VsdFsnYXZnJ11dKTsKICAgICAgICAg
ICAgaWYgKCdtaW4nIGluIHJlc3VsdCkKICAgICAgICAgICAgICAgIHRlc3RSZXN1bHRzTWluW3Rl
c3RdLnB1c2goW2luZGV4LCByZXN1bHRbJ21pbiddXSk7CiAgICAgICAgICAgIGlmICgnbWF4JyBp
biByZXN1bHQpCiAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0c01heFt0ZXN0XS5wdXNoKFtpbmRl
eCwgcmVzdWx0WydtYXgnXV0pOwogICAgICAgICAgICBpZiAoJ3N0ZGV2JyBpbiByZXN1bHQpIHsK
ICAgICAgICAgICAgICAgIHRlc3RSZXN1bHRzU3RkZXZMb3dbdGVzdF0ucHVzaChbaW5kZXgsIHJl
c3VsdFsnYXZnJ10gLSByZXN1bHRbJ3N0ZGV2J11dKTsKICAgICAgICAgICAgICAgIHRlc3RSZXN1
bHRzU3RkZXZIaWdoW3Rlc3RdLnB1c2goW2luZGV4LCByZXN1bHRbJ2F2ZyddICsgcmVzdWx0Wydz
dGRldiddXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGVzdFVuaXRzW3Rlc3Rd
ID0gcmVzdWx0LnVuaXQ7CiAgICB9KTsKfSk7CiQuZWFjaCh0ZXN0cy5zb3J0KCksIGZ1bmN0aW9u
IChpbmRleCwgdGVzdCkgeyBhdHRhY2hQbG90KHRlc3QpOyB9KTsKCjwvc2NyaXB0PgoKCjwvYm9k
eT48L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>