<?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>142712</bug_id>
          
          <creation_ts>2015-03-15 14:01:34 -0700</creation_ts>
          <short_desc>Web Inspector: Rename ConsoleMessage and ConsoleMessageImpl to LegacyConsoleMessage and LegacyConsoleMessageImpl respectively</short_desc>
          <delta_ts>2015-03-16 22:01:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>DoNotImportToRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>142718</dependson>
          <blocked>142599</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikita Vasilyev">nvasilyev</reporter>
          <assigned_to name="Nikita Vasilyev">nvasilyev</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>ossy</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1077260</commentid>
    <comment_count>0</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-15 14:01:34 -0700</bug_when>
    <thetext>As a first step of ConsoleMessage refactoring (https://bugs.webkit.org/show_bug.cgi?id=142599), rename ConsoleMessage and ConsoleMessageImpl to LegacyConsoleMessage and LegacyConsoleMessageImpl respectively.

Rename WebInspector.ConsoleMessage class to WebInspector.LegacyConsoleMessage.
Rename WebInspector.ConsoleMessageImpl class to WebInspector.LegacyConsoleMessageImpl.
Rename ConsoleMessage.js file to LegacyConsoleMessage.js.
Rename ConsoleMessageImpl file to LegacyConsoleMessageImpl.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077261</commentid>
    <comment_count>1</comment_count>
      <attachid>248685</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-15 14:08:05 -0700</bug_when>
    <thetext>Created attachment 248685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077275</commentid>
    <comment_count>2</comment_count>
      <attachid>248685</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-15 16:34:40 -0700</bug_when>
    <thetext>Comment on attachment 248685
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Main.html:309
&gt; -    &lt;script src=&quot;Views/ConsoleMessageImpl.js&quot;&gt;&lt;/script&gt;
&gt; +    &lt;script src=&quot;Views/LegacyConsoleMessageImpl.js&quot;&gt;&lt;/script&gt;

Technically this should be sorted, but it doesn&apos;t matter since it will be removed later.

&gt; Source/WebInspectorUI/WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:319
&gt; +    &lt;None Include=&quot;..\UserInterface\LegacyConsoleMessage.js&quot; /&gt;
&gt; +    &lt;None Include=&quot;..\UserInterface\LegacyConsoleMessageImpl.js&quot; /&gt;

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077282</commentid>
    <comment_count>3</comment_count>
      <attachid>248685</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-15 17:20:23 -0700</bug_when>
    <thetext>Comment on attachment 248685
Patch

Clearing flags on attachment: 248685

Committed r181517: &lt;http://trac.webkit.org/changeset/181517&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077283</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-15 17:20:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077293</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-15 17:58:42 -0700</bug_when>
    <thetext>Looks like you broke GTK+!

https://webkit-queues.appspot.com/results/5613271193223168</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077294</commentid>
    <comment_count>6</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-15 18:15:08 -0700</bug_when>
    <thetext>I searched via: ack -Q &apos;ConsoleMessageImpl.js&apos; and I couldn’t find any references to the old files inside the WebKit repository.

I’m not familiar with GTK build. Any idea what am I supposed to do fix this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077300</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-15 18:51:10 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 142718</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077481</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-16 11:14:23 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Re-opened since this is blocked by bug 142718

Actually, I think the GTK bot should just need a clean build. It is picking up a file in the derived sources that, after this patch, will no longer exist.

Unfortunately this did just get rolled out, so we can just roll it back in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077490</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-16 11:25:02 -0700</bug_when>
    <thetext>build error:
ninja: error: &apos;../../Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js&apos;, needed by &apos;DerivedSources/webkit2gtk/InspectorGResourceBundle.xml&apos;, missing and no known rule to make it

Ouch, you shouldn&apos;t have rolled out the patch, I already triggered 
clean build on the GTK bots long time ago and they were happy.

The problem is that the mechanism in GTK build system to determine
when should it rerun cmake to regenarate make/ninja files is buggy.
I noticed the same InspectorUI related incremental build issue 2-3
times in the near past. We should add make GTK build to run cmake
always if this part changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077492</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-16 11:28:36 -0700</bug_when>
    <thetext>&gt; Ouch, you shouldn&apos;t have rolled out the patch, I already triggered 
&gt; clean build on the GTK bots long time ago and they were happy.

Yeah, sorry. NVI came to me, I set the flag. We figured out what happened, I unset the flag, and moments later the commit-queue landed the patch. =(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077510</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-16 11:45:44 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; build error:
&gt; ninja: error:
&gt; &apos;../../Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js&apos;,
&gt; needed by &apos;DerivedSources/webkit2gtk/InspectorGResourceBundle.xml&apos;, missing
&gt; and no known rule to make it
&gt; 
&gt; Ouch, you shouldn&apos;t have rolled out the patch, I already triggered 
&gt; clean build on the GTK bots long time ago and they were happy.
&gt; 
&gt; The problem is that the mechanism in GTK build system to determine
&gt; when should it rerun cmake to regenarate make/ninja files is buggy.
&gt; I noticed the same InspectorUI related incremental build issue 2-3
&gt; times in the near past. We should add make GTK build to run cmake
&gt; always if this part changes.

I checked the bug in details. The problem is that the generated
InspectorGResourceBundle.xml depends on a non existent file (after rename).
In this case cmake should rerun to regenerate the makefile. Maybe an
additional check in webkitdirs.pm-shouldRemoveCMakeCache() could help.

http://trac.webkit.org/browser/trunk/Source/WebKit2/PlatformGTK.cmake#L559
http://trac.webkit.org/browser/trunk/Source/WebKit2/PlatformGTK.cmake#L406</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077512</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-03-16 11:47:00 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; build error:
&gt; ninja: error:
&gt; &apos;../../Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js&apos;,
&gt; needed by &apos;DerivedSources/webkit2gtk/InspectorGResourceBundle.xml&apos;, missing
&gt; and no known rule to make it
&gt; 
&gt; Ouch, you shouldn&apos;t have rolled out the patch, I already triggered 
&gt; clean build on the GTK bots long time ago and they were happy.
&gt; 
&gt; The problem is that the mechanism in GTK build system to determine
&gt; when should it rerun cmake to regenarate make/ninja files is buggy.
&gt; I noticed the same InspectorUI related incremental build issue 2-3
&gt; times in the near past. We should add make GTK build to run cmake
&gt; always if this part changes.

Yes, the problem is the use of wildcard characters in cmake that I never liked. We could just list all the files in the mkefile, but then everytime a new file is added to the inspector and not explicitly added to the cmake files, we will miss it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077517</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-16 11:55:34 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Yes, the problem is the use of wildcard characters in cmake that I never
&gt; liked. We could just list all the files in the mkefile, but then everytime a
&gt; new file is added to the inspector and not explicitly added to the cmake
&gt; files, we will miss it.

Or we could extract files from Source/WebInspectorUI/UserInterface/Main.html
with a simple cmake script (with an additional sanity check if the file
really exist and we didn&apos;t parsed a wrong thing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077616</commentid>
    <comment_count>14</comment_count>
      <attachid>248685</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-16 15:58:04 -0700</bug_when>
    <thetext>Comment on attachment 248685
Patch

Rejecting attachment 248685 from commit-queue.

nvasilyev@apple.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077626</commentid>
    <comment_count>15</comment_count>
      <attachid>248685</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-16 16:14:11 -0700</bug_when>
    <thetext>Comment on attachment 248685
Patch

Rejecting attachment 248685 from commit-queue.

nvasilyev@apple.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077713</commentid>
    <comment_count>16</comment_count>
      <attachid>248685</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-16 20:00:32 -0700</bug_when>
    <thetext>Comment on attachment 248685
Patch

Rejecting attachment 248685 from commit-queue.

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

ChangeLog entry in Source/WebInspectorUI/ChangeLog contains OOPS!.

Full output: http://webkit-queues.appspot.com/results/5388747482857472</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077714</commentid>
    <comment_count>17</comment_count>
      <attachid>248788</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-16 20:04:49 -0700</bug_when>
    <thetext>Created attachment 248788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077732</commentid>
    <comment_count>18</comment_count>
      <attachid>248788</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-16 20:56:53 -0700</bug_when>
    <thetext>Comment on attachment 248788
Patch

Clearing flags on attachment: 248788

Committed r181610: &lt;http://trac.webkit.org/changeset/181610&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077733</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-16 20:56:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077765</commentid>
    <comment_count>20</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-16 22:00:03 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; build error:
&gt; ninja: error:
&gt; &apos;../../Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js&apos;,
&gt; needed by &apos;DerivedSources/webkit2gtk/InspectorGResourceBundle.xml&apos;, missing
&gt; and no known rule to make it
&gt; 
&gt; Ouch, you shouldn&apos;t have rolled out the patch, I already triggered 
&gt; clean build on the GTK bots long time ago and they were happy.

This just landed again, and GTK bots need the clean build. Could you trigger it? (Am I able to trigger it?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077766</commentid>
    <comment_count>21</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-16 22:01:58 -0700</bug_when>
    <thetext>&gt; This just landed again, and GTK bots need the clean build. Could you trigger
&gt; it? (Am I able to trigger it?)

I think I just triggered it via the build pages:
https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Build%29

I did a &quot;Force Clean Build&quot; on the Debug and Release bots.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248685</attachid>
            <date>2015-03-15 14:08:05 -0700</date>
            <delta_ts>2015-03-16 20:04:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>93979</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGZjNjE1YzYuLjNiOTE1OTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDE1LTAzLTE1ICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbmFt
ZSBDb25zb2xlTWVzc2FnZSBhbmQgQ29uc29sZU1lc3NhZ2VJbXBsIHRvIExlZ2FjeUNvbnNvbGVN
ZXNzYWdlIGFuZCBMZWdhY3lDb25zb2xlTWVzc2FnZUltcGwgcmVzcGVjdGl2ZWx5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3MTIKKworICAgICAg
ICBBcyBhIGZpcnN0IHN0ZXAgb2YgQ29uc29sZU1lc3NhZ2UgcmVmYWN0b3JpbmcgKGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTkpOgorCisgICAgICAgICAgLSBS
ZW5hbWUgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlIGNsYXNzIHRvIFdlYkluc3BlY3Rvci5M
ZWdhY3lDb25zb2xlTWVzc2FnZQorICAgICAgICAgIC0gUmVuYW1lIFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZUltcGwgY2xhc3MgdG8gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdl
SW1wbAorICAgICAgICAgIC0gUmVuYW1lIENvbnNvbGVNZXNzYWdlLmpzIGZpbGUgdG8gTGVnYWN5
Q29uc29sZU1lc3NhZ2UuanMKKyAgICAgICAgICAtIFJlbmFtZSBDb25zb2xlTWVzc2FnZUltcGwg
ZmlsZSB0byBMZWdhY3lDb25zb2xlTWVzc2FnZUltcGwuanMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
SmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkph
dmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2FwcGVuZENvbnNvbGVNZXNzYWdl
KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01hbmFnZXIuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUubWVzc2FnZVdhc0FkZGVk
KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAgICAgKiBVc2VySW50
ZXJmYWNlL01vZGVscy9EZWZhdWx0RGFzaGJvYXJkLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkRlZmF1bHREYXNoYm9hcmQucHJvdG90eXBlLl9pbmNyZW1lbnRDb25zb2xlTWVzc2FnZVR5cGUp
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZUNvbW1hbmRSZXN1bHQuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0LnByb3RvdHlwZS50b01lc3NhZ2VFbGVt
ZW50KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVHcm91cC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlR3JvdXAucHJvdG90eXBlLnJlbmRlcik6CisgICAg
ICAgICogVXNlckludGVyZmFjZS9WaWV3cy9MZWdhY3lDb25zb2xlTWVzc2FnZS5qczogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVN
ZXNzYWdlLmpzLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5wcm90b3R5cGUuaXNF
cnJvck9yV2FybmluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3Nh
Z2UucHJvdG90eXBlLnVwZGF0ZVJlcGVhdENvdW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5M
ZWdhY3lDb25zb2xlTWVzc2FnZS5wcm90b3R5cGUuY2xvbmUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLmNyZWF0ZSk6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9WaWV3cy9MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwuanM6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZUltcGwuanMu
CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLl9mb3Jt
YXRNZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUlt
cGwucHJvdG90eXBlLl9zaG91bGREdW1wU3RhY2tUcmFjZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fc2hvdWxkSGlkZVVSTCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5f
Zmlyc3ROb25OYXRpdmVDYWxsRnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNv
bnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuZ2V0IG1lc3NhZ2UpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuZ2V0IGZvcm1hdHRlZE1l
c3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5w
cm90b3R5cGUuX2xpbmtpZnlMb2NhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5
Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fbGlua2lmeUNhbGxGcmFtZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5pc0Vycm9y
T3JXYXJuaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUlt
cGwucHJvdG90eXBlLl9mb3JtYXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNv
bGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX2lzRXhwYW5kYWJsZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fZm9ybWF0UGFyYW1ldGVy
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90
eXBlLl9mb3JtYXRQYXJhbWV0ZXJBc1ZhbHVlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlw
ZS5fZm9ybWF0UGFyYW1ldGVyQXNTdHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2Fj
eUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX2Zvcm1hdFBhcmFtZXRlckFzTm9kZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5f
Zm9ybWF0UGFyYW1ldGVyQXNBcnJheSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29u
c29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fcm9vdFByb3BlcnR5UGF0aEZvck9iamVjdCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5f
dXNlclByb3ZpZGVkQ29sdW1uTmFtZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNv
bnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX2Zvcm1hdFBhcmFtZXRlckFzVGFibGUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBl
LnN0cmluZ0Zvcm1hdHRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1l
c3NhZ2VJbXBsLnByb3RvdHlwZS5mbG9hdEZvcm1hdHRlcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5pbnRlZ2VyRm9ybWF0dGVyKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBl
LnN0eWxlRm9ybWF0dGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVz
c2FnZUltcGwucHJvdG90eXBlLmlzV2hpdGVsaXN0ZWRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5hcHBlbmQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX2Zv
cm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2Fj
eUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuZGVjb3JhdGVNZXNzYWdlRWxlbWVudCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS50
b01lc3NhZ2VFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVz
c2FnZUltcGwucHJvdG90eXBlLl9wb3B1bGF0ZVN0YWNrVHJhY2VUcmVlRWxlbWVudCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS51cGRh
dGVSZXBlYXRDb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3Nh
Z2VJbXBsLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5
Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5nZXQgdGV4dCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5pc0VxdWFsKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLmdldCBz
dGFja1RyYWNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUlt
cGwucHJvdG90eXBlLmNsb25lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xl
TWVzc2FnZUltcGwucHJvdG90eXBlLmdldCBsZXZlbFN0cmluZyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5nZXQgY2xpcGJvYXJkUHJl
Zml4U3RyaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUlt
cGwucHJvdG90eXBlLnRvQ2xpcGJvYXJkU3RyaW5nKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L1ZpZXdzL0xvZ0NvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRl
bnRWaWV3LnByb3RvdHlwZS5kaWRBcHBlbmRDb25zb2xlTWVzc2FnZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9tZXNzYWdlQWRkZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fZmlsdGVyTWVzc2FnZXMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fcmVhcHBl
bmRQcm92aXNpb25hbE1lc3NhZ2VzKToKKyAgICAgICAgKiBXZWJJbnNwZWN0b3JVSS52Y3hwcm9q
L1dlYkluc3BlY3RvclVJLnZjeHByb2o6CisgICAgICAgICogV2ViSW5zcGVjdG9yVUkudmN4cHJv
ai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qLmZpbHRlcnM6CisKIDIwMTUtMDMtMTIgIEpvbm8gV2Vs
bHMgIDxqb25vd2VsbHNAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IERlYnVn
Z2VyIHNpZGViYXIgc2hvdWxkIGdyb3VwIGdsb2JhbCBicmVha3BvaW50cyB0b2dldGhlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
SmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzCmlu
ZGV4IGI0ZDE2MmMuLjVjMmIxMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZh
U2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanMKQEAgLTI3NiwxMiArMjc2LDEyIEBAIFdlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICBp
ZiAoIXJlcGVhdENvdW50V2FzSW50ZXJydXB0ZWQpCiAgICAgICAgICAgICB0aGlzLl9wcmV2aW91
c01lc3NhZ2UgPSBtc2c7CiAKLSAgICAgICAgaWYgKG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRW5kR3JvdXApIHsKKyAgICAgICAgaWYgKG1zZy50
eXBlID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRW5k
R3JvdXApIHsKICAgICAgICAgICAgIHZhciBwYXJlbnRHcm91cCA9IHRoaXMuX2N1cnJlbnRDb25z
b2xlR3JvdXAucGFyZW50R3JvdXA7CiAgICAgICAgICAgICBpZiAocGFyZW50R3JvdXApCiAgICAg
ICAgICAgICAgICAgdGhpcy5fY3VycmVudENvbnNvbGVHcm91cCA9IHBhcmVudEdyb3VwOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cCB8fCBtc2cudHlwZSA9PT0gV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQp
IHsKKyAgICAgICAgICAgIGlmIChtc2cudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXAgfHwgbXNnLnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2Vk
KSB7CiAgICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xl
R3JvdXAodGhpcy5fY3VycmVudENvbnNvbGVHcm91cCk7CiAgICAgICAgICAgICAgICAgdmFyIGdy
b3VwRWxlbWVudCA9IGdyb3VwLnJlbmRlcihtc2cpOwogICAgICAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnRDb25zb2xlR3JvdXAuYXBwZW5kKGdyb3VwRWxlbWVudCk7CkBAIC0yOTAsNyArMjkwLDcg
QEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENvbnNvbGVHcm91cC5hZGRNZXNzYWdlKG1z
Zyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobXNnLnR5cGUgPT09IFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQgfHwgd2FzU2Nyb2xsZWRUb0JvdHRvbSkK
KyAgICAgICAgaWYgKG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUuUmVzdWx0IHx8IHdhc1Njcm9sbGVkVG9Cb3R0b20pCiAgICAgICAgICAg
ICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7CiAKICAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUgJiYg
dHlwZW9mIHRoaXMuZGVsZWdhdGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UgPT09ICJmdW5jdGlv
biIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9Mb2dNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvTG9nTWFuYWdlci5qcwppbmRleCBhMDlkMzBmLi5kOGY4ZGJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9M
b2dNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0xvZ01hbmFnZXIuanMKQEAgLTQ4LDcgKzQ4LDcgQEAgV2ViSW5zcGVjdG9yLkxv
Z01hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0
b3IuQ29uc29sZU9ic2VydmVyLgogCiAgICAgICAgIC8vIEZJWE1FOiBQYXNzIGEgcmVxdWVzdC4g
V2UgbmVlZCBhIHdheSB0byBnZXQgaXQgZnJvbSB0aGUgcmVxdWVzdCBJRC4KLSAgICAgICAgdmFy
IGNvbnNvbGVNZXNzYWdlID0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLmNyZWF0ZShzb3Vy
Y2UsIGxldmVsLCB0ZXh0LCB0eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBh
cmFtZXRlcnMsIHN0YWNrVHJhY2UsIG51bGwpOworICAgICAgICB2YXIgY29uc29sZU1lc3NhZ2Ug
PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuY3JlYXRlKHNvdXJjZSwgbGV2ZWws
IHRleHQsIHR5cGUsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCwgcGFyYW1ldGVycywg
c3RhY2tUcmFjZSwgbnVsbCk7CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQuTWVzc2FnZUFkZGVkLCB7bWVzc2FnZTog
Y29uc29sZU1lc3NhZ2V9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTWFpbi5odG1sCmluZGV4IDM3M2I2ZmMuLjAwMmU1ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKQEAgLTI5MSw3ICsyOTEsNyBAQAogICAg
IDxzY3JpcHQgc3JjPSJNb2RlbHMvVHlwZVNldC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9Ik1vZGVscy9Vbml0QmV6aWVyLmpzIj48L3NjcmlwdD4KIAotICAgIDxzY3JpcHQgc3JjPSJW
aWV3cy9Db25zb2xlTWVzc2FnZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdz
L0xlZ2FjeUNvbnNvbGVNZXNzYWdlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmll
d3MvQ29udGVudFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9EYXRh
R3JpZC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0RldGFpbHNTZWN0aW9u
Um93LmpzIj48L3NjcmlwdD4KQEAgLTMwNiw3ICszMDYsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJW
aWV3cy9UcmVlT3V0bGluZS5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iVmlld3Mv
QnV0dG9uTmF2aWdhdGlvbkl0ZW0uanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJWaWV3
cy9Db25zb2xlTWVzc2FnZUltcGwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaWV3
cy9MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJWaWV3cy9ET01UcmVlQ29udGVudFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJWaWV3cy9EZXRhaWxzU2lkZWJhclBhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iVmlld3MvR2VuZXJhbFRyZWVFbGVtZW50LmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9EZWZhdWx0RGFzaGJvYXJk
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RlZmF1bHRE
YXNoYm9hcmQuanMKaW5kZXggMDI3MTMwZi4uZjEwNGRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RlZmF1bHREYXNoYm9hcmQuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RlZmF1bHREYXNo
Ym9hcmQuanMKQEAgLTI0OSwxMyArMjQ5LDEzIEBAIFdlYkluc3BlY3Rvci5EZWZhdWx0RGFzaGJv
YXJkLnByb3RvdHlwZSA9IHsKICAgICBfaW5jcmVtZW50Q29uc29sZU1lc3NhZ2VUeXBlOiBmdW5j
dGlvbih0eXBlLCBpbmNyZW1lbnQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZzoK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxl
dmVsLkxvZzoKICAgICAgICAgICAgIHRoaXMubG9ncyArPSBpbmNyZW1lbnQ7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZUxldmVsLldhcm5pbmc6CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgogICAgICAgICAgICAgdGhpcy5pc3N1ZXMgKz0g
aW5jcmVtZW50OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKKyAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgogICAgICAgICAg
ICAgdGhpcy5lcnJvcnMgKz0gaW5jcmVtZW50OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvQ29uc29sZUNvbW1hbmRSZXN1bHQuanMKaW5kZXggODJiMDg5OC4uZTdjMGY1
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
Q29uc29sZUNvbW1hbmRSZXN1bHQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvQ29uc29sZUNvbW1hbmRSZXN1bHQuanMKQEAgLTI5LDE0ICsyOSwxNCBA
QAogCiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQgPSBmdW5jdGlvbihyZXN1bHQs
IHdhc1Rocm93biwgb3JpZ2luYXRpbmdDb21tYW5kLCBzYXZlZFJlc3VsdEluZGV4KQogewotICAg
IHZhciBsZXZlbCA9ICh3YXNUaHJvd24gPyBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZUxldmVsLkVycm9yIDogV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZl
bC5Mb2cpOworICAgIHZhciBsZXZlbCA9ICh3YXNUaHJvd24gPyBXZWJJbnNwZWN0b3IuTGVnYWN5
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yIDogV2ViSW5zcGVjdG9yLkxlZ2FjeUNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2cpOwogICAgIHRoaXMub3JpZ2luYXRpbmdDb21t
YW5kID0gb3JpZ2luYXRpbmdDb21tYW5kOwogICAgIHRoaXMuc2F2ZWRSZXN1bHRJbmRleCA9IHNh
dmVkUmVzdWx0SW5kZXg7CiAKICAgICBpZiAodGhpcy5zYXZlZFJlc3VsdEluZGV4ICYmIHRoaXMu
c2F2ZWRSZXN1bHRJbmRleCA+IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5tYXhp
bXVtU2F2ZWRSZXN1bHRJbmRleCkKICAgICAgICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5k
UmVzdWx0Lm1heGltdW1TYXZlZFJlc3VsdEluZGV4ID0gdGhpcy5zYXZlZFJlc3VsdEluZGV4Owog
Ci0gICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5jYWxsKHRoaXMsIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTLCBsZXZlbCwgIiIsIG51bGwsIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQsIHVuZGVmaW5lZCwg
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgW3Jlc3VsdF0pOworICAgIFdlYkluc3Bl
Y3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUywgbGV2ZWwsICIiLCBudWxsLCBXZWJJ
bnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVzdWx0LCB1bmRlZmlu
ZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFtyZXN1bHRdKTsKIH07CiAKIFdl
Ykluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5tYXhpbXVtU2F2ZWRSZXN1bHRJbmRleCA9
IDA7CkBAIC01NSw3ICs1NSw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5w
cm90b3R5cGUgPSB7CiAKICAgICB0b01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICB2YXIgZWxlbWVudCA9IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJv
dG90eXBlLnRvTWVzc2FnZUVsZW1lbnQuY2FsbCh0aGlzKTsKKyAgICAgICAgdmFyIGVsZW1lbnQg
PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS50b01lc3Nh
Z2VFbGVtZW50LmNhbGwodGhpcyk7CiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29u
c29sZS11c2VyLWNvbW1hbmQtcmVzdWx0Iik7CiAgICAgICAgIGlmICghZWxlbWVudC5nZXRBdHRy
aWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiKSkKICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmli
dXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPdXRwdXQ6ICIp
KTsKQEAgLTY4LDQgKzY4LDQgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0LnBy
b3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1
bHQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwu
cHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0LnByb3RvdHlwZS5f
X3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlw
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0NvbnNvbGVHcm91cC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0NvbnNvbGVHcm91cC5qcwppbmRleCA3OWViNTRlLi4wZDUyNTc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlR3JvdXAuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZUdy
b3VwLmpzCkBAIC01MCw3ICs1MCw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlR3JvdXAucHJvdG90
eXBlID0gewogICAgICAgICB0aXRsZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3Iu
TG9nQ29udGVudFZpZXcuSXRlbVdyYXBwZXJTdHlsZUNsYXNzTmFtZSk7CiAgICAgICAgIHRpdGxl
RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RpdGxlQ2xpY2tlZC5iaW5k
KHRoaXMpKTsKICAgICAgICAgdGl0bGVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93
biIsIHRoaXMuX3RpdGxlTW91c2VEb3duLmJpbmQodGhpcykpOwotICAgICAgICBpZiAoZ3JvdXBF
bGVtZW50ICYmIG1lc3NhZ2UudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQpCisgICAgICAgIGlmIChncm91cEVsZW1lbnQg
JiYgbWVzc2FnZS50eXBlID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVz
c2FnZVR5cGUuU3RhcnRHcm91cENvbGxhcHNlZCkKICAgICAgICAgICAgIGdyb3VwRWxlbWVudC5j
bGFzc0xpc3QuYWRkKCJjb2xsYXBzZWQiKTsKIAogICAgICAgICBncm91cEVsZW1lbnQuYXBwZW5k
Q2hpbGQodGl0bGVFbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVNZXNzYWdlLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2UuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwYWNkODIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2UuanMKKysrIC9kZXYvbnVsbApA
QCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9z
ZXBoIFBlY29yYXJvCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UgPSBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCB1
cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQpCi17Ci0gICAgdGhpcy5zb3VyY2UgPSBzb3Vy
Y2U7Ci0gICAgdGhpcy5sZXZlbCA9IGxldmVsOwotICAgIHRoaXMudXJsID0gdXJsIHx8IG51bGw7
Ci0gICAgdGhpcy5saW5lID0gbGluZSB8fCAwOwotICAgIHRoaXMuY29sdW1uID0gY29sdW1uIHx8
IDA7Ci0KLSAgICByZXBlYXRDb3VudCA9IHJlcGVhdENvdW50IHx8IDE7Ci0gICAgdGhpcy5yZXBl
YXRDb3VudCA9IHJlcGVhdENvdW50OwotICAgIHRoaXMucmVwZWF0RGVsdGEgPSByZXBlYXRDb3Vu
dDsKLSAgICB0aGlzLnRvdGFsUmVwZWF0Q291bnQgPSByZXBlYXRDb3VudDsKLX07Ci0KLVdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUgPSB7Ci0gICAgaXNFcnJvck9yV2Fybmlu
ZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLmxldmVsID09PSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmcgfHwgdGhpcy5sZXZl
bCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcik7Ci0g
ICAgfSwKLQotICAgIHVwZGF0ZVJlcGVhdENvdW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICAvLyBJbXBsZW1lbnRlZCBieSBjb25jcmV0ZSBpbnN0YW5jZXMKLSAgICB9LAotCi0gICAgY2xv
bmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IGNvbmNyZXRl
IGluc3RhbmNlcwotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVh
dGUgPSBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCB0eXBlLCB1cmwsIGxpbmUsIGNv
bHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNrVHJhY2UsIHJlcXVlc3QpCi17Ci0g
ICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsKHNvdXJjZSwgbGV2
ZWwsIG1lc3NhZ2UsIG51bGwsIHR5cGUsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCwg
cGFyYW1ldGVycywgc3RhY2tUcmFjZSwgcmVxdWVzdCk7Ci19OwotCi0vLyBGSVhNRTogU3dpdGNo
IHRvIENvbnNvbGVBZ2VudC5Db25zb2xlTWVzc2FnZVNvdXJjZS4KLVdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlU291cmNlID0gewotICAgIEhUTUw6ICJodG1sIiwKLSAgICBYTUw6
ICJ4bWwiLAotICAgIEpTOiAiamF2YXNjcmlwdCIsCi0gICAgTmV0d29yazogIm5ldHdvcmsiLAot
ICAgIENvbnNvbGVBUEk6ICJjb25zb2xlLWFwaSIsCi0gICAgT3RoZXI6ICJvdGhlciIKLX07Ci0K
LS8vIEZJWE1FOiBTd2l0Y2ggdG8gQ29uc29sZUFnZW50LkNvbnNvbGVNZXNzYWdlVHlwZS4KLVdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZSA9IHsKLSAgICBMb2c6ICJsb2ci
LAotICAgIERpcjogImRpciIsCi0gICAgRGlyWE1MOiAiZGlyeG1sIiwKLSAgICBUYWJsZTogInRh
YmxlIiwKLSAgICBUcmFjZTogInRyYWNlIiwKLSAgICBTdGFydEdyb3VwOiAic3RhcnRHcm91cCIs
Ci0gICAgU3RhcnRHcm91cENvbGxhcHNlZDogInN0YXJ0R3JvdXBDb2xsYXBzZWQiLAotICAgIEVu
ZEdyb3VwOiAiZW5kR3JvdXAiLAotICAgIEFzc2VydDogImFzc2VydCIsCi0gICAgUmVzdWx0OiAi
cmVzdWx0IgotfTsKLQotLy8gRklYTUU6IFN3aXRjaCB0byBDb25zb2xlQWdlbnQuQ29uc29sZU1l
c3NhZ2VMZXZlbC4KLVdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwgPSB7
Ci0gICAgVGlwOiAidGlwIiwKLSAgICBMb2c6ICJsb2ciLAotICAgIFdhcm5pbmc6ICJ3YXJuaW5n
IiwKLSAgICBFcnJvcjogImVycm9yIiwKLSAgICBEZWJ1ZzogImRlYnVnIgotfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVNZXNz
YWdlSW1wbC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0Nv
bnNvbGVNZXNzYWdlSW1wbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y0Njk3
NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9Db25zb2xlTWVzc2FnZUltcGwuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4MDEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybwotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlSW1wbCA9IGZ1bmN0aW9uKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmtp
ZmllciwgdHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBwYXJhbWV0ZXJzLCBz
dGFja1RyYWNlLCByZXF1ZXN0KQotewotICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5j
YWxsKHRoaXMsIHNvdXJjZSwgbGV2ZWwsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCk7
Ci0KLSAgICB0aGlzLl9saW5raWZpZXIgPSBsaW5raWZpZXI7Ci0gICAgdGhpcy50eXBlID0gdHlw
ZSB8fCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nOwotICAgIHRo
aXMuX21lc3NhZ2VUZXh0ID0gbWVzc2FnZTsKLSAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1l
dGVyczsKLSAgICB0aGlzLl9zdGFja1RyYWNlID0gc3RhY2tUcmFjZTsKLSAgICB0aGlzLl9yZXF1
ZXN0ID0gcmVxdWVzdDsKLQotICAgIHRoaXMuX2N1c3RvbUZvcm1hdHRlcnMgPSB7Ci0gICAgICAg
ICJvYmplY3QiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKLSAgICAgICAgImVycm9y
IjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCi0gICAgICAgICJtYXAiOiB0aGlzLl9m
b3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKLSAgICAgICAgInNldCI6IHRoaXMuX2Zvcm1hdFBhcmFt
ZXRlckFzT2JqZWN0LAotICAgICAgICAid2Vha21hcCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFz
T2JqZWN0LAotICAgICAgICAiaXRlcmF0b3IiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVj
dCwKLSAgICAgICAgImFycmF5IjogIHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzQXJyYXksCi0gICAg
ICAgICJub2RlIjogICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc05vZGUsCi0gICAgICAgICJzdHJp
bmciOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1N0cmluZwotICAgIH07Ci19OwotCi1XZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZSA9IHsKLQotICAgIGVuZm9yY2VzQ2xp
cGJvYXJkUHJlZml4U3RyaW5nOiB0cnVlLAotCi0gICAgX2Zvcm1hdE1lc3NhZ2U6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuY2xhc3NO
YW1lID0gImNvbnNvbGUtbWVzc2FnZS10ZXh0IjsKLQotICAgICAgICB2YXIgbWVzc2FnZVRleHQ7
Ci0gICAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VTb3VyY2UuQ29uc29sZUFQSSkgewotICAgICAgICAgICAgc3dpdGNoICh0aGlzLnR5
cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlVHlwZS5UcmFjZToKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSBkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgiY29uc29sZS50cmFjZSgpIik7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VUeXBlLkFzc2VydDoKLSAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBb
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBc3NlcnRpb24gZmFpbGVkOiIpXTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuX3BhcmFtZXRlcnMpCi0gICAgICAgICAgICAgICAgICAgICAgICBh
cmdzID0gYXJncy5jb25jYXQodGhpcy5fcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0KGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlVHlwZS5EaXI6Ci0gICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9wYXJh
bWV0ZXJzID8gdGhpcy5fcGFyYW1ldGVyc1swXSA6IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGFyZ3MgPSBbIiVPIiwgb2JqXTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZVRleHQgPSB0aGlzLl9mb3JtYXQoYXJncyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0g
dGhpcy5fcGFyYW1ldGVycyB8fCBbdGhpcy5fbWVzc2FnZVRleHRdOwotICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yaykgewotICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVl
c3QpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdGFja1RyYWNlID0gdGhpcy5fcmVxdWVzdC5z
dGFja1RyYWNlOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0LmluaXRpYXRvciAm
JiB0aGlzLl9yZXF1ZXN0LmluaXRpYXRvci51cmwpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy51cmwgPSB0aGlzLl9yZXF1ZXN0LmluaXRpYXRvci51cmw7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMubGluZSA9IHRoaXMuX3JlcXVlc3QuaW5pdGlhdG9yLmxpbmVOdW1iZXI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLmxldmVsID09PSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2VUZXh0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHRoaXMuX3JlcXVlc3QucmVxdWVzdE1ldGhvZCArICIgIikpOwotICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVJlcXVlc3RBc05v
ZGUodGhpcy5fcmVxdWVzdCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVz
dC5mYWlsZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIgKyB0aGlzLl9yZXF1ZXN0LmxvY2FsaXplZEZh
aWxEZXNjcmlwdGlvbikpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgiICIgKyB0aGlzLl9yZXF1ZXN0LnN0YXR1c0NvZGUgKyAiICgiICsgdGhpcy5fcmVxdWVzdC5z
dGF0dXNUZXh0ICsgIikiKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGZyYWdtZW50ID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdt
ZW50V2l0aEN1c3RvbUxpbmtpZmllcih0aGlzLl9tZXNzYWdlVGV4dCwgV2ViSW5zcGVjdG9yLmxp
bmtpZnlSZXF1ZXN0QXNOb2RlLmJpbmQobnVsbCwgdGhpcy5fcmVxdWVzdCwgIiIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRo
aXMudXJsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhbmNob3IgPSBXZWJJbnNwZWN0b3Iu
bGlua2lmeVVSTEFzTm9kZSh0aGlzLnVybCwgdGhpcy51cmwsICJjb25zb2xlLW1lc3NhZ2UtdXJs
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hp
bGQoYW5jaG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVzc2FnZVRl
eHQgPSB0aGlzLl9mb3JtYXQoW3RoaXMuX21lc3NhZ2VUZXh0XSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgYXJncyA9IHRoaXMuX3BhcmFtZXRlcnMg
fHwgW3RoaXMuX21lc3NhZ2VUZXh0XTsKLSAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5f
Zm9ybWF0KGFyZ3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuc291cmNlICE9PSBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5OZXR3b3JrIHx8IHRoaXMu
X3JlcXVlc3QpIHsKLSAgICAgICAgICAgIHZhciBmaXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSA9IHRo
aXMuX2ZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICBpZiAoZmlyc3ROb25O
YXRpdmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMu
X2xpbmtpZnlDYWxsRnJhbWUoZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUpOwotICAgICAgICAgICAg
ICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXJsICYmICF0aGlzLl9zaG91bGRIaWRlVVJMKHRoaXMu
dXJsKSkgewotICAgICAgICAgICAgICAgIHZhciB1cmxFbGVtZW50ID0gdGhpcy5fbGlua2lmeUxv
Y2F0aW9uKHRoaXMudXJsLCB0aGlzLmxpbmUsIHRoaXMuY29sdW1uKTsKLSAgICAgICAgICAgICAg
ICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBl
bmRDaGlsZChtZXNzYWdlVGV4dCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuc2F2ZWRSZXN1bHRJbmRl
eCkgewotICAgICAgICAgICAgdmFyIHNhdmVkVmFyaWFibGVFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgc2F2ZWRWYXJpYWJsZUVsZW1lbnQuY2xh
c3NOYW1lID0gImNvbnNvbGUtc2F2ZWQtdmFyaWFibGUiOwotICAgICAgICAgICAgc2F2ZWRWYXJp
YWJsZUVsZW1lbnQudGV4dENvbnRlbnQgPSAiID0gJCIgKyB0aGlzLnNhdmVkUmVzdWx0SW5kZXg7
Ci0gICAgICAgICAgICBpZiAodGhpcy5fb2JqZWN0VHJlZSkKLSAgICAgICAgICAgICAgICB0aGlz
Ll9vYmplY3RUcmVlLmFwcGVuZFRpdGxlU3VmZml4KHNhdmVkVmFyaWFibGVFbGVtZW50KTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFw
cGVuZENoaWxkKHNhdmVkVmFyaWFibGVFbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICh0aGlzLl9zaG91bGREdW1wU3RhY2tUcmFjZSgpKSB7Ci0gICAgICAgICAgICB2YXIgb2wgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOwotICAgICAgICAgICAgb2wuY2xhc3NOYW1lID0g
Im91dGxpbmUtZGlzY2xvc3VyZSI7Ci0gICAgICAgICAgICB2YXIgdHJlZU91dGxpbmUgPSBuZXcg
VHJlZU91dGxpbmUob2wpOwotCi0gICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuX2Zvcm1h
dHRlZE1lc3NhZ2U7Ci0gICAgICAgICAgICB2YXIgcm9vdCA9IG5ldyBUcmVlRWxlbWVudChjb250
ZW50LCBudWxsLCB0cnVlKTsKLSAgICAgICAgICAgIGNvbnRlbnQudHJlZUVsZW1lbnRGb3JUZXN0
ID0gcm9vdDsKLSAgICAgICAgICAgIHRyZWVPdXRsaW5lLmFwcGVuZENoaWxkKHJvb3QpOwotICAg
ICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VUeXBlLlRyYWNlKQotICAgICAgICAgICAgICAgIHJvb3QuZXhwYW5kKCk7Ci0KLSAgICAg
ICAgICAgIHRoaXMuX3BvcHVsYXRlU3RhY2tUcmFjZVRyZWVFbGVtZW50KHJvb3QpOwotICAgICAg
ICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZSA9IG9sOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gVGhpcyBpcyB1c2VkIGZvciBpbmxpbmUgbWVzc2FnZSBidWJibGVzIGluIFNvdXJjZUZyYW1l
cywgb3Igb3RoZXIgcGxhaW4tdGV4dCByZXByZXNlbnRhdGlvbnMuCi0gICAgICAgIHRoaXMuX21l
c3NhZ2UgPSBtZXNzYWdlVGV4dC50ZXh0Q29udGVudDsKLSAgICB9LAotCi0gICAgX3Nob3VsZER1
bXBTdGFja1RyYWNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gISF0aGlzLl9z
dGFja1RyYWNlICYmIHRoaXMuX3N0YWNrVHJhY2UubGVuZ3RoICYmICh0aGlzLnNvdXJjZSA9PT0g
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yayB8fCB0aGlz
LmxldmVsID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9y
IHx8IHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBl
LlRyYWNlKTsKLSAgICB9LAotCi0gICAgX3Nob3VsZEhpZGVVUkw6IGZ1bmN0aW9uKHVybCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB1cmwgPT09ICJ1bmRlZmluZWQiIHx8IHVybCA9PT0gIltuYXRp
dmUgY29kZV0iOwotICAgIH0sCi0KLSAgICBfZmlyc3ROb25OYXRpdmVDYWxsRnJhbWU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc3RhY2tUcmFjZSkKLSAgICAgICAgICAg
IHJldHVybiBudWxsOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc3RhY2tU
cmFjZS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5fc3RhY2tU
cmFjZVtpXTsKLSAgICAgICAgICAgIGlmICghZnJhbWUudXJsIHx8IGZyYW1lLnVybCA9PT0gIltu
YXRpdmUgY29kZV0iKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmV0
dXJuIGZyYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQot
ICAgIGdldCBtZXNzYWdlKCkKLSAgICB7Ci0gICAgICAgIC8vIGZvcmNlIG1lc3NhZ2UgZm9ybWF0
dGluZwotICAgICAgICB2YXIgZm9ybWF0dGVkTWVzc2FnZSA9IHRoaXMuZm9ybWF0dGVkTWVzc2Fn
ZTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7Ci0gICAgfSwKLQotICAgIGdldCBmb3Jt
YXR0ZWRNZXNzYWdlKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZm9ybWF0dGVkTWVzc2Fn
ZSkKLSAgICAgICAgICAgIHRoaXMuX2Zvcm1hdE1lc3NhZ2UoKTsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX2Zvcm1hdHRlZE1lc3NhZ2U7Ci0gICAgfSwKLQotICAgIF9saW5raWZ5TG9jYXRpb246IGZ1
bmN0aW9uKHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgLy8g
Q29uc29sZU1lc3NhZ2Ugc3RhY2sgdHJhY2UgbGluZSBudW1iZXJzIGFyZSBvbmUtYmFzZWQuCi0g
ICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyID8gbGluZU51bWJlciAtIDEgOiAwOwotICAg
ICAgICBjb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXIgPyBjb2x1bW5OdW1iZXIgLSAxIDogMDsK
LQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmxpbmtpZnlMb2NhdGlvbih1cmwsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgImNvbnNvbGUtbWVzc2FnZS11cmwiKTsKLSAgICB9LAotCi0g
ICAgX2xpbmtpZnlDYWxsRnJhbWU6IGZ1bmN0aW9uKGNhbGxGcmFtZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9saW5raWZ5TG9jYXRpb24oY2FsbEZyYW1lLnVybCwgY2FsbEZyYW1lLmxp
bmVOdW1iZXIsIGNhbGxGcmFtZS5jb2x1bW5OdW1iZXIpOwotICAgIH0sCi0KLSAgICBpc0Vycm9y
T3JXYXJuaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gKHRoaXMubGV2ZWwg
PT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZyB8fCB0
aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVy
cm9yKTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdDogZnVuY3Rpb24ocGFyYW1ldGVycykKLSAgICB7
Ci0gICAgICAgIC8vIFRoaXMgbm9kZSBpcyB1c2VkIGxpa2UgYSBCdWlsZGVyLiBWYWx1ZXMgYXJl
IGNvbnRpbnVhbGx5IGFwcGVuZGVkIG9udG8gaXQuCi0gICAgICAgIHZhciBmb3JtYXR0ZWRSZXN1
bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGlmICghcGFyYW1l
dGVycy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OwotCi0gICAg
ICAgIC8vIEZvcm1hdHRpbmcgY29kZSBiZWxvdyBhc3N1bWVzIHRoYXQgcGFyYW1ldGVycyBhcmUg
YWxsIHdyYXBwZXJzIHdoZXJlYXMgZnJvbnRlbmQgY29uc29sZQotICAgICAgICAvLyBBUEkgYWxs
b3dzIHBhc3NpbmcgYXJiaXRyYXJ5IHZhbHVlcyBhcyBtZXNzYWdlcyAoc3RyaW5ncywgbnVtYmVy
cywgZXRjLikuIFdyYXAgdGhlbSBoZXJlLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBh
cmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPbmx5IHBhc3Mg
cnVudGltZSB3cmFwcGVycyBoZXJlLgotICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNbaV0gaW5z
dGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnNbaV0gPT09ICJvYmplY3Qi
KQotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbaV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2Jq
ZWN0LmZyb21QYXlsb2FkKHBhcmFtZXRlcnNbaV0pOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnNbaV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21Q
cmltaXRpdmVWYWx1ZShwYXJhbWV0ZXJzW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRo
ZXJlIGNhbiBiZSBzdHJpbmcgbG9nIGFuZCBzdHJpbmcgZXZhbCByZXN1bHQuIFdlIGRpc3Rpbmd1
aXNoIGJldHdlZW4gdGhlbSBiYXNlZCBvbiBtZXNzYWdlIHR5cGUuCi0gICAgICAgIHZhciBzaG91
bGRGb3JtYXRNZXNzYWdlID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC50eXBlKHBhcmFtZXRl
cnNbMF0pID09PSAic3RyaW5nIiAmJiB0aGlzLnR5cGUgIT09IFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQ7Ci0KLSAgICAgICAgaWYgKHNob3VsZEZvcm1hdE1l
c3NhZ2UpIHsKLSAgICAgICAgICAgIC8vIE11bHRpcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmly
c3QgYmVpbmcgYSBmb3JtYXQgc3RyaW5nLiBTYXZlIHVudXNlZCBzdWJzdGl0dXRpb25zLgotICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmco
cGFyYW1ldGVycywgZm9ybWF0dGVkUmVzdWx0KTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBy
ZXN1bHQudW51c2VkU3Vic3RpdHV0aW9uczsKLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmxl
bmd0aCkKLSAgICAgICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy50
eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVGFibGUpIHsK
LSAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJh
bWV0ZXJBc1RhYmxlKHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRS
ZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyLCBvciB1bnVz
ZWQgc3Vic3RpdHV0aW9ucyBmcm9tIGFib3ZlLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIC8vIElubGluZSBzdHJpbmdz
IHdoZW4gZm9ybWF0dGluZy4KLSAgICAgICAgICAgIGlmIChzaG91bGRGb3JtYXRNZXNzYWdlICYm
IHBhcmFtZXRlcnNbaV0udHlwZSA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgICAgICAgICB2YXIg
c3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgICAgICBz
cGFuLmNsYXNzTGlzdC5hZGQoInR5cGUtc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgc3Bhbi50
ZXh0Q29udGVudCA9IHBhcmFtZXRlcnNbaV0uZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAg
Zm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKHNwYW4pOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBh
cmFtZXRlcihwYXJhbWV0ZXJzW2ldLCBmYWxzZSkpOwotCi0gICAgICAgICAgICBpZiAoaSA8IHBh
cmFtZXRlcnMubGVuZ3RoIC0gMSAmJiAhdGhpcy5faXNFeHBhbmRhYmxlKHBhcmFtZXRlcnNbaV0p
KQotICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgiICIpKTsKLQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmb3JtYXR0
ZWRSZXN1bHQ7Ci0gICAgfSwKLQotICAgIF9pc0V4cGFuZGFibGU6IGZ1bmN0aW9uKHJlbW90ZU9i
amVjdCkgewotICAgICAgICBpZiAoIXJlbW90ZU9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAocmVtb3RlT2JqZWN0Lmhhc0NoaWxkcmVuICYmIHJlbW90ZU9i
amVjdC5wcmV2aWV3ICYmIHJlbW90ZU9iamVjdC5wcmV2aWV3Lmxvc3NsZXNzKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiByZW1vdGVPYmplY3QuaGFzQ2hpbGRy
ZW47Ci0gICAgfSwKLQotICAgIF9mb3JtYXRQYXJhbWV0ZXI6IGZ1bmN0aW9uKG91dHB1dCwgZm9y
Y2VPYmplY3RGb3JtYXQpCi0gICAgewotICAgICAgICB2YXIgdHlwZTsKLSAgICAgICAgaWYgKGZv
cmNlT2JqZWN0Rm9ybWF0KQotICAgICAgICAgICAgdHlwZSA9ICJvYmplY3QiOwotICAgICAgICBl
bHNlIGlmIChvdXRwdXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KQotICAg
ICAgICAgICAgdHlwZSA9IG91dHB1dC5zdWJ0eXBlIHx8IG91dHB1dC50eXBlOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0eXBlID0gdHlwZW9mIG91dHB1dDsKLQotICAgICAgICB2YXIgZm9y
bWF0dGVyID0gdGhpcy5fY3VzdG9tRm9ybWF0dGVyc1t0eXBlXTsKLSAgICAgICAgaWYgKCFmb3Jt
YXR0ZXIpCi0gICAgICAgICAgICBmb3JtYXR0ZXIgPSB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1Zh
bHVlOwotCi0gICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OwotCi0gICAgICAgIGlmICh0aGlzLl9pc0V4cGFuZGFibGUob3V0cHV0KSkKLSAgICAgICAgICAg
IHNwYW4uY2xhc3NMaXN0LmFkZCgiZXhwYW5kYWJsZSIpOwotCi0gICAgICAgIGZvcm1hdHRlci5j
YWxsKHRoaXMsIG91dHB1dCwgc3BhbiwgZm9yY2VPYmplY3RGb3JtYXQpOwotICAgICAgICByZXR1
cm4gc3BhbjsKLSAgICB9LAotCi0gICAgX2Zvcm1hdFBhcmFtZXRlckFzVmFsdWU6IGZ1bmN0aW9u
KHZhbHVlLCBlbGVtKQotICAgIHsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0
b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvclJlbW90ZU9iamVjdCh2YWx1ZSkpOwot
ICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNPYmplY3Q6IGZ1bmN0aW9uKG9iaiwgZWxl
bSwgZm9yY2VFeHBhbnNpb24pCi0gICAgewotICAgICAgICB0aGlzLl9vYmplY3RUcmVlID0gbmV3
IFdlYkluc3BlY3Rvci5PYmplY3RUcmVlVmlldyhvYmosIFdlYkluc3BlY3Rvci5PYmplY3RUcmVl
Vmlldy5Nb2RlLlByb3BlcnRpZXMsIHRoaXMuX3Jvb3RQcm9wZXJ0eVBhdGhGb3JPYmplY3Qob2Jq
KSwgZm9yY2VFeHBhbnNpb24pOwotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRoaXMuX29iamVj
dFRyZWUuZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9mb3JtYXRQYXJhbWV0ZXJBc1N0cmluZzog
ZnVuY3Rpb24ob3V0cHV0LCBlbGVtKQotICAgIHsKLSAgICAgICAgdmFyIHNwYW4gPSBXZWJJbnNw
ZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlTGlua2lmaWVkRWxlbWVudFN0cmluZyhvdXRwdXQu
ZGVzY3JpcHRpb24pOwotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHNwYW4pOwotICAgIH0sCi0K
LSAgICBfZm9ybWF0UGFyYW1ldGVyQXNOb2RlOiBmdW5jdGlvbihvYmplY3QsIGVsZW0pCi0gICAg
ewotICAgICAgICB2YXIgc3BhbiA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVF
bGVtZW50Rm9yTm9kZShvYmplY3QpOwotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHNwYW4pOwot
ICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNBcnJheTogZnVuY3Rpb24oYXJyLCBlbGVt
KQotICAgIHsKLSAgICAgICAgdGhpcy5fb2JqZWN0VHJlZSA9IG5ldyBXZWJJbnNwZWN0b3IuT2Jq
ZWN0VHJlZVZpZXcoYXJyLCBXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcuTW9kZS5Qcm9wZXJ0
aWVzLCB0aGlzLl9yb290UHJvcGVydHlQYXRoRm9yT2JqZWN0KGFycikpOwotICAgICAgICBlbGVt
LmFwcGVuZENoaWxkKHRoaXMuX29iamVjdFRyZWUuZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9y
b290UHJvcGVydHlQYXRoRm9yT2JqZWN0OiBmdW5jdGlvbihvYmplY3QpCi0gICAgewotICAgICAg
ICBpZiAoIXRoaXMuc2F2ZWRSZXN1bHRJbmRleCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwot
Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb3BlcnR5UGF0aChvYmplY3QsICIk
IiArIHRoaXMuc2F2ZWRSZXN1bHRJbmRleCk7Ci0gICAgfSwKLQotICAgIF91c2VyUHJvdmlkZWRD
b2x1bW5OYW1lczogZnVuY3Rpb24oY29sdW1uTmFtZXNBcmd1bWVudCkKLSAgICB7Ci0gICAgICAg
IGlmICghY29sdW1uTmFtZXNBcmd1bWVudCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0g
ICAgICAgIHZhciByZW1vdGVPYmplY3QgPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21Q
YXlsb2FkKGNvbHVtbk5hbWVzQXJndW1lbnQpOwotCi0gICAgICAgIC8vIFNpbmdsZSBwcmltaXRp
dmUgYXJndW1lbnQuCi0gICAgICAgIGlmIChyZW1vdGVPYmplY3QudHlwZSA9PT0gInN0cmluZyIg
fHwgcmVtb3RlT2JqZWN0LnR5cGUgPT09ICJudW1iZXIiKQotICAgICAgICAgICAgcmV0dXJuIFtT
dHJpbmcoY29sdW1uTmFtZXNBcmd1bWVudC52YWx1ZSldOwotCi0gICAgICAgIC8vIElnbm9yZSBl
dmVyeXRoaW5nIHRoYXQgaXMgbm90IGFuIGFycmF5IHdpdGggcHJvcGVydHkgcHJldmlld3MuCi0g
ICAgICAgIGlmIChyZW1vdGVPYmplY3QudHlwZSAhPT0gIm9iamVjdCIgfHwgcmVtb3RlT2JqZWN0
LnN1YnR5cGUgIT09ICJhcnJheSIgfHwgIXJlbW90ZU9iamVjdC5wcmV2aWV3IHx8ICFyZW1vdGVP
YmplY3QucHJldmlldy5wcm9wZXJ0eVByZXZpZXdzKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7
Ci0KLSAgICAgICAgLy8gQXJyYXkuIExvb2sgaW50byB0aGUgcHJldmlldyBhbmQgZ2V0IHN0cmlu
ZyB2YWx1ZXMuCi0gICAgICAgIHZhciBleHRyYWN0ZWRDb2x1bW5OYW1lcyA9IFtdOwotICAgICAg
ICBmb3IgKHZhciBwcm9wZXJ0eVByZXZpZXcgb2YgcmVtb3RlT2JqZWN0LnByZXZpZXcucHJvcGVy
dHlQcmV2aWV3cykgewotICAgICAgICAgICAgaWYgKHByb3BlcnR5UHJldmlldy50eXBlID09PSAi
c3RyaW5nIiB8fCBwcm9wZXJ0eVByZXZpZXcudHlwZSA9PT0gIm51bWJlciIpCi0gICAgICAgICAg
ICAgICAgZXh0cmFjdGVkQ29sdW1uTmFtZXMucHVzaChTdHJpbmcocHJvcGVydHlQcmV2aWV3LnZh
bHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXh0cmFjdGVkQ29sdW1uTmFtZXMu
bGVuZ3RoID8gZXh0cmFjdGVkQ29sdW1uTmFtZXMgOiBudWxsOwotICAgIH0sCi0KLSAgICBfZm9y
bWF0UGFyYW1ldGVyQXNUYWJsZTogZnVuY3Rpb24ocGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAg
IHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICB2
YXIgdGFibGUgPSBwYXJhbWV0ZXJzWzBdOwotICAgICAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS5w
cmV2aWV3KQotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgICAgICAgdmFyIHJvd3Mg
PSBbXTsKLSAgICAgICAgdmFyIGNvbHVtbk5hbWVzID0gW107Ci0gICAgICAgIHZhciBmbGF0VmFs
dWVzID0gW107Ci0gICAgICAgIHZhciBwcmV2aWV3ID0gdGFibGUucHJldmlldzsKLSAgICAgICAg
dmFyIHVzZXJQcm92aWRlZENvbHVtbk5hbWVzID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gVXNlciBw
cm92aWRlZCBjb2x1bW5OYW1lcy4KLSAgICAgICAgdmFyIGV4dHJhY3RlZENvbHVtbk5hbWVzID0g
dGhpcy5fdXNlclByb3ZpZGVkQ29sdW1uTmFtZXMocGFyYW1ldGVyc1sxXSk7Ci0gICAgICAgIGlm
IChleHRyYWN0ZWRDb2x1bW5OYW1lcykgewotICAgICAgICAgICAgdXNlclByb3ZpZGVkQ29sdW1u
TmFtZXMgPSB0cnVlOwotICAgICAgICAgICAgY29sdW1uTmFtZXMgPSBleHRyYWN0ZWRDb2x1bW5O
YW1lczsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIGZpcnN0IGZvciB2YWx1ZVByZXZp
ZXdzIGluIHRoZSBwcm9wZXJ0aWVzIG1lYW5pbmcgdGhpcyB3YXMgYW4gYXJyYXkgb2Ygb2JqZWN0
cy4KLSAgICAgICAgaWYgKHByZXZpZXcucHJvcGVydHlQcmV2aWV3cykgewotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICB2YXIgcm93UHJvcGVydHkgPSBwcmV2aWV3LnByb3BlcnR5UHJl
dmlld3NbaV07Ci0gICAgICAgICAgICAgICAgdmFyIHJvd1ByZXZpZXcgPSByb3dQcm9wZXJ0eS52
YWx1ZVByZXZpZXc7Ci0gICAgICAgICAgICAgICAgaWYgKCFyb3dQcmV2aWV3KQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIHZhciByb3dWYWx1ZSA9IHt9
OwotICAgICAgICAgICAgICAgIGNvbnN0IG1heENvbHVtbnNUb1JlbmRlciA9IDEwOwotICAgICAg
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93UHJldmlldy5wcm9wZXJ0eVByZXZpZXdz
Lmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsUHJvcGVydHkgPSBy
b3dQcmV2aWV3LnByb3BlcnR5UHJldmlld3Nbal07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBj
b2x1bW5SZW5kZXJlZCA9IGNvbHVtbk5hbWVzLmNvbnRhaW5zKGNlbGxQcm9wZXJ0eS5uYW1lKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2x1bW5SZW5kZXJlZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHVzZXJQcm92aWRlZENvbHVtbk5hbWVzIHx8IGNvbHVtbk5hbWVzLmxl
bmd0aCA9PT0gbWF4Q29sdW1uc1RvUmVuZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uUmVuZGVyZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMucHVzaChjZWxsUHJvcGVydHku
bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByb3dW
YWx1ZVtjZWxsUHJvcGVydHkubmFtZV0gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3Jl
YXRlRWxlbWVudEZvclByb3BlcnR5UHJldmlldyhjZWxsUHJvcGVydHkpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByb3dzLnB1c2goW3Jvd1Byb3BlcnR5Lm5hbWUsIHJvd1Zh
bHVlXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGVyZSB3
ZXJlIHZhbHVlUHJldmlld3MsIGNvbnZlcnQgdG8gYSBmbGF0IGxpc3QuCi0gICAgICAgIGlmIChy
b3dzLmxlbmd0aCkgewotICAgICAgICAgICAgY29uc3QgZW1EYXNoID0gIlx1MjAxNCI7Ci0gICAg
ICAgICAgICBjb2x1bW5OYW1lcy51bnNoaWZ0KFdlYkluc3BlY3Rvci5VSVN0cmluZygiKEluZGV4
KSIpKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgIHZhciByb3dOYW1lID0gcm93c1tpXVswXTsKLSAgICAgICAgICAg
ICAgICB2YXIgcm93VmFsdWUgPSByb3dzW2ldWzFdOwotICAgICAgICAgICAgICAgIGZsYXRWYWx1
ZXMucHVzaChyb3dOYW1lKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGNv
bHVtbk5hbWVzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5O
YW1lID0gY29sdW1uTmFtZXNbal07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKGNvbHVtbk5h
bWUgaW4gcm93VmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNo
KGVtRGFzaCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZsYXRWYWx1ZXMucHVzaChyb3dWYWx1ZVtjb2x1bW5OYW1lXSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgd2Vy
ZSBubyB2YWx1ZSBQcmV2aWV3cywgdGhlbiBjaGVjayBmb3IgYW4gYXJyYXkgb2YgdmFsdWVzLgot
ICAgICAgICBpZiAoIWZsYXRWYWx1ZXMubGVuZ3RoICYmIHByZXZpZXcucHJvcGVydHlQcmV2aWV3
cykgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2aWV3LnByb3BlcnR5UHJl
dmlld3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgcm93UHJvcGVydHkgPSBw
cmV2aWV3LnByb3BlcnR5UHJldmlld3NbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCEoInZhbHVl
IiBpbiByb3dQcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICAgICAgaWYgKCFjb2x1bW5OYW1lcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29sdW1uTmFtZXMucHVzaChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkluZGV4IikpOwotICAg
ICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcy5wdXNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
VmFsdWUiKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmxhdFZhbHVl
cy5wdXNoKHJvd1Byb3BlcnR5Lm5hbWUpOwotICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVz
aChXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvclByb3BlcnR5UHJl
dmlldyhyb3dQcm9wZXJ0eSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gSWYgbG9zc2xlc3Mgb3Igbm90IHRhYmxlIGRhdGEsIG91dHB1dCB0aGUgb2JqZWN0IHNvIGZ1
bGwgZGF0YSBjYW4gYmUgZ290dGVuLgotICAgICAgICBpZiAoIXByZXZpZXcubG9zc2xlc3MgfHwg
IWZsYXRWYWx1ZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRo
aXMuX2Zvcm1hdFBhcmFtZXRlcih0YWJsZSkpOwotICAgICAgICAgICAgaWYgKCFmbGF0VmFsdWVz
Lmxlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciBkYXRhR3JpZENvbnRhaW5lciA9IGVsZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4i
KTsKLSAgICAgICAgdmFyIGRhdGFHcmlkID0gV2ViSW5zcGVjdG9yLkRhdGFHcmlkLmNyZWF0ZVNv
cnRhYmxlRGF0YUdyaWQoY29sdW1uTmFtZXMsIGZsYXRWYWx1ZXMpOwotICAgICAgICBkYXRhR3Jp
ZC5lbGVtZW50LmNsYXNzTGlzdC5hZGQoImlubGluZSIpOwotICAgICAgICBkYXRhR3JpZENvbnRh
aW5lci5hcHBlbmRDaGlsZChkYXRhR3JpZC5lbGVtZW50KTsKLQotICAgICAgICByZXR1cm4gZWxl
bWVudDsKLSAgICB9LAotCi0gICAgX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmc6IGZ1bmN0
aW9uKHBhcmFtZXRlcnMsIGZvcm1hdHRlZFJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHZhciBmb3Jt
YXR0ZXJzID0ge307Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFyYW1ldGVyRm9ybWF0dGVyKGZvcmNl
LCBvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRQYXJhbWV0
ZXIob2JqLCBmb3JjZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzdHJpbmdGb3Jt
YXR0ZXIob2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gb2JqLmRlc2NyaXB0aW9u
OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIob2JqKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIG9iai52YWx1ZSAhPT0gIm51bWJlciIpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQob2JqLmRlc2NyaXB0aW9uKTsKLSAgICAg
ICAgICAgIHJldHVybiBvYmoudmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBp
bnRlZ2VyRm9ybWF0dGVyKG9iaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBv
YmoudmFsdWUgIT09ICJudW1iZXIiKQotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChv
YmouZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Iob2JqLnZhbHVl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjdXJyZW50U3R5bGUgPSBudWxsOwotICAgICAg
ICBmdW5jdGlvbiBzdHlsZUZvcm1hdHRlcihvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN1
cnJlbnRTdHlsZSA9IHt9OwotICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgIGJ1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxl
Iiwgb2JqLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVm
ZmVyLnN0eWxlLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0g
YnVmZmVyLnN0eWxlW2ldOwotICAgICAgICAgICAgICAgIGlmIChpc1doaXRlbGlzdGVkUHJvcGVy
dHkocHJvcGVydHkpKQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3R5bGVbcHJvcGVydHld
ID0gYnVmZmVyLnN0eWxlW3Byb3BlcnR5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGlzV2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICAgICAg
ewotICAgICAgICAgICAgdmFyIHByZWZpeGVzID0gWyJiYWNrZ3JvdW5kIiwgImJvcmRlciIsICJj
b2xvciIsICJmb250IiwgImxpbmUiLCAibWFyZ2luIiwgInBhZGRpbmciLCAidGV4dCIsICItd2Vi
a2l0LWJhY2tncm91bmQiLCAiLXdlYmtpdC1ib3JkZXIiLCAiLXdlYmtpdC1mb250IiwgIi13ZWJr
aXQtbWFyZ2luIiwgIi13ZWJraXQtcGFkZGluZyIsICItd2Via2l0LXRleHQiXTsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICBpZiAocHJvcGVydHkuc3RhcnRzV2l0aChwcmVmaXhlc1tpXSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVvIGZvciBmb3Jt
YXR0aW5nIG9iamVjdHMuCi0gICAgICAgIGZvcm1hdHRlcnMubyA9IHBhcmFtZXRlckZvcm1hdHRl
ci5iaW5kKHRoaXMsIGZhbHNlKTsKLSAgICAgICAgZm9ybWF0dGVycy5zID0gc3RyaW5nRm9ybWF0
dGVyOwotICAgICAgICBmb3JtYXR0ZXJzLmYgPSBmbG9hdEZvcm1hdHRlcjsKLQotICAgICAgICAv
LyBGaXJlYnVnIGFsbG93cyBib3RoICVpIGFuZCAlZCBmb3IgZm9ybWF0dGluZyBpbnRlZ2Vycy4K
LSAgICAgICAgZm9ybWF0dGVycy5pID0gaW50ZWdlckZvcm1hdHRlcjsKLSAgICAgICAgZm9ybWF0
dGVycy5kID0gaW50ZWdlckZvcm1hdHRlcjsKLQotICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJWMg
Zm9yIHN0eWxpbmcgdGhlIG1lc3NhZ2UuCi0gICAgICAgIGZvcm1hdHRlcnMuYyA9IHN0eWxlRm9y
bWF0dGVyOwotCi0gICAgICAgIC8vIFN1cHBvcnQgJU8gdG8gZm9yY2Ugb2JqZWN0IGZvcm1hdHRp
bmcsIGluc3RlYWQgb2YgdGhlIHR5cGUtYmFzZWQgJW8gZm9ybWF0dGluZy4KLSAgICAgICAgZm9y
bWF0dGVycy5PID0gcGFyYW1ldGVyRm9ybWF0dGVyLmJpbmQodGhpcywgdHJ1ZSk7Ci0KLSAgICAg
ICAgZnVuY3Rpb24gYXBwZW5kKGEsIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChiIGlu
c3RhbmNlb2YgTm9kZSkKLSAgICAgICAgICAgICAgICBhLmFwcGVuZENoaWxkKGIpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoYikgewotICAgICAgICAgICAgICAgIHZhciB0b0FwcGVuZCA9IFdlYklu
c3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudChiLnRvU3RyaW5nKCkpOwotICAgICAgICAg
ICAgICAgIGlmIChjdXJyZW50U3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBw
ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGtleSBpbiBjdXJyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB3
cmFwcGVyLnN0eWxlW2tleV0gPSBjdXJyZW50U3R5bGVba2V5XTsKLSAgICAgICAgICAgICAgICAg
ICAgd3JhcHBlci5hcHBlbmRDaGlsZCh0b0FwcGVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIHRv
QXBwZW5kID0gd3JhcHBlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFy
IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAg
c3Bhbi5jbGFzc05hbWUgPSAidHlwZS1zdHJpbmciOwotICAgICAgICAgICAgICAgIHNwYW4uYXBw
ZW5kQ2hpbGQodG9BcHBlbmQpOwotICAgICAgICAgICAgICAgIGEuYXBwZW5kQ2hpbGQoc3Bhbik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFN0cmluZy5mb3JtYXQgZG9lcyB0cmVhdCBmb3JtYXR0ZWRSZXN1bHQgbGlrZSBhIEJ1
aWxkZXIsIHJlc3VsdCBpcyBhbiBvYmplY3QuCi0gICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0
KHBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24sIHBhcmFtZXRlcnMuc2xpY2UoMSksIGZvcm1hdHRl
cnMsIGZvcm1hdHRlZFJlc3VsdCwgYXBwZW5kKTsKLSAgICB9LAotCi0gICAgZGVjb3JhdGVNZXNz
YWdlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9l
bGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7Ci0KLSAgICAgICAgZWxl
bWVudC5tZXNzYWdlID0gdGhpczsKLSAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25z
b2xlLW1lc3NhZ2UiKTsKLQotICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKLQotICAg
ICAgICBzd2l0Y2ggKHRoaXMubGV2ZWwpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5UaXA6Ci0gICAgICAgICAgICAgICAgZWxlbWVu
dC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLXRpcC1sZXZlbCIpOwotICAgICAgICAgICAgICAgIGVs
ZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJUaXA6ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Ci0gICAgICAgICAg
ICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWxvZy1sZXZlbCIpOwotICAgICAg
ICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJMb2c6ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5EZWJ1
ZzoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtZGVidWct
bGV2ZWwiKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJl
bHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGVidWc6ICIpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgotICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0
LmFkZCgiY29uc29sZS13YXJuaW5nLWxldmVsIik7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5z
ZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIldh
cm5pbmc6ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKLSAgICAgICAgICAg
ICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtZXJyb3ItbGV2ZWwiKTsKLSAgICAg
ICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiRXJyb3I6ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwIHx8IHRoaXMudHlwZSA9PT0gV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQpCi0gICAg
ICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtZ3JvdXAtdGl0bGUiKTsKLQot
ICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZm9ybWF0dGVkTWVzc2FnZSk7Ci0KLSAg
ICAgICAgaWYgKHRoaXMucmVwZWF0Q291bnQgPiAxKQotICAgICAgICAgICAgdGhpcy51cGRhdGVS
ZXBlYXRDb3VudCgpOwotCi0gICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0sCi0KLSAgICB0
b01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZWxl
bWVudCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50OwotCi0gICAgICAgIHZhciBl
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0KLSAgICAgICAgcmV0dXJu
IHRoaXMuZGVjb3JhdGVNZXNzYWdlRWxlbWVudChlbGVtZW50KTsKLSAgICB9LAotCi0gICAgX3Bv
cHVsYXRlU3RhY2tUcmFjZVRyZWVFbGVtZW50OiBmdW5jdGlvbihwYXJlbnRUcmVlRWxlbWVudCkK
LSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc3RhY2tUcmFjZS5sZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5fc3RhY2tUcmFjZVtpXTsK
LQotICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlVGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICBtZXNzYWdlVGV4dEVsZW1lbnQuY2xhc3NOYW1l
ID0gImNvbnNvbGUtbWVzc2FnZS10ZXh0IjsKLSAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUg
PSBmcmFtZS5mdW5jdGlvbk5hbWUgfHwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3Vz
IGZ1bmN0aW9uKSIpOwotICAgICAgICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGZ1bmN0aW9uTmFtZSkpOwotICAgICAgICAgICAgY29u
dGVudC5hcHBlbmRDaGlsZChtZXNzYWdlVGV4dEVsZW1lbnQpOwotCi0gICAgICAgICAgICBpZiAo
ZnJhbWUudXJsICYmICF0aGlzLl9zaG91bGRIaWRlVVJMKGZyYW1lLnVybCkpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlDYWxsRnJhbWUoZnJhbWUpOwot
ICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudChj
b250ZW50KTsKLSAgICAgICAgICAgIHBhcmVudFRyZWVFbGVtZW50LmFwcGVuZENoaWxkKHRyZWVF
bGVtZW50KTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICB1cGRhdGVSZXBlYXRDb3VudDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIGlmICghdGhpcy5yZXBlYXRDb3VudEVsZW1lbnQpIHsKLSAgICAg
ICAgICAgIHRoaXMucmVwZWF0Q291bnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOwotICAgICAgICAgICAgdGhpcy5yZXBlYXRDb3VudEVsZW1lbnQuY2xhc3NOYW1lID0g
ImJ1YmJsZSI7Ci0KLSAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMu
cmVwZWF0Q291bnRFbGVtZW50LCB0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXMucmVwZWF0Q291bnRFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5yZXBl
YXRDb3VudDsKLSAgICB9LAotCi0gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHZhciBzb3VyY2VTdHJpbmc7Ci0gICAgICAgIHN3aXRjaCAodGhpcy5zb3VyY2UpIHsKLSAg
ICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2Uu
SFRNTDoKLSAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiSFRNTCI7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlU291cmNlLlhNTDoKLSAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiWE1M
IjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSlM6Ci0gICAgICAgICAgICAgICAgc291cmNl
U3RyaW5nID0gIkpTIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yazoKLSAgICAg
ICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiTmV0d29yayI7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
U291cmNlLkNvbnNvbGVBUEk6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkNvbnNv
bGVBUEkiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5PdGhlcjoKLSAgICAgICAgICAgICAg
ICBzb3VyY2VTdHJpbmcgPSAiT3RoZXIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIHR5cGVTdHJpbmc7Ci0gICAgICAgIHN3aXRjaCAodGhpcy50eXBl
KSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5Mb2c6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJMb2ciOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUuRGlyOgotICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiRGlyIjsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkRpclhNTDoKLSAgICAgICAgICAgICAgICB0eXBlU3Ry
aW5nID0gIkRpciBYTUwiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2U6Ci0gICAgICAg
ICAgICAgICAgdHlwZVN0cmluZyA9ICJUcmFjZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5T
dGFydEdyb3VwQ29sbGFwc2VkOgotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cDoKLSAgICAgICAgICAgICAgICB0eXBlU3Ry
aW5nID0gIlN0YXJ0IEdyb3VwIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwOgot
ICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiRW5kIEdyb3VwIjsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VUeXBlLkFzc2VydDoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkFzc2VydCI7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQ6Ci0gICAgICAgICAgICAgICAgdHlwZVN0
cmluZyA9ICJSZXN1bHQiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHNvdXJjZVN0cmluZyArICIgIiArIHR5cGVTdHJpbmcgKyAiICIgKyB0aGlz
LmxldmVsU3RyaW5nICsgIjogIiArIHRoaXMuZm9ybWF0dGVkTWVzc2FnZS50ZXh0Q29udGVudCAr
ICJcbiIgKyB0aGlzLnVybCArICIgbGluZSAiICsgdGhpcy5saW5lOwotICAgIH0sCi0KLSAgICBn
ZXQgdGV4dCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZVRleHQ7Ci0gICAg
fSwKLQotICAgIGlzRXF1YWw6IGZ1bmN0aW9uKG1zZykKLSAgICB7Ci0gICAgICAgIGlmICghbXNn
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh0aGlzLl9zdGFja1Ry
YWNlKSB7Ci0gICAgICAgICAgICBpZiAoIW1zZy5fc3RhY2tUcmFjZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgbCA9IHRoaXMuX3N0YWNrVHJhY2U7Ci0g
ICAgICAgICAgICB2YXIgciA9IG1zZy5fc3RhY2tUcmFjZTsKLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChsW2ldLnVy
bCAhPT0gcltpXS51cmwgfHwKLSAgICAgICAgICAgICAgICAgICAgbFtpXS5mdW5jdGlvbk5hbWUg
IT09IHJbaV0uZnVuY3Rpb25OYW1lIHx8Ci0gICAgICAgICAgICAgICAgICAgIGxbaV0ubGluZU51
bWJlciAhPT0gcltpXS5saW5lTnVtYmVyIHx8Ci0gICAgICAgICAgICAgICAgICAgIGxbaV0uY29s
dW1uTnVtYmVyICE9PSByW2ldLmNvbHVtbk51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICh0
aGlzLnNvdXJjZSA9PT0gbXNnLnNvdXJjZSkKLSAgICAgICAgICAgICYmICh0aGlzLnR5cGUgPT09
IG1zZy50eXBlKQotICAgICAgICAgICAgJiYgKHRoaXMubGV2ZWwgPT09IG1zZy5sZXZlbCkKLSAg
ICAgICAgICAgICYmICh0aGlzLmxpbmUgPT09IG1zZy5saW5lKQotICAgICAgICAgICAgJiYgKHRo
aXMudXJsID09PSBtc2cudXJsKQotICAgICAgICAgICAgJiYgKHRoaXMubWVzc2FnZSA9PT0gbXNn
Lm1lc3NhZ2UpCi0gICAgICAgICAgICAmJiAodGhpcy5fcmVxdWVzdCA9PT0gbXNnLl9yZXF1ZXN0
KTsKLSAgICB9LAotCi0gICAgZ2V0IHN0YWNrVHJhY2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX3N0YWNrVHJhY2U7Ci0gICAgfSwKLQotICAgIGNsb25lOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLmNyZWF0ZSh0aGlz
LnNvdXJjZSwgdGhpcy5sZXZlbCwgdGhpcy5fbWVzc2FnZVRleHQsIHRoaXMudHlwZSwgdGhpcy51
cmwsIHRoaXMubGluZSwgdGhpcy5jb2x1bW4sIHRoaXMucmVwZWF0Q291bnQsIHRoaXMuX3BhcmFt
ZXRlcnMsIHRoaXMuX3N0YWNrVHJhY2UsIHRoaXMuX3JlcXVlc3QpOwotICAgIH0sCi0KLSAgICBn
ZXQgbGV2ZWxTdHJpbmcoKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0aGlzLmxldmVsKSB7Ci0g
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwu
VGlwOgotICAgICAgICAgICAgICAgIHJldHVybiAiVGlwIjsKLSAgICAgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICJMb2ciOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJXYXJu
aW5nIjsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VMZXZlbC5EZWJ1ZzoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkRlYnVnIjsKLSAgICAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoK
LSAgICAgICAgICAgICAgICByZXR1cm4gIkVycm9yIjsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICBnZXQgY2xpcGJvYXJkUHJlZml4U3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiWyIg
KyB0aGlzLmxldmVsU3RyaW5nICsgIl0gIjsKLSAgICB9LAotCi0gICAgdG9DbGlwYm9hcmRTdHJp
bmc6IGZ1bmN0aW9uKGlzUHJlZml4T3B0aW9uYWwpCi0gICAgewotICAgICAgICB2YXIgaXNUcmFj
ZSA9IHRoaXMuX3Nob3VsZER1bXBTdGFja1RyYWNlKCk7Ci0KLSAgICAgICAgdmFyIGNsaXBib2Fy
ZFN0cmluZyA9ICIiOwotICAgICAgICBpZiAodGhpcy5fZm9ybWF0dGVkTWVzc2FnZSAmJiAhaXNU
cmFjZSkKLSAgICAgICAgICAgIGNsaXBib2FyZFN0cmluZyA9IHRoaXMuX2Zvcm1hdHRlZE1lc3Nh
Z2UucXVlcnlTZWxlY3Rvcigic3BhbiIpLmlubmVyVGV4dDsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2xpcGJvYXJkU3RyaW5nID0gdGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2UgPyAiY29uc29sZS50cmFjZSgpIiA6IHRoaXMuX21l
c3NhZ2UgfHwgdGhpcy5fbWVzc2FnZVRleHQ7Ci0KLSAgICAgICAgaWYgKCFpc1ByZWZpeE9wdGlv
bmFsIHx8IHRoaXMuZW5mb3JjZXNDbGlwYm9hcmRQcmVmaXhTdHJpbmcpCi0gICAgICAgICAgICBj
bGlwYm9hcmRTdHJpbmcgPSB0aGlzLmNsaXBib2FyZFByZWZpeFN0cmluZyArIGNsaXBib2FyZFN0
cmluZzsKLQotICAgICAgICBpZiAoaXNUcmFjZSkgewotICAgICAgICAgICAgdGhpcy5fc3RhY2tU
cmFjZS5mb3JFYWNoKGZ1bmN0aW9uKGZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY2xpcGJvYXJk
U3RyaW5nICs9ICJcblx0IiArIChmcmFtZS5mdW5jdGlvbk5hbWUgfHwgV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0aW9uKSIpKTsKLSAgICAgICAgICAgICAgICBpZiAoZnJh
bWUudXJsKQotICAgICAgICAgICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgKz0gIiAoIiArIFdl
Ykluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTChmcmFtZS51cmwpICsgIiwgbGluZSAiICsgZnJh
bWUubGluZU51bWJlciArICIpIjsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgdmFyIHJlcGVhdFN0cmluZyA9IHRoaXMucmVwZWF0Q291bnQgPiAxID8gIngi
ICsgdGhpcy5yZXBlYXRDb3VudCA6ICIiOwotCi0gICAgICAgICAgICB2YXIgdXJsTGluZSA9ICIi
OwotICAgICAgICAgICAgaWYgKHRoaXMudXJsKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbXBv
bmVudHMgPSBbV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKHRoaXMudXJsKSwgImxpbmUg
IiArIHRoaXMubGluZV07Ci0gICAgICAgICAgICAgICAgaWYgKHJlcGVhdFN0cmluZykKLSAgICAg
ICAgICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKHJlcGVhdFN0cmluZyk7Ci0gICAgICAgICAg
ICAgICAgdXJsTGluZSA9ICIgKCIgKyBjb21wb25lbnRzLmpvaW4oIiwgIikgKyAiKSI7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHJlcGVhdFN0cmluZykKLSAgICAgICAgICAgICAgICB1cmxMaW5l
ID0gIiAoIiArIHJlcGVhdFN0cmluZyArICIpIjsKLQotICAgICAgICAgICAgaWYgKHVybExpbmUp
IHsKLSAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBjbGlwYm9hcmRTdHJpbmcuc3BsaXQoIlxu
Iik7Ci0gICAgICAgICAgICAgICAgbGluZXNbMF0gKz0gdXJsTGluZTsKLSAgICAgICAgICAgICAg
ICBjbGlwYm9hcmRTdHJpbmcgPSBsaW5lcy5qb2luKCJcbiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNsaXBib2FyZFN0cmluZzsKLSAgICB9Ci19OwotCi1X
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTGVnYWN5Q29uc29sZU1lc3NhZ2UuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MZWdhY3lDb25zb2xl
TWVzc2FnZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjhkNzEyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvTGVnYWN5Q29uc29sZU1lc3NhZ2UuanMKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybworICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVN
ZXNzYWdlID0gZnVuY3Rpb24oc291cmNlLCBsZXZlbCwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVh
dENvdW50KQoreworICAgIHRoaXMuc291cmNlID0gc291cmNlOworICAgIHRoaXMubGV2ZWwgPSBs
ZXZlbDsKKyAgICB0aGlzLnVybCA9IHVybCB8fCBudWxsOworICAgIHRoaXMubGluZSA9IGxpbmUg
fHwgMDsKKyAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbiB8fCAwOworCisgICAgcmVwZWF0Q291bnQg
PSByZXBlYXRDb3VudCB8fCAxOworICAgIHRoaXMucmVwZWF0Q291bnQgPSByZXBlYXRDb3VudDsK
KyAgICB0aGlzLnJlcGVhdERlbHRhID0gcmVwZWF0Q291bnQ7CisgICAgdGhpcy50b3RhbFJlcGVh
dENvdW50ID0gcmVwZWF0Q291bnQ7Cit9OworCitXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1l
c3NhZ2UucHJvdG90eXBlID0geworICAgIGlzRXJyb3JPcldhcm5pbmc6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiAodGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nIHx8IHRoaXMubGV2ZWwgPT09IFdlYklu
c3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IpOworICAgIH0s
CisKKyAgICB1cGRhdGVSZXBlYXRDb3VudDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8g
SW1wbGVtZW50ZWQgYnkgY29uY3JldGUgaW5zdGFuY2VzCisgICAgfSwKKworICAgIGNsb25lOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICAvLyBJbXBsZW1lbnRlZCBieSBjb25jcmV0ZSBpbnN0
YW5jZXMKKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuY3Jl
YXRlID0gZnVuY3Rpb24oc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgdHlwZSwgdXJsLCBsaW5lLCBj
b2x1bW4sIHJlcGVhdENvdW50LCBwYXJhbWV0ZXJzLCBzdGFja1RyYWNlLCByZXF1ZXN0KQorewor
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbChzb3Vy
Y2UsIGxldmVsLCBtZXNzYWdlLCBudWxsLCB0eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0
Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNrVHJhY2UsIHJlcXVlc3QpOworfTsKKworLy8gRklYTUU6
IFN3aXRjaCB0byBDb25zb2xlQWdlbnQuQ29uc29sZU1lc3NhZ2VTb3VyY2UuCitXZWJJbnNwZWN0
b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZSA9IHsKKyAgICBIVE1MOiAiaHRt
bCIsCisgICAgWE1MOiAieG1sIiwKKyAgICBKUzogImphdmFzY3JpcHQiLAorICAgIE5ldHdvcms6
ICJuZXR3b3JrIiwKKyAgICBDb25zb2xlQVBJOiAiY29uc29sZS1hcGkiLAorICAgIE90aGVyOiAi
b3RoZXIiCit9OworCisvLyBGSVhNRTogU3dpdGNoIHRvIENvbnNvbGVBZ2VudC5Db25zb2xlTWVz
c2FnZVR5cGUuCitXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUg
PSB7CisgICAgTG9nOiAibG9nIiwKKyAgICBEaXI6ICJkaXIiLAorICAgIERpclhNTDogImRpcnht
bCIsCisgICAgVGFibGU6ICJ0YWJsZSIsCisgICAgVHJhY2U6ICJ0cmFjZSIsCisgICAgU3RhcnRH
cm91cDogInN0YXJ0R3JvdXAiLAorICAgIFN0YXJ0R3JvdXBDb2xsYXBzZWQ6ICJzdGFydEdyb3Vw
Q29sbGFwc2VkIiwKKyAgICBFbmRHcm91cDogImVuZEdyb3VwIiwKKyAgICBBc3NlcnQ6ICJhc3Nl
cnQiLAorICAgIFJlc3VsdDogInJlc3VsdCIKK307CisKKy8vIEZJWE1FOiBTd2l0Y2ggdG8gQ29u
c29sZUFnZW50LkNvbnNvbGVNZXNzYWdlTGV2ZWwuCitXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29s
ZU1lc3NhZ2UuTWVzc2FnZUxldmVsID0geworICAgIFRpcDogInRpcCIsCisgICAgTG9nOiAibG9n
IiwKKyAgICBXYXJuaW5nOiAid2FybmluZyIsCisgICAgRXJyb3I6ICJlcnJvciIsCisgICAgRGVi
dWc6ICJkZWJ1ZyIKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhOWQ2NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeUNv
bnNvbGVNZXNzYWdlSW1wbC5qcwpAQCAtMCwwICsxLDgwMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybworICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdl
SW1wbCA9IGZ1bmN0aW9uKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmtpZmllciwgdHlwZSwg
dXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBwYXJhbWV0ZXJzLCBzdGFja1RyYWNlLCBy
ZXF1ZXN0KQoreworICAgIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5jYWxsKHRo
aXMsIHNvdXJjZSwgbGV2ZWwsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCk7CisKKyAg
ICB0aGlzLl9saW5raWZpZXIgPSBsaW5raWZpZXI7CisgICAgdGhpcy50eXBlID0gdHlwZSB8fCBX
ZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nOworICAgIHRo
aXMuX21lc3NhZ2VUZXh0ID0gbWVzc2FnZTsKKyAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1l
dGVyczsKKyAgICB0aGlzLl9zdGFja1RyYWNlID0gc3RhY2tUcmFjZTsKKyAgICB0aGlzLl9yZXF1
ZXN0ID0gcmVxdWVzdDsKKworICAgIHRoaXMuX2N1c3RvbUZvcm1hdHRlcnMgPSB7CisgICAgICAg
ICJvYmplY3QiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKyAgICAgICAgImVycm9y
IjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCisgICAgICAgICJtYXAiOiB0aGlzLl9m
b3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKyAgICAgICAgInNldCI6IHRoaXMuX2Zvcm1hdFBhcmFt
ZXRlckFzT2JqZWN0LAorICAgICAgICAid2Vha21hcCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFz
T2JqZWN0LAorICAgICAgICAiaXRlcmF0b3IiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVj
dCwKKyAgICAgICAgImFycmF5IjogIHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzQXJyYXksCisgICAg
ICAgICJub2RlIjogICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc05vZGUsCisgICAgICAgICJzdHJp
bmciOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1N0cmluZworICAgIH07Cit9OworCitXZWJJbnNw
ZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZSA9IHsKKworICAgIGVuZm9y
Y2VzQ2xpcGJvYXJkUHJlZml4U3RyaW5nOiB0cnVlLAorCisgICAgX2Zvcm1hdE1lc3NhZ2U6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2Uu
Y2xhc3NOYW1lID0gImNvbnNvbGUtbWVzc2FnZS10ZXh0IjsKKworICAgICAgICB2YXIgbWVzc2Fn
ZVRleHQ7CisgICAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuQ29uc29sZUFQSSkgeworICAgICAgICAgICAgc3dp
dGNoICh0aGlzLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFjZToKKyAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiY29uc29sZS50cmFjZSgpIik7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkFzc2VydDoKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGFyZ3MgPSBbV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBc3NlcnRpb24g
ZmFpbGVkOiIpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmFtZXRlcnMpCisg
ICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncy5jb25jYXQodGhpcy5fcGFyYW1ldGVy
cyk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0KGFyZ3Mp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5EaXI6CisgICAgICAgICAg
ICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9wYXJhbWV0ZXJzID8gdGhpcy5fcGFyYW1ldGVyc1sw
XSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbIiVPIiwgb2Jq
XTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0aGlzLl9mb3JtYXQoYXJncyk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gdGhpcy5fcGFyYW1ldGVycyB8fCBbdGhpcy5f
bWVzc2FnZVRleHRdOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zv
cm1hdChhcmdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJj
ZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0
d29yaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9zdGFja1RyYWNlID0gdGhpcy5fcmVxdWVzdC5zdGFja1RyYWNlOworICAgICAgICAg
ICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0LmluaXRpYXRvciAmJiB0aGlzLl9yZXF1ZXN0LmluaXRp
YXRvci51cmwpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy51cmwgPSB0aGlzLl9yZXF1ZXN0
LmluaXRpYXRvci51cmw7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZSA9IHRoaXMuX3Jl
cXVlc3QuaW5pdGlhdG9yLmxpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIG1lc3NhZ2VUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29s
ZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2VUZXh0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX3JlcXVlc3Qu
cmVxdWVzdE1ldGhvZCArICIgIikpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dC5h
cHBlbmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVJlcXVlc3RBc05vZGUodGhpcy5fcmVxdWVz
dCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5mYWlsZWQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgiICIgKyB0aGlzLl9yZXF1ZXN0LmxvY2FsaXplZEZhaWxEZXNjcmlwdGlvbikp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIgKyB0aGlzLl9y
ZXF1ZXN0LnN0YXR1c0NvZGUgKyAiICgiICsgdGhpcy5fcmVxdWVzdC5zdGF0dXNUZXh0ICsgIiki
KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZy
YWdtZW50ID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50V2l0aEN1c3RvbUxp
bmtpZmllcih0aGlzLl9tZXNzYWdlVGV4dCwgV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXF1ZXN0QXNO
b2RlLmJpbmQobnVsbCwgdGhpcy5fcmVxdWVzdCwgIiIpKTsKKyAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMudXJsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBhbmNob3IgPSBXZWJJbnNwZWN0b3IubGlua2lmeVVSTEFzTm9k
ZSh0aGlzLnVybCwgdGhpcy51cmwsICJjb25zb2xlLW1lc3NhZ2UtdXJsIik7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQoYW5jaG9yKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0aGlzLl9mb3Jt
YXQoW3RoaXMuX21lc3NhZ2VUZXh0XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB2YXIgYXJncyA9IHRoaXMuX3BhcmFtZXRlcnMgfHwgW3RoaXMuX21lc3Nh
Z2VUZXh0XTsKKyAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0KGFyZ3MpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc291cmNlICE9PSBXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5OZXR3b3JrIHx8IHRoaXMuX3JlcXVlc3Qp
IHsKKyAgICAgICAgICAgIHZhciBmaXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSA9IHRoaXMuX2ZpcnN0
Tm9uTmF0aXZlQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBpZiAoZmlyc3ROb25OYXRpdmVDYWxs
RnJhbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlD
YWxsRnJhbWUoZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIHRoaXMu
X2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKHRoaXMudXJsICYmICF0aGlzLl9zaG91bGRIaWRlVVJMKHRoaXMudXJsKSkgewor
ICAgICAgICAgICAgICAgIHZhciB1cmxFbGVtZW50ID0gdGhpcy5fbGlua2lmeUxvY2F0aW9uKHRo
aXMudXJsLCB0aGlzLmxpbmUsIHRoaXMuY29sdW1uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9m
b3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZCht
ZXNzYWdlVGV4dCk7CisKKyAgICAgICAgaWYgKHRoaXMuc2F2ZWRSZXN1bHRJbmRleCkgeworICAg
ICAgICAgICAgdmFyIHNhdmVkVmFyaWFibGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3BhbiIpOworICAgICAgICAgICAgc2F2ZWRWYXJpYWJsZUVsZW1lbnQuY2xhc3NOYW1lID0g
ImNvbnNvbGUtc2F2ZWQtdmFyaWFibGUiOworICAgICAgICAgICAgc2F2ZWRWYXJpYWJsZUVsZW1l
bnQudGV4dENvbnRlbnQgPSAiID0gJCIgKyB0aGlzLnNhdmVkUmVzdWx0SW5kZXg7CisgICAgICAg
ICAgICBpZiAodGhpcy5fb2JqZWN0VHJlZSkKKyAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RU
cmVlLmFwcGVuZFRpdGxlU3VmZml4KHNhdmVkVmFyaWFibGVFbGVtZW50KTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxk
KHNhdmVkVmFyaWFibGVFbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl9z
aG91bGREdW1wU3RhY2tUcmFjZSgpKSB7CisgICAgICAgICAgICB2YXIgb2wgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJvbCIpOworICAgICAgICAgICAgb2wuY2xhc3NOYW1lID0gIm91dGxpbmUt
ZGlzY2xvc3VyZSI7CisgICAgICAgICAgICB2YXIgdHJlZU91dGxpbmUgPSBuZXcgVHJlZU91dGxp
bmUob2wpOworCisgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuX2Zvcm1hdHRlZE1lc3Nh
Z2U7CisgICAgICAgICAgICB2YXIgcm9vdCA9IG5ldyBUcmVlRWxlbWVudChjb250ZW50LCBudWxs
LCB0cnVlKTsKKyAgICAgICAgICAgIGNvbnRlbnQudHJlZUVsZW1lbnRGb3JUZXN0ID0gcm9vdDsK
KyAgICAgICAgICAgIHRyZWVPdXRsaW5lLmFwcGVuZENoaWxkKHJvb3QpOworICAgICAgICAgICAg
aWYgKHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VUeXBlLlRyYWNlKQorICAgICAgICAgICAgICAgIHJvb3QuZXhwYW5kKCk7CisKKyAgICAgICAg
ICAgIHRoaXMuX3BvcHVsYXRlU3RhY2tUcmFjZVRyZWVFbGVtZW50KHJvb3QpOworICAgICAgICAg
ICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZSA9IG9sOworICAgICAgICB9CisKKyAgICAgICAgLy8g
VGhpcyBpcyB1c2VkIGZvciBpbmxpbmUgbWVzc2FnZSBidWJibGVzIGluIFNvdXJjZUZyYW1lcywg
b3Igb3RoZXIgcGxhaW4tdGV4dCByZXByZXNlbnRhdGlvbnMuCisgICAgICAgIHRoaXMuX21lc3Nh
Z2UgPSBtZXNzYWdlVGV4dC50ZXh0Q29udGVudDsKKyAgICB9LAorCisgICAgX3Nob3VsZER1bXBT
dGFja1RyYWNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gISF0aGlzLl9zdGFj
a1RyYWNlICYmIHRoaXMuX3N0YWNrVHJhY2UubGVuZ3RoICYmICh0aGlzLnNvdXJjZSA9PT0gV2Vi
SW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yayB8fCB0
aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxl
dmVsLkVycm9yIHx8IHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VUeXBlLlRyYWNlKTsKKyAgICB9LAorCisgICAgX3Nob3VsZEhpZGVVUkw6IGZ1
bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiB1cmwgPT09ICJ1bmRlZmluZWQiIHx8
IHVybCA9PT0gIltuYXRpdmUgY29kZV0iOworICAgIH0sCisKKyAgICBfZmlyc3ROb25OYXRpdmVD
YWxsRnJhbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc3RhY2tUcmFj
ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5fc3RhY2tUcmFjZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZyYW1l
ID0gdGhpcy5fc3RhY2tUcmFjZVtpXTsKKyAgICAgICAgICAgIGlmICghZnJhbWUudXJsIHx8IGZy
YW1lLnVybCA9PT0gIltuYXRpdmUgY29kZV0iKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGZyYW1lOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfSwKKworICAgIGdldCBtZXNzYWdlKCkKKyAgICB7CisgICAgICAgIC8vIGZvcmNl
IG1lc3NhZ2UgZm9ybWF0dGluZworICAgICAgICB2YXIgZm9ybWF0dGVkTWVzc2FnZSA9IHRoaXMu
Zm9ybWF0dGVkTWVzc2FnZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7CisgICAgfSwK
KworICAgIGdldCBmb3JtYXR0ZWRNZXNzYWdlKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5f
Zm9ybWF0dGVkTWVzc2FnZSkKKyAgICAgICAgICAgIHRoaXMuX2Zvcm1hdE1lc3NhZ2UoKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2U7CisgICAgfSwKKworICAgIF9saW5r
aWZ5TG9jYXRpb246IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAg
IHsKKyAgICAgICAgLy8gQ29uc29sZU1lc3NhZ2Ugc3RhY2sgdHJhY2UgbGluZSBudW1iZXJzIGFy
ZSBvbmUtYmFzZWQuCisgICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyID8gbGluZU51bWJl
ciAtIDEgOiAwOworICAgICAgICBjb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXIgPyBjb2x1bW5O
dW1iZXIgLSAxIDogMDsKKworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmxpbmtpZnlMb2Nh
dGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgImNvbnNvbGUtbWVzc2FnZS11cmwi
KTsKKyAgICB9LAorCisgICAgX2xpbmtpZnlDYWxsRnJhbWU6IGZ1bmN0aW9uKGNhbGxGcmFtZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9saW5raWZ5TG9jYXRpb24oY2FsbEZyYW1lLnVy
bCwgY2FsbEZyYW1lLmxpbmVOdW1iZXIsIGNhbGxGcmFtZS5jb2x1bW5OdW1iZXIpOworICAgIH0s
CisKKyAgICBpc0Vycm9yT3JXYXJuaW5nOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1
cm4gKHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNz
YWdlTGV2ZWwuV2FybmluZyB8fCB0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29u
c29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKTsKKyAgICB9LAorCisgICAgX2Zvcm1hdDog
ZnVuY3Rpb24ocGFyYW1ldGVycykKKyAgICB7CisgICAgICAgIC8vIFRoaXMgbm9kZSBpcyB1c2Vk
IGxpa2UgYSBCdWlsZGVyLiBWYWx1ZXMgYXJlIGNvbnRpbnVhbGx5IGFwcGVuZGVkIG9udG8gaXQu
CisgICAgICAgIHZhciBmb3JtYXR0ZWRSZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7CisgICAgICAgIGlmICghcGFyYW1ldGVycy5sZW5ndGgpCisgICAgICAgICAgICByZXR1
cm4gZm9ybWF0dGVkUmVzdWx0OworCisgICAgICAgIC8vIEZvcm1hdHRpbmcgY29kZSBiZWxvdyBh
c3N1bWVzIHRoYXQgcGFyYW1ldGVycyBhcmUgYWxsIHdyYXBwZXJzIHdoZXJlYXMgZnJvbnRlbmQg
Y29uc29sZQorICAgICAgICAvLyBBUEkgYWxsb3dzIHBhc3NpbmcgYXJiaXRyYXJ5IHZhbHVlcyBh
cyBtZXNzYWdlcyAoc3RyaW5ncywgbnVtYmVycywgZXRjLikuIFdyYXAgdGhlbSBoZXJlLgorICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBPbmx5IHBhc3MgcnVudGltZSB3cmFwcGVycyBoZXJlLgorICAgICAg
ICAgICAgaWYgKHBhcmFtZXRlcnNbaV0gaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2Jq
ZWN0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAodHlwZW9m
IHBhcmFtZXRlcnNbaV0gPT09ICJvYmplY3QiKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNb
aV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHBhcmFtZXRlcnNbaV0p
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbaV0gPSBXZWJJ
bnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QcmltaXRpdmVWYWx1ZShwYXJhbWV0ZXJzW2ldKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBzdHJpbmcgbG9nIGFuZCBzdHJp
bmcgZXZhbCByZXN1bHQuIFdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSBiYXNlZCBvbiBtZXNz
YWdlIHR5cGUuCisgICAgICAgIHZhciBzaG91bGRGb3JtYXRNZXNzYWdlID0gV2ViSW5zcGVjdG9y
LlJlbW90ZU9iamVjdC50eXBlKHBhcmFtZXRlcnNbMF0pID09PSAic3RyaW5nIiAmJiB0aGlzLnR5
cGUgIT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1
bHQ7CisKKyAgICAgICAgaWYgKHNob3VsZEZvcm1hdE1lc3NhZ2UpIHsKKyAgICAgICAgICAgIC8v
IE11bHRpcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmlyc3QgYmVpbmcgYSBmb3JtYXQgc3RyaW5n
LiBTYXZlIHVudXNlZCBzdWJzdGl0dXRpb25zLgorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRo
aXMuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcocGFyYW1ldGVycywgZm9ybWF0dGVkUmVz
dWx0KTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMgPSByZXN1bHQudW51c2VkU3Vic3RpdHV0aW9u
czsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBm
b3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVGFibGUpIHsKKyAgICAgICAgICAgIGZvcm1h
dHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1RhYmxlKHBhcmFt
ZXRlcnMpKTsKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyLCBvciB1bnVzZWQgc3Vic3RpdHV0aW9ucyBm
cm9tIGFib3ZlLgorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIC8vIElubGluZSBzdHJpbmdzIHdoZW4gZm9ybWF0dGluZy4K
KyAgICAgICAgICAgIGlmIChzaG91bGRGb3JtYXRNZXNzYWdlICYmIHBhcmFtZXRlcnNbaV0udHlw
ZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTGlzdC5hZGQo
InR5cGUtc3RyaW5nIik7CisgICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IHBhcmFt
ZXRlcnNbaV0uZGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFw
cGVuZENoaWxkKHNwYW4pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZm9y
bWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBhcmFtZXRlcihwYXJhbWV0ZXJz
W2ldLCBmYWxzZSkpOworCisgICAgICAgICAgICBpZiAoaSA8IHBhcmFtZXRlcnMubGVuZ3RoIC0g
MSAmJiAhdGhpcy5faXNFeHBhbmRhYmxlKHBhcmFtZXRlcnNbaV0pKQorICAgICAgICAgICAgICAg
IGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIp
KTsKKworICAgICAgICB9CisgICAgICAgIHJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7CisgICAgfSwK
KworICAgIF9pc0V4cGFuZGFibGU6IGZ1bmN0aW9uKHJlbW90ZU9iamVjdCkgeworICAgICAgICBp
ZiAoIXJlbW90ZU9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBp
ZiAocmVtb3RlT2JqZWN0Lmhhc0NoaWxkcmVuICYmIHJlbW90ZU9iamVjdC5wcmV2aWV3ICYmIHJl
bW90ZU9iamVjdC5wcmV2aWV3Lmxvc3NsZXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHJldHVybiByZW1vdGVPYmplY3QuaGFzQ2hpbGRyZW47CisgICAgfSwKKworICAg
IF9mb3JtYXRQYXJhbWV0ZXI6IGZ1bmN0aW9uKG91dHB1dCwgZm9yY2VPYmplY3RGb3JtYXQpCisg
ICAgeworICAgICAgICB2YXIgdHlwZTsKKyAgICAgICAgaWYgKGZvcmNlT2JqZWN0Rm9ybWF0KQor
ICAgICAgICAgICAgdHlwZSA9ICJvYmplY3QiOworICAgICAgICBlbHNlIGlmIChvdXRwdXQgaW5z
dGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KQorICAgICAgICAgICAgdHlwZSA9IG91
dHB1dC5zdWJ0eXBlIHx8IG91dHB1dC50eXBlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
eXBlID0gdHlwZW9mIG91dHB1dDsKKworICAgICAgICB2YXIgZm9ybWF0dGVyID0gdGhpcy5fY3Vz
dG9tRm9ybWF0dGVyc1t0eXBlXTsKKyAgICAgICAgaWYgKCFmb3JtYXR0ZXIpCisgICAgICAgICAg
ICBmb3JtYXR0ZXIgPSB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1ZhbHVlOworCisgICAgICAgIHZh
ciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworCisgICAgICAgIGlmICh0
aGlzLl9pc0V4cGFuZGFibGUob3V0cHV0KSkKKyAgICAgICAgICAgIHNwYW4uY2xhc3NMaXN0LmFk
ZCgiZXhwYW5kYWJsZSIpOworCisgICAgICAgIGZvcm1hdHRlci5jYWxsKHRoaXMsIG91dHB1dCwg
c3BhbiwgZm9yY2VPYmplY3RGb3JtYXQpOworICAgICAgICByZXR1cm4gc3BhbjsKKyAgICB9LAor
CisgICAgX2Zvcm1hdFBhcmFtZXRlckFzVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBlbGVtKQorICAg
IHsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUu
Y3JlYXRlRWxlbWVudEZvclJlbW90ZU9iamVjdCh2YWx1ZSkpOworICAgIH0sCisKKyAgICBfZm9y
bWF0UGFyYW1ldGVyQXNPYmplY3Q6IGZ1bmN0aW9uKG9iaiwgZWxlbSwgZm9yY2VFeHBhbnNpb24p
CisgICAgeworICAgICAgICB0aGlzLl9vYmplY3RUcmVlID0gbmV3IFdlYkluc3BlY3Rvci5PYmpl
Y3RUcmVlVmlldyhvYmosIFdlYkluc3BlY3Rvci5PYmplY3RUcmVlVmlldy5Nb2RlLlByb3BlcnRp
ZXMsIHRoaXMuX3Jvb3RQcm9wZXJ0eVBhdGhGb3JPYmplY3Qob2JqKSwgZm9yY2VFeHBhbnNpb24p
OworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRoaXMuX29iamVjdFRyZWUuZWxlbWVudCk7Cisg
ICAgfSwKKworICAgIF9mb3JtYXRQYXJhbWV0ZXJBc1N0cmluZzogZnVuY3Rpb24ob3V0cHV0LCBl
bGVtKQorICAgIHsKKyAgICAgICAgdmFyIHNwYW4gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFs
dWUuY3JlYXRlTGlua2lmaWVkRWxlbWVudFN0cmluZyhvdXRwdXQuZGVzY3JpcHRpb24pOworICAg
ICAgICBlbGVtLmFwcGVuZENoaWxkKHNwYW4pOworICAgIH0sCisKKyAgICBfZm9ybWF0UGFyYW1l
dGVyQXNOb2RlOiBmdW5jdGlvbihvYmplY3QsIGVsZW0pCisgICAgeworICAgICAgICB2YXIgc3Bh
biA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50Rm9yTm9kZShvYmpl
Y3QpOworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHNwYW4pOworICAgIH0sCisKKyAgICBfZm9y
bWF0UGFyYW1ldGVyQXNBcnJheTogZnVuY3Rpb24oYXJyLCBlbGVtKQorICAgIHsKKyAgICAgICAg
dGhpcy5fb2JqZWN0VHJlZSA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcoYXJyLCBX
ZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcuTW9kZS5Qcm9wZXJ0aWVzLCB0aGlzLl9yb290UHJv
cGVydHlQYXRoRm9yT2JqZWN0KGFycikpOworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRoaXMu
X29iamVjdFRyZWUuZWxlbWVudCk7CisgICAgfSwKKworICAgIF9yb290UHJvcGVydHlQYXRoRm9y
T2JqZWN0OiBmdW5jdGlvbihvYmplY3QpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuc2F2ZWRS
ZXN1bHRJbmRleCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHJldHVybiBu
ZXcgV2ViSW5zcGVjdG9yLlByb3BlcnR5UGF0aChvYmplY3QsICIkIiArIHRoaXMuc2F2ZWRSZXN1
bHRJbmRleCk7CisgICAgfSwKKworICAgIF91c2VyUHJvdmlkZWRDb2x1bW5OYW1lczogZnVuY3Rp
b24oY29sdW1uTmFtZXNBcmd1bWVudCkKKyAgICB7CisgICAgICAgIGlmICghY29sdW1uTmFtZXNB
cmd1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHZhciByZW1vdGVP
YmplY3QgPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKGNvbHVtbk5hbWVz
QXJndW1lbnQpOworCisgICAgICAgIC8vIFNpbmdsZSBwcmltaXRpdmUgYXJndW1lbnQuCisgICAg
ICAgIGlmIChyZW1vdGVPYmplY3QudHlwZSA9PT0gInN0cmluZyIgfHwgcmVtb3RlT2JqZWN0LnR5
cGUgPT09ICJudW1iZXIiKQorICAgICAgICAgICAgcmV0dXJuIFtTdHJpbmcoY29sdW1uTmFtZXNB
cmd1bWVudC52YWx1ZSldOworCisgICAgICAgIC8vIElnbm9yZSBldmVyeXRoaW5nIHRoYXQgaXMg
bm90IGFuIGFycmF5IHdpdGggcHJvcGVydHkgcHJldmlld3MuCisgICAgICAgIGlmIChyZW1vdGVP
YmplY3QudHlwZSAhPT0gIm9iamVjdCIgfHwgcmVtb3RlT2JqZWN0LnN1YnR5cGUgIT09ICJhcnJh
eSIgfHwgIXJlbW90ZU9iamVjdC5wcmV2aWV3IHx8ICFyZW1vdGVPYmplY3QucHJldmlldy5wcm9w
ZXJ0eVByZXZpZXdzKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgLy8gQXJy
YXkuIExvb2sgaW50byB0aGUgcHJldmlldyBhbmQgZ2V0IHN0cmluZyB2YWx1ZXMuCisgICAgICAg
IHZhciBleHRyYWN0ZWRDb2x1bW5OYW1lcyA9IFtdOworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0
eVByZXZpZXcgb2YgcmVtb3RlT2JqZWN0LnByZXZpZXcucHJvcGVydHlQcmV2aWV3cykgeworICAg
ICAgICAgICAgaWYgKHByb3BlcnR5UHJldmlldy50eXBlID09PSAic3RyaW5nIiB8fCBwcm9wZXJ0
eVByZXZpZXcudHlwZSA9PT0gIm51bWJlciIpCisgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ29s
dW1uTmFtZXMucHVzaChTdHJpbmcocHJvcGVydHlQcmV2aWV3LnZhbHVlKSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZXh0cmFjdGVkQ29sdW1uTmFtZXMubGVuZ3RoID8gZXh0cmFjdGVk
Q29sdW1uTmFtZXMgOiBudWxsOworICAgIH0sCisKKyAgICBfZm9ybWF0UGFyYW1ldGVyQXNUYWJs
ZTogZnVuY3Rpb24ocGFyYW1ldGVycykKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICB2YXIgdGFibGUgPSBwYXJhbWV0
ZXJzWzBdOworICAgICAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS5wcmV2aWV3KQorICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQ7CisKKyAgICAgICAgdmFyIHJvd3MgPSBbXTsKKyAgICAgICAgdmFy
IGNvbHVtbk5hbWVzID0gW107CisgICAgICAgIHZhciBmbGF0VmFsdWVzID0gW107CisgICAgICAg
IHZhciBwcmV2aWV3ID0gdGFibGUucHJldmlldzsKKyAgICAgICAgdmFyIHVzZXJQcm92aWRlZENv
bHVtbk5hbWVzID0gZmFsc2U7CisKKyAgICAgICAgLy8gVXNlciBwcm92aWRlZCBjb2x1bW5OYW1l
cy4KKyAgICAgICAgdmFyIGV4dHJhY3RlZENvbHVtbk5hbWVzID0gdGhpcy5fdXNlclByb3ZpZGVk
Q29sdW1uTmFtZXMocGFyYW1ldGVyc1sxXSk7CisgICAgICAgIGlmIChleHRyYWN0ZWRDb2x1bW5O
YW1lcykgeworICAgICAgICAgICAgdXNlclByb3ZpZGVkQ29sdW1uTmFtZXMgPSB0cnVlOworICAg
ICAgICAgICAgY29sdW1uTmFtZXMgPSBleHRyYWN0ZWRDb2x1bW5OYW1lczsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIENoZWNrIGZpcnN0IGZvciB2YWx1ZVByZXZpZXdzIGluIHRoZSBwcm9wZXJ0
aWVzIG1lYW5pbmcgdGhpcyB3YXMgYW4gYXJyYXkgb2Ygb2JqZWN0cy4KKyAgICAgICAgaWYgKHBy
ZXZpZXcucHJvcGVydHlQcmV2aWV3cykgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBwcmV2aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcm93UHJvcGVydHkgPSBwcmV2aWV3LnByb3BlcnR5UHJldmlld3NbaV07CisgICAgICAg
ICAgICAgICAgdmFyIHJvd1ByZXZpZXcgPSByb3dQcm9wZXJ0eS52YWx1ZVByZXZpZXc7CisgICAg
ICAgICAgICAgICAgaWYgKCFyb3dQcmV2aWV3KQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgICAgIHZhciByb3dWYWx1ZSA9IHt9OworICAgICAgICAgICAgICAg
IGNvbnN0IG1heENvbHVtbnNUb1JlbmRlciA9IDEwOworICAgICAgICAgICAgICAgIGZvciAodmFy
IGogPSAwOyBqIDwgcm93UHJldmlldy5wcm9wZXJ0eVByZXZpZXdzLmxlbmd0aDsgKytqKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBjZWxsUHJvcGVydHkgPSByb3dQcmV2aWV3LnByb3BlcnR5
UHJldmlld3Nbal07CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5SZW5kZXJlZCA9IGNv
bHVtbk5hbWVzLmNvbnRhaW5zKGNlbGxQcm9wZXJ0eS5uYW1lKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb2x1bW5SZW5kZXJlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVz
ZXJQcm92aWRlZENvbHVtbk5hbWVzIHx8IGNvbHVtbk5hbWVzLmxlbmd0aCA9PT0gbWF4Q29sdW1u
c1RvUmVuZGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29sdW1uUmVuZGVyZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgY29sdW1uTmFtZXMucHVzaChjZWxsUHJvcGVydHkubmFtZSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByb3dWYWx1ZVtjZWxsUHJvcGVydHku
bmFtZV0gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvclByb3Bl
cnR5UHJldmlldyhjZWxsUHJvcGVydHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByb3dzLnB1c2goW3Jvd1Byb3BlcnR5Lm5hbWUsIHJvd1ZhbHVlXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIHZhbHVlUHJldmlld3Ms
IGNvbnZlcnQgdG8gYSBmbGF0IGxpc3QuCisgICAgICAgIGlmIChyb3dzLmxlbmd0aCkgeworICAg
ICAgICAgICAgY29uc3QgZW1EYXNoID0gIlx1MjAxNCI7CisgICAgICAgICAgICBjb2x1bW5OYW1l
cy51bnNoaWZ0KFdlYkluc3BlY3Rvci5VSVN0cmluZygiKEluZGV4KSIpKTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAg
IHZhciByb3dOYW1lID0gcm93c1tpXVswXTsKKyAgICAgICAgICAgICAgICB2YXIgcm93VmFsdWUg
PSByb3dzW2ldWzFdOworICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChyb3dOYW1lKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGNvbHVtbk5hbWVzLmxlbmd0aDsg
KytqKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5OYW1lID0gY29sdW1uTmFtZXNb
al07CisgICAgICAgICAgICAgICAgICAgIGlmICghKGNvbHVtbk5hbWUgaW4gcm93VmFsdWUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNoKGVtRGFzaCk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVz
aChyb3dWYWx1ZVtjb2x1bW5OYW1lXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyB2YWx1ZSBQcmV2aWV3
cywgdGhlbiBjaGVjayBmb3IgYW4gYXJyYXkgb2YgdmFsdWVzLgorICAgICAgICBpZiAoIWZsYXRW
YWx1ZXMubGVuZ3RoICYmIHByZXZpZXcucHJvcGVydHlQcmV2aWV3cykgeworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcm93UHJvcGVydHkgPSBwcmV2aWV3LnByb3BlcnR5UHJl
dmlld3NbaV07CisgICAgICAgICAgICAgICAgaWYgKCEoInZhbHVlIiBpbiByb3dQcm9wZXJ0eSkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFj
b2x1bW5OYW1lcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMucHVz
aChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkluZGV4IikpOworICAgICAgICAgICAgICAgICAgICBj
b2x1bW5OYW1lcy5wdXNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygiVmFsdWUiKSk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNoKHJvd1Byb3BlcnR5
Lm5hbWUpOworICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChXZWJJbnNwZWN0b3IuRm9y
bWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvclByb3BlcnR5UHJldmlldyhyb3dQcm9wZXJ0eSkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgbG9zc2xlc3Mgb3Ig
bm90IHRhYmxlIGRhdGEsIG91dHB1dCB0aGUgb2JqZWN0IHNvIGZ1bGwgZGF0YSBjYW4gYmUgZ290
dGVuLgorICAgICAgICBpZiAoIXByZXZpZXcubG9zc2xlc3MgfHwgIWZsYXRWYWx1ZXMubGVuZ3Ro
KSB7CisgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBhcmFtZXRl
cih0YWJsZSkpOworICAgICAgICAgICAgaWYgKCFmbGF0VmFsdWVzLmxlbmd0aCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBkYXRhR3Jp
ZENvbnRhaW5lciA9IGVsZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iKTsKKyAgICAgICAgdmFyIGRh
dGFHcmlkID0gV2ViSW5zcGVjdG9yLkRhdGFHcmlkLmNyZWF0ZVNvcnRhYmxlRGF0YUdyaWQoY29s
dW1uTmFtZXMsIGZsYXRWYWx1ZXMpOworICAgICAgICBkYXRhR3JpZC5lbGVtZW50LmNsYXNzTGlz
dC5hZGQoImlubGluZSIpOworICAgICAgICBkYXRhR3JpZENvbnRhaW5lci5hcHBlbmRDaGlsZChk
YXRhR3JpZC5lbGVtZW50KTsKKworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9LAorCisg
ICAgX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmc6IGZ1bmN0aW9uKHBhcmFtZXRlcnMsIGZv
cm1hdHRlZFJlc3VsdCkKKyAgICB7CisgICAgICAgIHZhciBmb3JtYXR0ZXJzID0ge307CisKKyAg
ICAgICAgZnVuY3Rpb24gcGFyYW1ldGVyRm9ybWF0dGVyKGZvcmNlLCBvYmopCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXIob2JqLCBmb3JjZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzdHJpbmdGb3JtYXR0ZXIob2JqKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gb2JqLmRlc2NyaXB0aW9uOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIob2JqKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAodHlwZW9mIG9iai52YWx1ZSAhPT0gIm51bWJlciIpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHBhcnNlRmxvYXQob2JqLmRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBvYmou
dmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBpbnRlZ2VyRm9ybWF0dGVyKG9i
aikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmoudmFsdWUgIT09ICJudW1i
ZXIiKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmouZGVzY3JpcHRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Iob2JqLnZhbHVlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciBjdXJyZW50U3R5bGUgPSBudWxsOworICAgICAgICBmdW5jdGlvbiBzdHlsZUZv
cm1hdHRlcihvYmopCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJlbnRTdHlsZSA9IHt9Owor
ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsK
KyAgICAgICAgICAgIGJ1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgb2JqLmRlc2NyaXB0aW9u
KTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyLnN0eWxlLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gYnVmZmVyLnN0eWxlW2ldOwor
ICAgICAgICAgICAgICAgIGlmIChpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpKQorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50U3R5bGVbcHJvcGVydHldID0gYnVmZmVyLnN0eWxlW3By
b3BlcnR5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGlz
V2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFy
IHByZWZpeGVzID0gWyJiYWNrZ3JvdW5kIiwgImJvcmRlciIsICJjb2xvciIsICJmb250IiwgImxp
bmUiLCAibWFyZ2luIiwgInBhZGRpbmciLCAidGV4dCIsICItd2Via2l0LWJhY2tncm91bmQiLCAi
LXdlYmtpdC1ib3JkZXIiLCAiLXdlYmtpdC1mb250IiwgIi13ZWJraXQtbWFyZ2luIiwgIi13ZWJr
aXQtcGFkZGluZyIsICItd2Via2l0LXRleHQiXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvcGVy
dHkuc3RhcnRzV2l0aChwcmVmaXhlc1tpXSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVvIGZvciBmb3JtYXR0aW5nIG9iamVjdHMuCisg
ICAgICAgIGZvcm1hdHRlcnMubyA9IHBhcmFtZXRlckZvcm1hdHRlci5iaW5kKHRoaXMsIGZhbHNl
KTsKKyAgICAgICAgZm9ybWF0dGVycy5zID0gc3RyaW5nRm9ybWF0dGVyOworICAgICAgICBmb3Jt
YXR0ZXJzLmYgPSBmbG9hdEZvcm1hdHRlcjsKKworICAgICAgICAvLyBGaXJlYnVnIGFsbG93cyBi
b3RoICVpIGFuZCAlZCBmb3IgZm9ybWF0dGluZyBpbnRlZ2Vycy4KKyAgICAgICAgZm9ybWF0dGVy
cy5pID0gaW50ZWdlckZvcm1hdHRlcjsKKyAgICAgICAgZm9ybWF0dGVycy5kID0gaW50ZWdlckZv
cm1hdHRlcjsKKworICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJWMgZm9yIHN0eWxpbmcgdGhlIG1l
c3NhZ2UuCisgICAgICAgIGZvcm1hdHRlcnMuYyA9IHN0eWxlRm9ybWF0dGVyOworCisgICAgICAg
IC8vIFN1cHBvcnQgJU8gdG8gZm9yY2Ugb2JqZWN0IGZvcm1hdHRpbmcsIGluc3RlYWQgb2YgdGhl
IHR5cGUtYmFzZWQgJW8gZm9ybWF0dGluZy4KKyAgICAgICAgZm9ybWF0dGVycy5PID0gcGFyYW1l
dGVyRm9ybWF0dGVyLmJpbmQodGhpcywgdHJ1ZSk7CisKKyAgICAgICAgZnVuY3Rpb24gYXBwZW5k
KGEsIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiIGluc3RhbmNlb2YgTm9kZSkKKyAg
ICAgICAgICAgICAgICBhLmFwcGVuZENoaWxkKGIpOworICAgICAgICAgICAgZWxzZSBpZiAoYikg
eworICAgICAgICAgICAgICAgIHZhciB0b0FwcGVuZCA9IFdlYkluc3BlY3Rvci5saW5raWZ5U3Ry
aW5nQXNGcmFnbWVudChiLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50
U3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBj
dXJyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLnN0eWxlW2tleV0g
PSBjdXJyZW50U3R5bGVba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRD
aGlsZCh0b0FwcGVuZCk7CisgICAgICAgICAgICAgICAgICAgIHRvQXBwZW5kID0gd3JhcHBlcjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAi
dHlwZS1zdHJpbmciOworICAgICAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQodG9BcHBlbmQp
OworICAgICAgICAgICAgICAgIGEuYXBwZW5kQ2hpbGQoc3Bhbik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0cmluZy5mb3Jt
YXQgZG9lcyB0cmVhdCBmb3JtYXR0ZWRSZXN1bHQgbGlrZSBhIEJ1aWxkZXIsIHJlc3VsdCBpcyBh
biBvYmplY3QuCisgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KHBhcmFtZXRlcnNbMF0uZGVz
Y3JpcHRpb24sIHBhcmFtZXRlcnMuc2xpY2UoMSksIGZvcm1hdHRlcnMsIGZvcm1hdHRlZFJlc3Vs
dCwgYXBwZW5kKTsKKyAgICB9LAorCisgICAgZGVjb3JhdGVNZXNzYWdlRWxlbWVudDogZnVuY3Rp
b24oZWxlbWVudCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9lbGVtZW50KQorICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7CisKKyAgICAgICAgZWxlbWVudC5tZXNzYWdlID0gdGhp
czsKKyAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLW1lc3NhZ2UiKTsKKwor
ICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKKworICAgICAgICBzd2l0Y2ggKHRoaXMu
bGV2ZWwpIHsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VMZXZlbC5UaXA6CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Qu
YWRkKCJjb25zb2xlLXRpcC1sZXZlbCIpOworICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0
cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaXA6ICIp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6CisgICAgICAgICAgICAgICAg
ZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWxvZy1sZXZlbCIpOworICAgICAgICAgICAg
ICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJMb2c6ICIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5EZWJ1
ZzoKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtZGVidWct
bGV2ZWwiKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJl
bHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGVidWc6ICIpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xh
c3NMaXN0LmFkZCgiY29uc29sZS13YXJuaW5nLWxldmVsIik7CisgICAgICAgICAgICAgICAgZWxl
bWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIldhcm5pbmc6ICIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoK
KyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtZXJyb3ItbGV2
ZWwiKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHBy
ZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRXJyb3I6ICIpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwIHx8IHRoaXMu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0
YXJ0R3JvdXBDb2xsYXBzZWQpCisgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNv
bnNvbGUtZ3JvdXAtdGl0bGUiKTsKKworICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
Zm9ybWF0dGVkTWVzc2FnZSk7CisKKyAgICAgICAgaWYgKHRoaXMucmVwZWF0Q291bnQgPiAxKQor
ICAgICAgICAgICAgdGhpcy51cGRhdGVSZXBlYXRDb3VudCgpOworCisgICAgICAgIHJldHVybiBl
bGVtZW50OworICAgIH0sCisKKyAgICB0b01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9l
bGVtZW50OworCisgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZGVjb3JhdGVNZXNzYWdlRWxlbWVudChlbGVt
ZW50KTsKKyAgICB9LAorCisgICAgX3BvcHVsYXRlU3RhY2tUcmFjZVRyZWVFbGVtZW50OiBmdW5j
dGlvbihwYXJlbnRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5fc3RhY2tUcmFjZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZyYW1l
ID0gdGhpcy5fc3RhY2tUcmFjZVtpXTsKKworICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIHZhciBtZXNzYWdlVGV4dEVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICBtZXNz
YWdlVGV4dEVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUtbWVzc2FnZS10ZXh0IjsKKyAgICAg
ICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmcmFtZS5mdW5jdGlvbk5hbWUgfHwgV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0aW9uKSIpOworICAgICAgICAgICAgbWVzc2Fn
ZVRleHRFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGZ1bmN0aW9u
TmFtZSkpOworICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChtZXNzYWdlVGV4dEVsZW1l
bnQpOworCisgICAgICAgICAgICBpZiAoZnJhbWUudXJsICYmICF0aGlzLl9zaG91bGRIaWRlVVJM
KGZyYW1lLnVybCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xp
bmtpZnlDYWxsRnJhbWUoZnJhbWUpOworICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hp
bGQodXJsRWxlbWVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciB0cmVlRWxl
bWVudCA9IG5ldyBUcmVlRWxlbWVudChjb250ZW50KTsKKyAgICAgICAgICAgIHBhcmVudFRyZWVF
bGVtZW50LmFwcGVuZENoaWxkKHRyZWVFbGVtZW50KTsKKyAgICAgICAgfQorICAgIH0sCisKKyAg
ICB1cGRhdGVSZXBlYXRDb3VudDogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy5yZXBl
YXRDb3VudEVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMucmVwZWF0Q291bnRFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgdGhpcy5yZXBlYXRD
b3VudEVsZW1lbnQuY2xhc3NOYW1lID0gImJ1YmJsZSI7CisKKyAgICAgICAgICAgIHRoaXMuX2Vs
ZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMucmVwZWF0Q291bnRFbGVtZW50LCB0aGlzLl9lbGVtZW50
LmZpcnN0Q2hpbGQpOworICAgICAgICB9CisgICAgICAgIHRoaXMucmVwZWF0Q291bnRFbGVtZW50
LnRleHRDb250ZW50ID0gdGhpcy5yZXBlYXRDb3VudDsKKyAgICB9LAorCisgICAgdG9TdHJpbmc6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBzb3VyY2VTdHJpbmc7CisgICAgICAgIHN3
aXRjaCAodGhpcy5zb3VyY2UpIHsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2Fj
eUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSFRNTDoKKyAgICAgICAgICAgICAgICBzb3Vy
Y2VTdHJpbmcgPSAiSFRNTCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLlhNTDoK
KyAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiWE1MIjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VTb3VyY2UuSlM6CisgICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkpTIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yazoKKyAgICAgICAgICAgICAg
ICBzb3VyY2VTdHJpbmcgPSAiTmV0d29yayI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291
cmNlLkNvbnNvbGVBUEk6CisgICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkNvbnNvbGVB
UEkiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5PdGhlcjoKKyAgICAgICAgICAg
ICAgICBzb3VyY2VTdHJpbmcgPSAiT3RoZXIiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIHR5cGVTdHJpbmc7CisgICAgICAgIHN3aXRjaCAodGhpcy50
eXBlKSB7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2Fn
ZS5NZXNzYWdlVHlwZS5Mb2c6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJMb2ciOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRGlyOgorICAgICAgICAgICAgICAgIHR5cGVT
dHJpbmcgPSAiRGlyIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkRpclhNTDoKKyAg
ICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkRpciBYTUwiOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVR5cGUuVHJhY2U6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJUcmFjZSI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5M
ZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkOgorICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5
cGUuU3RhcnRHcm91cDoKKyAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIlN0YXJ0IEdyb3Vw
IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwOgorICAgICAgICAgICAg
ICAgIHR5cGVTdHJpbmcgPSAiRW5kIEdyb3VwIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VU
eXBlLkFzc2VydDoKKyAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkFzc2VydCI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lD
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZVN0
cmluZyA9ICJSZXN1bHQiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHNvdXJjZVN0cmluZyArICIgIiArIHR5cGVTdHJpbmcgKyAiICIgKyB0aGlz
LmxldmVsU3RyaW5nICsgIjogIiArIHRoaXMuZm9ybWF0dGVkTWVzc2FnZS50ZXh0Q29udGVudCAr
ICJcbiIgKyB0aGlzLnVybCArICIgbGluZSAiICsgdGhpcy5saW5lOworICAgIH0sCisKKyAgICBn
ZXQgdGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZVRleHQ7CisgICAg
fSwKKworICAgIGlzRXF1YWw6IGZ1bmN0aW9uKG1zZykKKyAgICB7CisgICAgICAgIGlmICghbXNn
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh0aGlzLl9zdGFja1Ry
YWNlKSB7CisgICAgICAgICAgICBpZiAoIW1zZy5fc3RhY2tUcmFjZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB2YXIgbCA9IHRoaXMuX3N0YWNrVHJhY2U7Cisg
ICAgICAgICAgICB2YXIgciA9IG1zZy5fc3RhY2tUcmFjZTsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChsW2ldLnVy
bCAhPT0gcltpXS51cmwgfHwKKyAgICAgICAgICAgICAgICAgICAgbFtpXS5mdW5jdGlvbk5hbWUg
IT09IHJbaV0uZnVuY3Rpb25OYW1lIHx8CisgICAgICAgICAgICAgICAgICAgIGxbaV0ubGluZU51
bWJlciAhPT0gcltpXS5saW5lTnVtYmVyIHx8CisgICAgICAgICAgICAgICAgICAgIGxbaV0uY29s
dW1uTnVtYmVyICE9PSByW2ldLmNvbHVtbk51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICh0
aGlzLnNvdXJjZSA9PT0gbXNnLnNvdXJjZSkKKyAgICAgICAgICAgICYmICh0aGlzLnR5cGUgPT09
IG1zZy50eXBlKQorICAgICAgICAgICAgJiYgKHRoaXMubGV2ZWwgPT09IG1zZy5sZXZlbCkKKyAg
ICAgICAgICAgICYmICh0aGlzLmxpbmUgPT09IG1zZy5saW5lKQorICAgICAgICAgICAgJiYgKHRo
aXMudXJsID09PSBtc2cudXJsKQorICAgICAgICAgICAgJiYgKHRoaXMubWVzc2FnZSA9PT0gbXNn
Lm1lc3NhZ2UpCisgICAgICAgICAgICAmJiAodGhpcy5fcmVxdWVzdCA9PT0gbXNnLl9yZXF1ZXN0
KTsKKyAgICB9LAorCisgICAgZ2V0IHN0YWNrVHJhY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3N0YWNrVHJhY2U7CisgICAgfSwKKworICAgIGNsb25lOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLmNyZWF0
ZSh0aGlzLnNvdXJjZSwgdGhpcy5sZXZlbCwgdGhpcy5fbWVzc2FnZVRleHQsIHRoaXMudHlwZSwg
dGhpcy51cmwsIHRoaXMubGluZSwgdGhpcy5jb2x1bW4sIHRoaXMucmVwZWF0Q291bnQsIHRoaXMu
X3BhcmFtZXRlcnMsIHRoaXMuX3N0YWNrVHJhY2UsIHRoaXMuX3JlcXVlc3QpOworICAgIH0sCisK
KyAgICBnZXQgbGV2ZWxTdHJpbmcoKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0aGlzLmxldmVs
KSB7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5N
ZXNzYWdlTGV2ZWwuVGlwOgorICAgICAgICAgICAgICAgIHJldHVybiAiVGlwIjsKKyAgICAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5M
b2c6CisgICAgICAgICAgICAgICAgcmV0dXJuICJMb2ciOworICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmc6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICJXYXJuaW5nIjsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5EZWJ1ZzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIkRlYnVnIjsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2Fj
eUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gIkVycm9yIjsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBnZXQgY2xpcGJvYXJkUHJlZml4
U3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiWyIgKyB0aGlzLmxldmVsU3RyaW5nICsg
Il0gIjsKKyAgICB9LAorCisgICAgdG9DbGlwYm9hcmRTdHJpbmc6IGZ1bmN0aW9uKGlzUHJlZml4
T3B0aW9uYWwpCisgICAgeworICAgICAgICB2YXIgaXNUcmFjZSA9IHRoaXMuX3Nob3VsZER1bXBT
dGFja1RyYWNlKCk7CisKKyAgICAgICAgdmFyIGNsaXBib2FyZFN0cmluZyA9ICIiOworICAgICAg
ICBpZiAodGhpcy5fZm9ybWF0dGVkTWVzc2FnZSAmJiAhaXNUcmFjZSkKKyAgICAgICAgICAgIGNs
aXBib2FyZFN0cmluZyA9IHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UucXVlcnlTZWxlY3Rvcigic3Bh
biIpLmlubmVyVGV4dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5n
ID0gdGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVR5cGUuVHJhY2UgPyAiY29uc29sZS50cmFjZSgpIiA6IHRoaXMuX21lc3NhZ2UgfHwgdGhpcy5f
bWVzc2FnZVRleHQ7CisKKyAgICAgICAgaWYgKCFpc1ByZWZpeE9wdGlvbmFsIHx8IHRoaXMuZW5m
b3JjZXNDbGlwYm9hcmRQcmVmaXhTdHJpbmcpCisgICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcg
PSB0aGlzLmNsaXBib2FyZFByZWZpeFN0cmluZyArIGNsaXBib2FyZFN0cmluZzsKKworICAgICAg
ICBpZiAoaXNUcmFjZSkgeworICAgICAgICAgICAgdGhpcy5fc3RhY2tUcmFjZS5mb3JFYWNoKGZ1
bmN0aW9uKGZyYW1lKSB7CisgICAgICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5nICs9ICJcblx0
IiArIChmcmFtZS5mdW5jdGlvbk5hbWUgfHwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnlt
b3VzIGZ1bmN0aW9uKSIpKTsKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUudXJsKQorICAgICAg
ICAgICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgKz0gIiAoIiArIFdlYkluc3BlY3Rvci5kaXNw
bGF5TmFtZUZvclVSTChmcmFtZS51cmwpICsgIiwgbGluZSAiICsgZnJhbWUubGluZU51bWJlciAr
ICIpIjsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFy
IHJlcGVhdFN0cmluZyA9IHRoaXMucmVwZWF0Q291bnQgPiAxID8gIngiICsgdGhpcy5yZXBlYXRD
b3VudCA6ICIiOworCisgICAgICAgICAgICB2YXIgdXJsTGluZSA9ICIiOworICAgICAgICAgICAg
aWYgKHRoaXMudXJsKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBbV2ViSW5z
cGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKHRoaXMudXJsKSwgImxpbmUgIiArIHRoaXMubGluZV07
CisgICAgICAgICAgICAgICAgaWYgKHJlcGVhdFN0cmluZykKKyAgICAgICAgICAgICAgICAgICAg
Y29tcG9uZW50cy5wdXNoKHJlcGVhdFN0cmluZyk7CisgICAgICAgICAgICAgICAgdXJsTGluZSA9
ICIgKCIgKyBjb21wb25lbnRzLmpvaW4oIiwgIikgKyAiKSI7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHJlcGVhdFN0cmluZykKKyAgICAgICAgICAgICAgICB1cmxMaW5lID0gIiAoIiArIHJlcGVh
dFN0cmluZyArICIpIjsKKworICAgICAgICAgICAgaWYgKHVybExpbmUpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgbGluZXMgPSBjbGlwYm9hcmRTdHJpbmcuc3BsaXQoIlxuIik7CisgICAgICAgICAg
ICAgICAgbGluZXNbMF0gKz0gdXJsTGluZTsKKyAgICAgICAgICAgICAgICBjbGlwYm9hcmRTdHJp
bmcgPSBsaW5lcy5qb2luKCJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGNsaXBib2FyZFN0cmluZzsKKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3Iu
TGVnYWN5Q29uc29sZU1lc3NhZ2UucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTG9nQ29udGVudFZpZXcuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Mb2dDb250ZW50Vmlldy5qcwppbmRl
eCBmZjQ5NGUzLi40N2YwY2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9Mb2dDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Mb2dDb250ZW50Vmlldy5qcwpAQCAtMTc2LDcgKzE3
Niw3IEBAIFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAg
IFdlYkluc3BlY3Rvci5xdWlja0NvbnNvbGUudXBkYXRlTGF5b3V0KCk7CiAKICAgICAgICAgLy8g
TmVzdCB0aGUgbWVzc2FnZS4KLSAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSAhPT0gV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwKSB7CisgICAgICAgIGlmICht
ZXNzYWdlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5FbmRHcm91cCkgewogICAgICAgICAgICAgdmFyIHggPSAxNiAqIHRoaXMuX25lc3RpbmdM
ZXZlbDsKICAgICAgICAgICAgIHZhciBtZXNzYWdlRWxlbWVudCA9IG1lc3NhZ2UudG9NZXNzYWdl
RWxlbWVudCgpOwogICAgICAgICAgICAgbWVzc2FnZUVsZW1lbnQuc3R5bGUubGVmdCA9IHggKyAi
cHgiOwpAQCAtMTg1LDExICsxODUsMTEgQEAgV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnBy
b3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBVcGRhdGUgdGhlIG5lc3RpbmcgbGV2ZWwuCiAgICAg
ICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXA6Ci0gICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQ6Cisg
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBl
LlN0YXJ0R3JvdXA6CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQ6CiAgICAgICAgICAgICArK3RoaXMu
X25lc3RpbmdMZXZlbDsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cDoKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRW5kR3JvdXA6CiAg
ICAgICAgICAgICAtLXRoaXMuX25lc3RpbmdMZXZlbDsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0yMDIsNyArMjAyLDcgQEAgV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnBy
b3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBXZSBvbmx5IGF1dG8gc2hvdyB0aGUgY29uc29sZSBp
ZiB0aGUgbWVzc2FnZSBpcyBhIHJlc3VsdC4KICAgICAgICAgLy8gVGhpcyBpcyB3aGVuIHRoZSB1
c2VyIGV2YWx1YXRlZCBzb21ldGhpbmcgZGlyZWN0bHkgaW4gdGhlIHByb21wdC4KLSAgICAgICAg
aWYgKG1lc3NhZ2UudHlwZSAhPT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VU
eXBlLlJlc3VsdCkKKyAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSAhPT0gV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlJlc3VsdCkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5pc1Nob3dpbmdDb25zb2xlVmlldygpKQpA
QCAtMzMwLDcgKzMzMCw3IEBAIFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICB0aGlzLl9wcm92aXNpb25hbE1lc3NhZ2VzLnB1c2goZXZlbnQuZGF0
YS5tZXNzYWdlKTsKIAogICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMuX2xvZ1ZpZXdDb250cm9s
bGVyLmFwcGVuZENvbnNvbGVNZXNzYWdlKGV2ZW50LmRhdGEubWVzc2FnZSk7Ci0gICAgICAgIGlm
IChtZXNzYWdlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5FbmRHcm91cCkKKyAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSAhPT0gV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwKQogICAgICAgICAgICAgdGhp
cy5fZmlsdGVyTWVzc2FnZXMoW21lc3NhZ2UudG9NZXNzYWdlRWxlbWVudCgpXSk7CiAgICAgfSwK
IApAQCAtNjc3LDE0ICs2NzcsMTQgQEAgV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHZhciB2aXNpYmxlID0gc2hvd3NBbGwgfHwgbWVzc2FnZS5j
b21tYW5kIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kIHx8IG1lc3NhZ2Uu
bWVzc2FnZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdDsKICAg
ICAgICAgICAgIGlmICghdmlzaWJsZSkgewogICAgICAgICAgICAgICAgIHN3aXRjaChtZXNzYWdl
Lm1lc3NhZ2UubGV2ZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmc6CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJu
aW5nOgogICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IHNob3dzV2FybmluZ3M7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdl
TGV2ZWwuRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlID0gc2hvd3NFcnJv
cnM7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZzoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxl
dmVsLkRlYnVnOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lD
b25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgorICAgICAgICAgICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVidWc6CiAg
ICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlID0gc2hvd3NMb2dzOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtOTk2LDcgKzk5Niw3IEBA
IFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZm9y
ICh2YXIgcHJvdmlzaW9uYWxNZXNzYWdlIG9mIHRoaXMuX3Byb3Zpc2lvbmFsTWVzc2FnZXMpIHsK
ICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5fbG9nVmlld0NvbnRyb2xsZXIuYXBwZW5k
Q29uc29sZU1lc3NhZ2UocHJvdmlzaW9uYWxNZXNzYWdlKTsKLSAgICAgICAgICAgIGlmIChtZXNz
YWdlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRH
cm91cCkKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cCkKICAgICAgICAgICAgICAgICB0
aGlzLl9maWx0ZXJNZXNzYWdlcyhbbWVzc2FnZS50b01lc3NhZ2VFbGVtZW50KCldKTsKICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9yVUku
dmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1dl
Ykluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvagppbmRleCA0NWQyNGQ5
Li4wNDc4Y2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9y
VUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2oKQEAgLTMx
NSw4ICszMTUsOCBAQAogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcQ29uc29s
ZUNvbW1hbmQuanMiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxDb25z
b2xlQ29tbWFuZFJlc3VsdC5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJm
YWNlXENvbnNvbGVHcm91cC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJm
YWNlXENvbnNvbGVNZXNzYWdlLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRl
cmZhY2VcQ29uc29sZU1lc3NhZ2VJbXBsLmpzIiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVz
ZXJJbnRlcmZhY2VcTGVnYWN5Q29uc29sZU1lc3NhZ2UuanMiIC8+CisgICAgPE5vbmUgSW5jbHVk
ZT0iLi5cVXNlckludGVyZmFjZVxMZWdhY3lDb25zb2xlTWVzc2FnZUltcGwuanMiIC8+CiAgICAg
PE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxDb25zb2xlT2JzZXJ2ZXIuanMiIC8+CiAg
ICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxDb25zb2xlUHJvbXB0LmNzcyIgLz4K
ICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXENvbnNvbGVQcm9tcHQuanMiIC8+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9yVUkudmN4cHJv
ai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
V2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qLmZpbHRlcnMKaW5k
ZXggOGMwZDc5MS4uZGRhNzYyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1dl
Ykluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvai5maWx0ZXJzCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYkluc3BlY3Rv
clVJLnZjeHByb2ouZmlsdGVycwpAQCAtMTk1LDEwICsxOTUsMTAgQEAKICAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxVc2VySW50ZXJmYWNlXENvbnNvbGVHcm91cC5qcyI+CiAgICAgICA8RmlsdGVyPlVz
ZXJJbnRlcmZhY2U8L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
VXNlckludGVyZmFjZVxDb25zb2xlTWVzc2FnZS5qcyI+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5c
VXNlckludGVyZmFjZVxMZWdhY3lDb25zb2xlTWVzc2FnZS5qcyI+CiAgICAgICA8RmlsdGVyPlVz
ZXJJbnRlcmZhY2U8L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
VXNlckludGVyZmFjZVxDb25zb2xlTWVzc2FnZUltcGwuanMiPgorICAgIDxOb25lIEluY2x1ZGU9
Ii4uXFVzZXJJbnRlcmZhY2VcTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpzIj4KICAgICAgIDxG
aWx0ZXI+VXNlckludGVyZmFjZTwvRmlsdGVyPgogICAgIDwvTm9uZT4KICAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxVc2VySW50ZXJmYWNlXENvbnNvbGVPYnNlcnZlci5qcyI+Cg==
</data>
<flag name="commit-queue"
          id="273639"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248788</attachid>
            <date>2015-03-16 20:04:49 -0700</date>
            <delta_ts>2015-03-16 20:56:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>93980</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGZjNjE1YzYuLjNiOTE1OTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDE1LTAzLTE1ICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbmFt
ZSBDb25zb2xlTWVzc2FnZSBhbmQgQ29uc29sZU1lc3NhZ2VJbXBsIHRvIExlZ2FjeUNvbnNvbGVN
ZXNzYWdlIGFuZCBMZWdhY3lDb25zb2xlTWVzc2FnZUltcGwgcmVzcGVjdGl2ZWx5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3MTIKKworICAgICAg
ICBBcyBhIGZpcnN0IHN0ZXAgb2YgQ29uc29sZU1lc3NhZ2UgcmVmYWN0b3JpbmcgKGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTkpOgorCisgICAgICAgICAgLSBS
ZW5hbWUgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlIGNsYXNzIHRvIFdlYkluc3BlY3Rvci5M
ZWdhY3lDb25zb2xlTWVzc2FnZQorICAgICAgICAgIC0gUmVuYW1lIFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZUltcGwgY2xhc3MgdG8gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdl
SW1wbAorICAgICAgICAgIC0gUmVuYW1lIENvbnNvbGVNZXNzYWdlLmpzIGZpbGUgdG8gTGVnYWN5
Q29uc29sZU1lc3NhZ2UuanMKKyAgICAgICAgICAtIFJlbmFtZSBDb25zb2xlTWVzc2FnZUltcGwg
ZmlsZSB0byBMZWdhY3lDb25zb2xlTWVzc2FnZUltcGwuanMKKworICAgICAgICBSZXZpZXdlZCBi
eSBKb3NlcGggUGVjb3Jhcm8uCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5K
YXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLl9hcHBlbmRDb25zb2xlTWVzc2Fn
ZSk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlLm1lc3NhZ2VXYXNBZGRl
ZCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgICogVXNlcklu
dGVyZmFjZS9Nb2RlbHMvRGVmYXVsdERhc2hib2FyZC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5EZWZhdWx0RGFzaGJvYXJkLnByb3RvdHlwZS5faW5jcmVtZW50Q29uc29sZU1lc3NhZ2VUeXBl
KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0Lmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5wcm90b3R5cGUudG9NZXNzYWdlRWxl
bWVudCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlR3JvdXAuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLnByb3RvdHlwZS5yZW5kZXIpOgorICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvTGVnYWN5Q29uc29sZU1lc3NhZ2UuanM6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xl
TWVzc2FnZS5qcy4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UucHJvdG90eXBlLmlz
RXJyb3JPcldhcm5pbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNz
YWdlLnByb3RvdHlwZS51cGRhdGVSZXBlYXRDb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
TGVnYWN5Q29uc29sZU1lc3NhZ2UucHJvdG90eXBlLmNsb25lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5jcmVhdGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvVmlld3MvTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpzOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VJbXBsLmpz
LgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fZm9y
bWF0TWVzc2FnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJ
bXBsLnByb3RvdHlwZS5fc2hvdWxkRHVtcFN0YWNrVHJhY2UpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX3Nob3VsZEhpZGVVUkwpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUu
X2ZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lD
b25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLmdldCBtZXNzYWdlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLmdldCBmb3JtYXR0ZWRN
ZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwu
cHJvdG90eXBlLl9saW5raWZ5TG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2Fj
eUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX2xpbmtpZnlDYWxsRnJhbWUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuaXNFcnJv
ck9yV2FybmluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJ
bXBsLnByb3RvdHlwZS5fZm9ybWF0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25z
b2xlTWVzc2FnZUltcGwucHJvdG90eXBlLl9pc0V4cGFuZGFibGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX2Zvcm1hdFBhcmFtZXRl
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3Rv
dHlwZS5fZm9ybWF0UGFyYW1ldGVyQXNWYWx1ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3Qp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5
cGUuX2Zvcm1hdFBhcmFtZXRlckFzU3RyaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLl9mb3JtYXRQYXJhbWV0ZXJBc05vZGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUu
X2Zvcm1hdFBhcmFtZXRlckFzQXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNv
bnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX3Jvb3RQcm9wZXJ0eVBhdGhGb3JPYmplY3QpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUu
X3VzZXJQcm92aWRlZENvbHVtbk5hbWVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lD
b25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLl9mb3JtYXRQYXJhbWV0ZXJBc1RhYmxlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlw
ZS5zdHJpbmdGb3JtYXR0ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVN
ZXNzYWdlSW1wbC5wcm90b3R5cGUuZmxvYXRGb3JtYXR0ZXIpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuaW50ZWdlckZvcm1hdHRlcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlw
ZS5zdHlsZUZvcm1hdHRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1l
c3NhZ2VJbXBsLnByb3RvdHlwZS5pc1doaXRlbGlzdGVkUHJvcGVydHkpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuYXBwZW5kKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLl9m
b3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLmRlY29yYXRlTWVzc2FnZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUu
dG9NZXNzYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1l
c3NhZ2VJbXBsLnByb3RvdHlwZS5fcG9wdWxhdGVTdGFja1RyYWNlVHJlZUVsZW1lbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUudXBk
YXRlUmVwZWF0Q291bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNz
YWdlSW1wbC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxlZ2Fj
eUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuZ2V0IHRleHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuaXNFcXVhbCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5nZXQg
c3RhY2tUcmFjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJ
bXBsLnByb3RvdHlwZS5jbG9uZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29s
ZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5nZXQgbGV2ZWxTdHJpbmcpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuZ2V0IGNsaXBib2FyZFBy
ZWZpeFN0cmluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJ
bXBsLnByb3RvdHlwZS50b0NsaXBib2FyZFN0cmluZyk6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9WaWV3cy9Mb2dDb250ZW50Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250
ZW50Vmlldy5wcm90b3R5cGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbWVzc2FnZUFkZGVkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2ZpbHRlck1lc3NhZ2Vz
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlYXBw
ZW5kUHJvdmlzaW9uYWxNZXNzYWdlcyk6CisgICAgICAgICogV2ViSW5zcGVjdG9yVUkudmN4cHJv
ai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qOgorICAgICAgICAqIFdlYkluc3BlY3RvclVJLnZjeHBy
b2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvai5maWx0ZXJzOgorCiAyMDE1LTAzLTEyICBKb25vIFdl
bGxzICA8am9ub3dlbGxzQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBEZWJ1
Z2dlciBzaWRlYmFyIHNob3VsZCBncm91cCBnbG9iYWwgYnJlYWtwb2ludHMgdG9nZXRoZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qcwpp
bmRleCBiNGQxNjJjLi41YzJiMTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2
YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzCkBAIC0yNzYsMTIgKzI3NiwxMiBAQCBXZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
aWYgKCFyZXBlYXRDb3VudFdhc0ludGVycnVwdGVkKQogICAgICAgICAgICAgdGhpcy5fcHJldmlv
dXNNZXNzYWdlID0gbXNnOwogCi0gICAgICAgIGlmIChtc2cudHlwZSA9PT0gV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwKSB7CisgICAgICAgIGlmIChtc2cu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVu
ZEdyb3VwKSB7CiAgICAgICAgICAgICB2YXIgcGFyZW50R3JvdXAgPSB0aGlzLl9jdXJyZW50Q29u
c29sZUdyb3VwLnBhcmVudEdyb3VwOwogICAgICAgICAgICAgaWYgKHBhcmVudEdyb3VwKQogICAg
ICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDb25zb2xlR3JvdXAgPSBwYXJlbnRHcm91cDsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtc2cudHlwZSA9PT0gV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXAgfHwgbXNnLnR5cGUgPT09IFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2Vk
KSB7CisgICAgICAgICAgICBpZiAobXNnLnR5cGUgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25z
b2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwIHx8IG1zZy50eXBlID09PSBXZWJJbnNw
ZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cENvbGxhcHNl
ZCkgewogICAgICAgICAgICAgICAgIHZhciBncm91cCA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29s
ZUdyb3VwKHRoaXMuX2N1cnJlbnRDb25zb2xlR3JvdXApOwogICAgICAgICAgICAgICAgIHZhciBn
cm91cEVsZW1lbnQgPSBncm91cC5yZW5kZXIobXNnKTsKICAgICAgICAgICAgICAgICB0aGlzLl9j
dXJyZW50Q29uc29sZUdyb3VwLmFwcGVuZChncm91cEVsZW1lbnQpOwpAQCAtMjkwLDcgKzI5MCw3
IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDb25zb2xlR3JvdXAuYWRkTWVzc2FnZSht
c2cpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVzdWx0IHx8IHdhc1Njcm9sbGVkVG9Cb3R0b20p
CisgICAgICAgIGlmIChtc2cudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VUeXBlLlJlc3VsdCB8fCB3YXNTY3JvbGxlZFRvQm90dG9tKQogICAgICAgICAg
ICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpOwogCiAgICAgICAgIGlmICh0aGlzLmRlbGVnYXRlICYm
IHR5cGVvZiB0aGlzLmRlbGVnYXRlLmRpZEFwcGVuZENvbnNvbGVNZXNzYWdlID09PSAiZnVuY3Rp
b24iKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvTG9nTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0xvZ01hbmFnZXIuanMKaW5kZXggYTA5ZDMwZi4uZDhmOGRiZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
TG9nTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzCkBAIC00OCw3ICs0OCw3IEBAIFdlYkluc3BlY3Rvci5M
b2dNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVj
dG9yLkNvbnNvbGVPYnNlcnZlci4KIAogICAgICAgICAvLyBGSVhNRTogUGFzcyBhIHJlcXVlc3Qu
IFdlIG5lZWQgYSB3YXkgdG8gZ2V0IGl0IGZyb20gdGhlIHJlcXVlc3QgSUQuCi0gICAgICAgIHZh
ciBjb25zb2xlTWVzc2FnZSA9IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGUoc291
cmNlLCBsZXZlbCwgdGV4dCwgdHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBw
YXJhbWV0ZXJzLCBzdGFja1RyYWNlLCBudWxsKTsKKyAgICAgICAgdmFyIGNvbnNvbGVNZXNzYWdl
ID0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLmNyZWF0ZShzb3VyY2UsIGxldmVs
LCB0ZXh0LCB0eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMs
IHN0YWNrVHJhY2UsIG51bGwpOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50Lk1lc3NhZ2VBZGRlZCwge21lc3NhZ2U6
IGNvbnNvbGVNZXNzYWdlfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01haW4uaHRtbAppbmRleCAzNzNiNmZjLi4wMDJlNTg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCkBAIC0yOTEsNyArMjkxLDcgQEAKICAg
ICA8c2NyaXB0IHNyYz0iTW9kZWxzL1R5cGVTZXQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJNb2RlbHMvVW5pdEJlemllci5qcyI+PC9zY3JpcHQ+CiAKLSAgICA8c2NyaXB0IHNyYz0i
Vmlld3MvQ29uc29sZU1lc3NhZ2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaWV3
cy9MZWdhY3lDb25zb2xlTWVzc2FnZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZp
ZXdzL0NvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGF0
YUdyaWQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9EZXRhaWxzU2VjdGlv
blJvdy5qcyI+PC9zY3JpcHQ+CkBAIC0zMDYsNyArMzA2LDcgQEAKICAgICA8c2NyaXB0IHNyYz0i
Vmlld3MvVHJlZU91dGxpbmUuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IlZpZXdz
L0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iVmll
d3MvQ29uc29sZU1lc3NhZ2VJbXBsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmll
d3MvTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iVmlld3MvRE9NVHJlZUNvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iVmlld3MvRGV0YWlsc1NpZGViYXJQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9IlZpZXdzL0dlbmVyYWxUcmVlRWxlbWVudC5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRGVmYXVsdERhc2hib2Fy
ZC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9EZWZhdWx0
RGFzaGJvYXJkLmpzCmluZGV4IDAyNzEzMGYuLmYxMDRkY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9EZWZhdWx0RGFzaGJvYXJkLmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9EZWZhdWx0RGFz
aGJvYXJkLmpzCkBAIC0yNDksMTMgKzI0OSwxMyBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdERhc2hi
b2FyZC5wcm90b3R5cGUgPSB7CiAgICAgX2luY3JlbWVudENvbnNvbGVNZXNzYWdlVHlwZTogZnVu
Y3Rpb24odHlwZSwgaW5jcmVtZW50KQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VM
ZXZlbC5Mb2c6CiAgICAgICAgICAgICB0aGlzLmxvZ3MgKz0gaW5jcmVtZW50OwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VMZXZlbC5XYXJuaW5nOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xl
TWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZzoKICAgICAgICAgICAgIHRoaXMuaXNzdWVzICs9
IGluY3JlbWVudDsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6CisgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKICAgICAgICAg
ICAgIHRoaXMuZXJyb3JzICs9IGluY3JlbWVudDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9Db25zb2xlQ29tbWFuZFJlc3VsdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzCmluZGV4IDgyYjA4OTguLmU3YzBm
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzCkBAIC0yOSwxNCArMjksMTQg
QEAKIAogV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0ID0gZnVuY3Rpb24ocmVzdWx0
LCB3YXNUaHJvd24sIG9yaWdpbmF0aW5nQ29tbWFuZCwgc2F2ZWRSZXN1bHRJbmRleCkKIHsKLSAg
ICB2YXIgbGV2ZWwgPSAod2FzVGhyb3duID8gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VMZXZlbC5FcnJvciA6IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2
ZWwuTG9nKTsKKyAgICB2YXIgbGV2ZWwgPSAod2FzVGhyb3duID8gV2ViSW5zcGVjdG9yLkxlZ2Fj
eUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvciA6IFdlYkluc3BlY3Rvci5MZWdhY3lD
b25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nKTsKICAgICB0aGlzLm9yaWdpbmF0aW5nQ29t
bWFuZCA9IG9yaWdpbmF0aW5nQ29tbWFuZDsKICAgICB0aGlzLnNhdmVkUmVzdWx0SW5kZXggPSBz
YXZlZFJlc3VsdEluZGV4OwogCiAgICAgaWYgKHRoaXMuc2F2ZWRSZXN1bHRJbmRleCAmJiB0aGlz
LnNhdmVkUmVzdWx0SW5kZXggPiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQubWF4
aW11bVNhdmVkUmVzdWx0SW5kZXgpCiAgICAgICAgIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFu
ZFJlc3VsdC5tYXhpbXVtU2F2ZWRSZXN1bHRJbmRleCA9IHRoaXMuc2F2ZWRSZXN1bHRJbmRleDsK
IAotICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwuY2FsbCh0aGlzLCBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUywgbGV2ZWwsICIiLCBudWxsLCBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVzdWx0LCB1bmRlZmluZWQs
IHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFtyZXN1bHRdKTsKKyAgICBXZWJJbnNw
ZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSlMsIGxldmVsLCAiIiwgbnVsbCwgV2Vi
SW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlJlc3VsdCwgdW5kZWZp
bmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBbcmVzdWx0XSk7CiB9OwogCiBX
ZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQubWF4aW11bVNhdmVkUmVzdWx0SW5kZXgg
PSAwOwpAQCAtNTUsNyArNTUsNyBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQu
cHJvdG90eXBlID0gewogCiAgICAgdG9NZXNzYWdlRWxlbWVudDogZnVuY3Rpb24oKQogICAgIHsK
LSAgICAgICAgdmFyIGVsZW1lbnQgPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnBy
b3RvdHlwZS50b01lc3NhZ2VFbGVtZW50LmNhbGwodGhpcyk7CisgICAgICAgIHZhciBlbGVtZW50
ID0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUudG9NZXNz
YWdlRWxlbWVudC5jYWxsKHRoaXMpOwogICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNv
bnNvbGUtdXNlci1jb21tYW5kLXJlc3VsdCIpOwogICAgICAgICBpZiAoIWVsZW1lbnQuZ2V0QXR0
cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IikpCiAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJp
YnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiT3V0cHV0OiAi
KSk7CkBAIC02OCw0ICs2OCw0IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5w
cm90b3R5cGUgPSB7CiAgICAgfQogfTsKIAotV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVz
dWx0LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBs
LnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5wcm90b3R5cGUu
X19wcm90b19fID0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5
cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9Db25zb2xlR3JvdXAuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9Db25zb2xlR3JvdXAuanMKaW5kZXggNzllYjU0ZS4uMGQ1MjU3OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZUdyb3VwLmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVH
cm91cC5qcwpAQCAtNTAsNyArNTAsNyBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGl0bGVFbGVtZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9y
LkxvZ0NvbnRlbnRWaWV3Lkl0ZW1XcmFwcGVyU3R5bGVDbGFzc05hbWUpOwogICAgICAgICB0aXRs
ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl90aXRsZUNsaWNrZWQuYmlu
ZCh0aGlzKSk7CiAgICAgICAgIHRpdGxlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRv
d24iLCB0aGlzLl90aXRsZU1vdXNlRG93bi5iaW5kKHRoaXMpKTsKLSAgICAgICAgaWYgKGdyb3Vw
RWxlbWVudCAmJiBtZXNzYWdlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkKQorICAgICAgICBpZiAoZ3JvdXBFbGVtZW50
ICYmIG1lc3NhZ2UudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQpCiAgICAgICAgICAgICBncm91cEVsZW1lbnQu
Y2xhc3NMaXN0LmFkZCgiY29sbGFwc2VkIik7CiAKICAgICAgICAgZ3JvdXBFbGVtZW50LmFwcGVu
ZENoaWxkKHRpdGxlRWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVNZXNzYWdlLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMGFjZDgyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVNZXNzYWdlLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEpv
c2VwaCBQZWNvcmFybwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlID0gZnVuY3Rpb24oc291cmNlLCBsZXZlbCwg
dXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50KQotewotICAgIHRoaXMuc291cmNlID0gc291
cmNlOwotICAgIHRoaXMubGV2ZWwgPSBsZXZlbDsKLSAgICB0aGlzLnVybCA9IHVybCB8fCBudWxs
OwotICAgIHRoaXMubGluZSA9IGxpbmUgfHwgMDsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbiB8
fCAwOwotCi0gICAgcmVwZWF0Q291bnQgPSByZXBlYXRDb3VudCB8fCAxOwotICAgIHRoaXMucmVw
ZWF0Q291bnQgPSByZXBlYXRDb3VudDsKLSAgICB0aGlzLnJlcGVhdERlbHRhID0gcmVwZWF0Q291
bnQ7Ci0gICAgdGhpcy50b3RhbFJlcGVhdENvdW50ID0gcmVwZWF0Q291bnQ7Ci19OwotCi1XZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlID0gewotICAgIGlzRXJyb3JPcldhcm5p
bmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAodGhpcy5sZXZlbCA9PT0gV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nIHx8IHRoaXMubGV2
ZWwgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IpOwot
ICAgIH0sCi0KLSAgICB1cGRhdGVSZXBlYXRDb3VudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgLy8gSW1wbGVtZW50ZWQgYnkgY29uY3JldGUgaW5zdGFuY2VzCi0gICAgfSwKLQotICAgIGNs
b25lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBJbXBsZW1lbnRlZCBieSBjb25jcmV0
ZSBpbnN0YW5jZXMKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuY3Jl
YXRlID0gZnVuY3Rpb24oc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgdHlwZSwgdXJsLCBsaW5lLCBj
b2x1bW4sIHJlcGVhdENvdW50LCBwYXJhbWV0ZXJzLCBzdGFja1RyYWNlLCByZXF1ZXN0KQotewot
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbChzb3VyY2UsIGxl
dmVsLCBtZXNzYWdlLCBudWxsLCB0eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQs
IHBhcmFtZXRlcnMsIHN0YWNrVHJhY2UsIHJlcXVlc3QpOwotfTsKLQotLy8gRklYTUU6IFN3aXRj
aCB0byBDb25zb2xlQWdlbnQuQ29uc29sZU1lc3NhZ2VTb3VyY2UuCi1XZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZSA9IHsKLSAgICBIVE1MOiAiaHRtbCIsCi0gICAgWE1M
OiAieG1sIiwKLSAgICBKUzogImphdmFzY3JpcHQiLAotICAgIE5ldHdvcms6ICJuZXR3b3JrIiwK
LSAgICBDb25zb2xlQVBJOiAiY29uc29sZS1hcGkiLAotICAgIE90aGVyOiAib3RoZXIiCi19Owot
Ci0vLyBGSVhNRTogU3dpdGNoIHRvIENvbnNvbGVBZ2VudC5Db25zb2xlTWVzc2FnZVR5cGUuCi1X
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUgPSB7Ci0gICAgTG9nOiAibG9n
IiwKLSAgICBEaXI6ICJkaXIiLAotICAgIERpclhNTDogImRpcnhtbCIsCi0gICAgVGFibGU6ICJ0
YWJsZSIsCi0gICAgVHJhY2U6ICJ0cmFjZSIsCi0gICAgU3RhcnRHcm91cDogInN0YXJ0R3JvdXAi
LAotICAgIFN0YXJ0R3JvdXBDb2xsYXBzZWQ6ICJzdGFydEdyb3VwQ29sbGFwc2VkIiwKLSAgICBF
bmRHcm91cDogImVuZEdyb3VwIiwKLSAgICBBc3NlcnQ6ICJhc3NlcnQiLAotICAgIFJlc3VsdDog
InJlc3VsdCIKLX07Ci0KLS8vIEZJWE1FOiBTd2l0Y2ggdG8gQ29uc29sZUFnZW50LkNvbnNvbGVN
ZXNzYWdlTGV2ZWwuCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsID0g
ewotICAgIFRpcDogInRpcCIsCi0gICAgTG9nOiAibG9nIiwKLSAgICBXYXJuaW5nOiAid2Fybmlu
ZyIsCi0gICAgRXJyb3I6ICJlcnJvciIsCi0gICAgRGVidWc6ICJkZWJ1ZyIKLX07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVz
c2FnZUltcGwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9D
b25zb2xlTWVzc2FnZUltcGwuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNDY5
NzUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvQ29uc29sZU1lc3NhZ2VJbXBsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsODAxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZUltcGwgPSBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBsaW5r
aWZpZXIsIHR5cGUsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCwgcGFyYW1ldGVycywg
c3RhY2tUcmFjZSwgcmVxdWVzdCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
Y2FsbCh0aGlzLCBzb3VyY2UsIGxldmVsLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQp
OwotCi0gICAgdGhpcy5fbGlua2lmaWVyID0gbGlua2lmaWVyOwotICAgIHRoaXMudHlwZSA9IHR5
cGUgfHwgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZzsKLSAgICB0
aGlzLl9tZXNzYWdlVGV4dCA9IG1lc3NhZ2U7Ci0gICAgdGhpcy5fcGFyYW1ldGVycyA9IHBhcmFt
ZXRlcnM7Ci0gICAgdGhpcy5fc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2U7Ci0gICAgdGhpcy5fcmVx
dWVzdCA9IHJlcXVlc3Q7Ci0KLSAgICB0aGlzLl9jdXN0b21Gb3JtYXR0ZXJzID0gewotICAgICAg
ICAib2JqZWN0IjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCi0gICAgICAgICJlcnJv
ciI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAotICAgICAgICAibWFwIjogdGhpcy5f
Zm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCi0gICAgICAgICJzZXQiOiB0aGlzLl9mb3JtYXRQYXJh
bWV0ZXJBc09iamVjdCwKLSAgICAgICAgIndlYWttYXAiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJB
c09iamVjdCwKLSAgICAgICAgIml0ZXJhdG9yIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmpl
Y3QsCi0gICAgICAgICJhcnJheSI6ICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc0FycmF5LAotICAg
ICAgICAibm9kZSI6ICAgdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNOb2RlLAotICAgICAgICAic3Ry
aW5nIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNTdHJpbmcKLSAgICB9OwotfTsKLQotV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUgPSB7Ci0KLSAgICBlbmZvcmNlc0Ns
aXBib2FyZFByZWZpeFN0cmluZzogdHJ1ZSwKLQotICAgIF9mb3JtYXRNZXNzYWdlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmNsYXNz
TmFtZSA9ICJjb25zb2xlLW1lc3NhZ2UtdGV4dCI7Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VUZXh0
OwotICAgICAgICBpZiAodGhpcy5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlU291cmNlLkNvbnNvbGVBUEkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy50
eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVR5cGUuVHJhY2U6Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoImNvbnNvbGUudHJhY2UoKSIpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlVHlwZS5Bc3NlcnQ6Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0g
W1dlYkluc3BlY3Rvci5VSVN0cmluZygiQXNzZXJ0aW9uIGZhaWxlZDoiKV07Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9wYXJhbWV0ZXJzKQotICAgICAgICAgICAgICAgICAgICAgICAg
YXJncyA9IGFyZ3MuY29uY2F0KHRoaXMuX3BhcmFtZXRlcnMpOwotICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVR5cGUuRGlyOgotICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fcGFy
YW1ldGVycyA/IHRoaXMuX3BhcmFtZXRlcnNbMF0gOiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBhcmdzID0gWyIlTyIsIG9ial07Ci0gICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2VUZXh0ID0gdGhpcy5fZm9ybWF0KGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9
IHRoaXMuX3BhcmFtZXRlcnMgfHwgW3RoaXMuX21lc3NhZ2VUZXh0XTsKLSAgICAgICAgICAgICAg
ICAgICAgbWVzc2FnZVRleHQgPSB0aGlzLl9mb3JtYXQoYXJncyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcmspIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1
ZXN0KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3RhY2tUcmFjZSA9IHRoaXMuX3JlcXVlc3Qu
c3RhY2tUcmFjZTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5pbml0aWF0b3Ig
JiYgdGhpcy5fcmVxdWVzdC5pbml0aWF0b3IudXJsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMudXJsID0gdGhpcy5fcmVxdWVzdC5pbml0aWF0b3IudXJsOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLmxpbmUgPSB0aGlzLl9yZXF1ZXN0LmluaXRpYXRvci5saW5lTnVtYmVyOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5sZXZlbCA9PT0gV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcikgewotICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSh0aGlzLl9yZXF1ZXN0LnJlcXVlc3RNZXRob2QgKyAiICIpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXF1ZXN0QXNO
b2RlKHRoaXMuX3JlcXVlc3QpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVl
c3QuZmFpbGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiICsgdGhpcy5fcmVxdWVzdC5sb2NhbGl6ZWRG
YWlsRGVzY3JpcHRpb24pKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoIiAiICsgdGhpcy5fcmVxdWVzdC5zdGF0dXNDb2RlICsgIiAoIiArIHRoaXMuX3JlcXVlc3Qu
c3RhdHVzVGV4dCArICIpIikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBmcmFnbWVudCA9IFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFn
bWVudFdpdGhDdXN0b21MaW5raWZpZXIodGhpcy5fbWVzc2FnZVRleHQsIFdlYkluc3BlY3Rvci5s
aW5raWZ5UmVxdWVzdEFzTm9kZS5iaW5kKG51bGwsIHRoaXMuX3JlcXVlc3QsICIiKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh0
aGlzLnVybCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgYW5jaG9yID0gV2ViSW5zcGVjdG9y
LmxpbmtpZnlVUkxBc05vZGUodGhpcy51cmwsIHRoaXMudXJsLCAiY29uc29sZS1tZXNzYWdlLXVy
bCIpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENo
aWxkKGFuY2hvcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lc3NhZ2VU
ZXh0ID0gdGhpcy5fZm9ybWF0KFt0aGlzLl9tZXNzYWdlVGV4dF0pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9wYXJhbWV0ZXJz
IHx8IFt0aGlzLl9tZXNzYWdlVGV4dF07Ci0gICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMu
X2Zvcm1hdChhcmdzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLnNvdXJjZSAhPT0g
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yayB8fCB0aGlz
Ll9yZXF1ZXN0KSB7Ci0gICAgICAgICAgICB2YXIgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUgPSB0
aGlzLl9maXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgaWYgKGZpcnN0Tm9u
TmF0aXZlQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSB0aGlz
Ll9saW5raWZ5Q2FsbEZyYW1lKGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVybCAmJiAhdGhpcy5fc2hvdWxkSGlkZVVSTCh0aGlz
LnVybCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlM
b2NhdGlvbih0aGlzLnVybCwgdGhpcy5saW5lLCB0aGlzLmNvbHVtbik7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZCh1cmxFbGVtZW50KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBw
ZW5kQ2hpbGQobWVzc2FnZVRleHQpOwotCi0gICAgICAgIGlmICh0aGlzLnNhdmVkUmVzdWx0SW5k
ZXgpIHsKLSAgICAgICAgICAgIHZhciBzYXZlZFZhcmlhYmxlRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgIHNhdmVkVmFyaWFibGVFbGVtZW50LmNs
YXNzTmFtZSA9ICJjb25zb2xlLXNhdmVkLXZhcmlhYmxlIjsKLSAgICAgICAgICAgIHNhdmVkVmFy
aWFibGVFbGVtZW50LnRleHRDb250ZW50ID0gIiA9ICQiICsgdGhpcy5zYXZlZFJlc3VsdEluZGV4
OwotICAgICAgICAgICAgaWYgKHRoaXMuX29iamVjdFRyZWUpCi0gICAgICAgICAgICAgICAgdGhp
cy5fb2JqZWN0VHJlZS5hcHBlbmRUaXRsZVN1ZmZpeChzYXZlZFZhcmlhYmxlRWxlbWVudCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5h
cHBlbmRDaGlsZChzYXZlZFZhcmlhYmxlRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAodGhpcy5fc2hvdWxkRHVtcFN0YWNrVHJhY2UoKSkgewotICAgICAgICAgICAgdmFyIG9sID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKLSAgICAgICAgICAgIG9sLmNsYXNzTmFtZSA9
ICJvdXRsaW5lLWRpc2Nsb3N1cmUiOwotICAgICAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gbmV3
IFRyZWVPdXRsaW5lKG9sKTsKLQotICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9mb3Jt
YXR0ZWRNZXNzYWdlOwotICAgICAgICAgICAgdmFyIHJvb3QgPSBuZXcgVHJlZUVsZW1lbnQoY29u
dGVudCwgbnVsbCwgdHJ1ZSk7Ci0gICAgICAgICAgICBjb250ZW50LnRyZWVFbGVtZW50Rm9yVGVz
dCA9IHJvb3Q7Ci0gICAgICAgICAgICB0cmVlT3V0bGluZS5hcHBlbmRDaGlsZChyb290KTsKLSAg
ICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlVHlwZS5UcmFjZSkKLSAgICAgICAgICAgICAgICByb290LmV4cGFuZCgpOwotCi0gICAg
ICAgICAgICB0aGlzLl9wb3B1bGF0ZVN0YWNrVHJhY2VUcmVlRWxlbWVudChyb290KTsKLSAgICAg
ICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UgPSBvbDsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFRoaXMgaXMgdXNlZCBmb3IgaW5saW5lIG1lc3NhZ2UgYnViYmxlcyBpbiBTb3VyY2VGcmFt
ZXMsIG9yIG90aGVyIHBsYWluLXRleHQgcmVwcmVzZW50YXRpb25zLgotICAgICAgICB0aGlzLl9t
ZXNzYWdlID0gbWVzc2FnZVRleHQudGV4dENvbnRlbnQ7Ci0gICAgfSwKLQotICAgIF9zaG91bGRE
dW1wU3RhY2tUcmFjZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5f
c3RhY2tUcmFjZSAmJiB0aGlzLl9zdGFja1RyYWNlLmxlbmd0aCAmJiAodGhpcy5zb3VyY2UgPT09
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcmsgfHwgdGhp
cy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJv
ciB8fCB0aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5UcmFjZSk7Ci0gICAgfSwKLQotICAgIF9zaG91bGRIaWRlVVJMOiBmdW5jdGlvbih1cmwpCi0g
ICAgewotICAgICAgICByZXR1cm4gdXJsID09PSAidW5kZWZpbmVkIiB8fCB1cmwgPT09ICJbbmF0
aXZlIGNvZGVdIjsKLSAgICB9LAotCi0gICAgX2ZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3N0YWNrVHJhY2UpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbDsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3N0YWNr
VHJhY2UubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuX3N0YWNr
VHJhY2VbaV07Ci0gICAgICAgICAgICBpZiAoIWZyYW1lLnVybCB8fCBmcmFtZS51cmwgPT09ICJb
bmF0aXZlIGNvZGVdIikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJl
dHVybiBmcmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0K
LSAgICBnZXQgbWVzc2FnZSgpCi0gICAgewotICAgICAgICAvLyBmb3JjZSBtZXNzYWdlIGZvcm1h
dHRpbmcKLSAgICAgICAgdmFyIGZvcm1hdHRlZE1lc3NhZ2UgPSB0aGlzLmZvcm1hdHRlZE1lc3Nh
Z2U7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlOwotICAgIH0sCi0KLSAgICBnZXQgZm9y
bWF0dGVkTWVzc2FnZSgpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlZE1lc3Nh
Z2UpCi0gICAgICAgICAgICB0aGlzLl9mb3JtYXRNZXNzYWdlKCk7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9mb3JtYXR0ZWRNZXNzYWdlOwotICAgIH0sCi0KLSAgICBfbGlua2lmeUxvY2F0aW9uOiBm
dW5jdGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAgICAgIC8v
IENvbnNvbGVNZXNzYWdlIHN0YWNrIHRyYWNlIGxpbmUgbnVtYmVycyBhcmUgb25lLWJhc2VkLgot
ICAgICAgICBsaW5lTnVtYmVyID0gbGluZU51bWJlciA/IGxpbmVOdW1iZXIgLSAxIDogMDsKLSAg
ICAgICAgY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyID8gY29sdW1uTnVtYmVyIC0gMSA6IDA7
Ci0KLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5saW5raWZ5TG9jYXRpb24odXJsLCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIsICJjb25zb2xlLW1lc3NhZ2UtdXJsIik7Ci0gICAgfSwKLQot
ICAgIF9saW5raWZ5Q2FsbEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fbGlua2lmeUxvY2F0aW9uKGNhbGxGcmFtZS51cmwsIGNhbGxGcmFtZS5s
aW5lTnVtYmVyLCBjYWxsRnJhbWUuY29sdW1uTnVtYmVyKTsKLSAgICB9LAotCi0gICAgaXNFcnJv
ck9yV2FybmluZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLmxldmVs
ID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmcgfHwg
dGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5F
cnJvcik7Ci0gICAgfSwKLQotICAgIF9mb3JtYXQ6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCi0gICAg
ewotICAgICAgICAvLyBUaGlzIG5vZGUgaXMgdXNlZCBsaWtlIGEgQnVpbGRlci4gVmFsdWVzIGFy
ZSBjb250aW51YWxseSBhcHBlbmRlZCBvbnRvIGl0LgotICAgICAgICB2YXIgZm9ybWF0dGVkUmVz
dWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBpZiAoIXBhcmFt
ZXRlcnMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFJlc3VsdDsKLQotICAg
ICAgICAvLyBGb3JtYXR0aW5nIGNvZGUgYmVsb3cgYXNzdW1lcyB0aGF0IHBhcmFtZXRlcnMgYXJl
IGFsbCB3cmFwcGVycyB3aGVyZWFzIGZyb250ZW5kIGNvbnNvbGUKLSAgICAgICAgLy8gQVBJIGFs
bG93cyBwYXNzaW5nIGFyYml0cmFyeSB2YWx1ZXMgYXMgbWVzc2FnZXMgKHN0cmluZ3MsIG51bWJl
cnMsIGV0Yy4pLiBXcmFwIHRoZW0gaGVyZS4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBw
YXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogT25seSBwYXNz
IHJ1bnRpbWUgd3JhcHBlcnMgaGVyZS4KLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzW2ldIGlu
c3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzW2ldID09PSAib2JqZWN0
IikKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9i
amVjdC5mcm9tUGF5bG9hZChwYXJhbWV0ZXJzW2ldKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9t
UHJpbWl0aXZlVmFsdWUocGFyYW1ldGVyc1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBU
aGVyZSBjYW4gYmUgc3RyaW5nIGxvZyBhbmQgc3RyaW5nIGV2YWwgcmVzdWx0LiBXZSBkaXN0aW5n
dWlzaCBiZXR3ZWVuIHRoZW0gYmFzZWQgb24gbWVzc2FnZSB0eXBlLgotICAgICAgICB2YXIgc2hv
dWxkRm9ybWF0TWVzc2FnZSA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QudHlwZShwYXJhbWV0
ZXJzWzBdKSA9PT0gInN0cmluZyIgJiYgdGhpcy50eXBlICE9PSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVzdWx0OwotCi0gICAgICAgIGlmIChzaG91bGRGb3JtYXRN
ZXNzYWdlKSB7Ci0gICAgICAgICAgICAvLyBNdWx0aXBsZSBwYXJhbWV0ZXJzIHdpdGggdGhlIGZp
cnN0IGJlaW5nIGEgZm9ybWF0IHN0cmluZy4gU2F2ZSB1bnVzZWQgc3Vic3RpdHV0aW9ucy4KLSAg
ICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5n
KHBhcmFtZXRlcnMsIGZvcm1hdHRlZFJlc3VsdCk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzID0g
cmVzdWx0LnVudXNlZFN1YnN0aXR1dGlvbnM7Ci0gICAgICAgICAgICBpZiAocGFyYW1ldGVycy5s
ZW5ndGgpCi0gICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCIgIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRhYmxlKSB7
Ci0gICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQodGhpcy5fZm9ybWF0UGFy
YW1ldGVyQXNUYWJsZShwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVk
UmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlciwgb3IgdW51
c2VkIHN1YnN0aXR1dGlvbnMgZnJvbSBhYm92ZS4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBwYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgc3RyaW5n
cyB3aGVuIGZvcm1hdHRpbmcuCi0gICAgICAgICAgICBpZiAoc2hvdWxkRm9ybWF0TWVzc2FnZSAm
JiBwYXJhbWV0ZXJzW2ldLnR5cGUgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAg
c3Bhbi5jbGFzc0xpc3QuYWRkKCJ0eXBlLXN0cmluZyIpOwotICAgICAgICAgICAgICAgIHNwYW4u
dGV4dENvbnRlbnQgPSBwYXJhbWV0ZXJzW2ldLmRlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAg
IGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChzcGFuKTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQ
YXJhbWV0ZXIocGFyYW1ldGVyc1tpXSwgZmFsc2UpKTsKLQotICAgICAgICAgICAgaWYgKGkgPCBw
YXJhbWV0ZXJzLmxlbmd0aCAtIDEgJiYgIXRoaXMuX2lzRXhwYW5kYWJsZShwYXJhbWV0ZXJzW2ld
KSkKLSAgICAgICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoIiAiKSk7Ci0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZm9ybWF0
dGVkUmVzdWx0OwotICAgIH0sCi0KLSAgICBfaXNFeHBhbmRhYmxlOiBmdW5jdGlvbihyZW1vdGVP
YmplY3QpIHsKLSAgICAgICAgaWYgKCFyZW1vdGVPYmplY3QpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgaWYgKHJlbW90ZU9iamVjdC5oYXNDaGlsZHJlbiAmJiByZW1vdGVP
YmplY3QucHJldmlldyAmJiByZW1vdGVPYmplY3QucHJldmlldy5sb3NzbGVzcykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gcmVtb3RlT2JqZWN0Lmhhc0NoaWxk
cmVuOwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVyOiBmdW5jdGlvbihvdXRwdXQsIGZv
cmNlT2JqZWN0Rm9ybWF0KQotICAgIHsKLSAgICAgICAgdmFyIHR5cGU7Ci0gICAgICAgIGlmIChm
b3JjZU9iamVjdEZvcm1hdCkKLSAgICAgICAgICAgIHR5cGUgPSAib2JqZWN0IjsKLSAgICAgICAg
ZWxzZSBpZiAob3V0cHV0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCkKLSAg
ICAgICAgICAgIHR5cGUgPSBvdXRwdXQuc3VidHlwZSB8fCBvdXRwdXQudHlwZTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiBvdXRwdXQ7Ci0KLSAgICAgICAgdmFyIGZv
cm1hdHRlciA9IHRoaXMuX2N1c3RvbUZvcm1hdHRlcnNbdHlwZV07Ci0gICAgICAgIGlmICghZm9y
bWF0dGVyKQotICAgICAgICAgICAgZm9ybWF0dGVyID0gdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNW
YWx1ZTsKLQotICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i
KTsKLQotICAgICAgICBpZiAodGhpcy5faXNFeHBhbmRhYmxlKG91dHB1dCkpCi0gICAgICAgICAg
ICBzcGFuLmNsYXNzTGlzdC5hZGQoImV4cGFuZGFibGUiKTsKLQotICAgICAgICBmb3JtYXR0ZXIu
Y2FsbCh0aGlzLCBvdXRwdXQsIHNwYW4sIGZvcmNlT2JqZWN0Rm9ybWF0KTsKLSAgICAgICAgcmV0
dXJuIHNwYW47Ci0gICAgfSwKLQotICAgIF9mb3JtYXRQYXJhbWV0ZXJBc1ZhbHVlOiBmdW5jdGlv
bih2YWx1ZSwgZWxlbSkKLSAgICB7Ci0gICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoV2ViSW5zcGVj
dG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JSZW1vdGVPYmplY3QodmFsdWUpKTsK
LSAgICB9LAotCi0gICAgX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0OiBmdW5jdGlvbihvYmosIGVs
ZW0sIGZvcmNlRXhwYW5zaW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5fb2JqZWN0VHJlZSA9IG5l
dyBXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcob2JqLCBXZWJJbnNwZWN0b3IuT2JqZWN0VHJl
ZVZpZXcuTW9kZS5Qcm9wZXJ0aWVzLCB0aGlzLl9yb290UHJvcGVydHlQYXRoRm9yT2JqZWN0KG9i
aiksIGZvcmNlRXhwYW5zaW9uKTsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0aGlzLl9vYmpl
Y3RUcmVlLmVsZW1lbnQpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNTdHJpbmc6
IGZ1bmN0aW9uKG91dHB1dCwgZWxlbSkKLSAgICB7Ci0gICAgICAgIHZhciBzcGFuID0gV2ViSW5z
cGVjdG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUxpbmtpZmllZEVsZW1lbnRTdHJpbmcob3V0cHV0
LmRlc2NyaXB0aW9uKTsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChzcGFuKTsKLSAgICB9LAot
Ci0gICAgX2Zvcm1hdFBhcmFtZXRlckFzTm9kZTogZnVuY3Rpb24ob2JqZWN0LCBlbGVtKQotICAg
IHsKLSAgICAgICAgdmFyIHNwYW4gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRl
RWxlbWVudEZvck5vZGUob2JqZWN0KTsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChzcGFuKTsK
LSAgICB9LAotCi0gICAgX2Zvcm1hdFBhcmFtZXRlckFzQXJyYXk6IGZ1bmN0aW9uKGFyciwgZWxl
bSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX29iamVjdFRyZWUgPSBuZXcgV2ViSW5zcGVjdG9yLk9i
amVjdFRyZWVWaWV3KGFyciwgV2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3Lk1vZGUuUHJvcGVy
dGllcywgdGhpcy5fcm9vdFByb3BlcnR5UGF0aEZvck9iamVjdChhcnIpKTsKLSAgICAgICAgZWxl
bS5hcHBlbmRDaGlsZCh0aGlzLl9vYmplY3RUcmVlLmVsZW1lbnQpOwotICAgIH0sCi0KLSAgICBf
cm9vdFByb3BlcnR5UGF0aEZvck9iamVjdDogZnVuY3Rpb24ob2JqZWN0KQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLnNhdmVkUmVzdWx0SW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsK
LQotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Qcm9wZXJ0eVBhdGgob2JqZWN0LCAi
JCIgKyB0aGlzLnNhdmVkUmVzdWx0SW5kZXgpOwotICAgIH0sCi0KLSAgICBfdXNlclByb3ZpZGVk
Q29sdW1uTmFtZXM6IGZ1bmN0aW9uKGNvbHVtbk5hbWVzQXJndW1lbnQpCi0gICAgewotICAgICAg
ICBpZiAoIWNvbHVtbk5hbWVzQXJndW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQot
ICAgICAgICB2YXIgcmVtb3RlT2JqZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9t
UGF5bG9hZChjb2x1bW5OYW1lc0FyZ3VtZW50KTsKLQotICAgICAgICAvLyBTaW5nbGUgcHJpbWl0
aXZlIGFyZ3VtZW50LgotICAgICAgICBpZiAocmVtb3RlT2JqZWN0LnR5cGUgPT09ICJzdHJpbmci
IHx8IHJlbW90ZU9iamVjdC50eXBlID09PSAibnVtYmVyIikKLSAgICAgICAgICAgIHJldHVybiBb
U3RyaW5nKGNvbHVtbk5hbWVzQXJndW1lbnQudmFsdWUpXTsKLQotICAgICAgICAvLyBJZ25vcmUg
ZXZlcnl0aGluZyB0aGF0IGlzIG5vdCBhbiBhcnJheSB3aXRoIHByb3BlcnR5IHByZXZpZXdzLgot
ICAgICAgICBpZiAocmVtb3RlT2JqZWN0LnR5cGUgIT09ICJvYmplY3QiIHx8IHJlbW90ZU9iamVj
dC5zdWJ0eXBlICE9PSAiYXJyYXkiIHx8ICFyZW1vdGVPYmplY3QucHJldmlldyB8fCAhcmVtb3Rl
T2JqZWN0LnByZXZpZXcucHJvcGVydHlQcmV2aWV3cykKLSAgICAgICAgICAgIHJldHVybiBudWxs
OwotCi0gICAgICAgIC8vIEFycmF5LiBMb29rIGludG8gdGhlIHByZXZpZXcgYW5kIGdldCBzdHJp
bmcgdmFsdWVzLgotICAgICAgICB2YXIgZXh0cmFjdGVkQ29sdW1uTmFtZXMgPSBbXTsKLSAgICAg
ICAgZm9yICh2YXIgcHJvcGVydHlQcmV2aWV3IG9mIHJlbW90ZU9iamVjdC5wcmV2aWV3LnByb3Bl
cnR5UHJldmlld3MpIHsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eVByZXZpZXcudHlwZSA9PT0g
InN0cmluZyIgfHwgcHJvcGVydHlQcmV2aWV3LnR5cGUgPT09ICJudW1iZXIiKQotICAgICAgICAg
ICAgICAgIGV4dHJhY3RlZENvbHVtbk5hbWVzLnB1c2goU3RyaW5nKHByb3BlcnR5UHJldmlldy52
YWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV4dHJhY3RlZENvbHVtbk5hbWVz
Lmxlbmd0aCA/IGV4dHJhY3RlZENvbHVtbk5hbWVzIDogbnVsbDsKLSAgICB9LAotCi0gICAgX2Zv
cm1hdFBhcmFtZXRlckFzVGFibGU6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCi0gICAgewotICAgICAg
ICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAg
dmFyIHRhYmxlID0gcGFyYW1ldGVyc1swXTsKLSAgICAgICAgaWYgKCF0YWJsZSB8fCAhdGFibGUu
cHJldmlldykKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwotCi0gICAgICAgIHZhciByb3dz
ID0gW107Ci0gICAgICAgIHZhciBjb2x1bW5OYW1lcyA9IFtdOwotICAgICAgICB2YXIgZmxhdFZh
bHVlcyA9IFtdOwotICAgICAgICB2YXIgcHJldmlldyA9IHRhYmxlLnByZXZpZXc7Ci0gICAgICAg
IHZhciB1c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyA9IGZhbHNlOwotCi0gICAgICAgIC8vIFVzZXIg
cHJvdmlkZWQgY29sdW1uTmFtZXMuCi0gICAgICAgIHZhciBleHRyYWN0ZWRDb2x1bW5OYW1lcyA9
IHRoaXMuX3VzZXJQcm92aWRlZENvbHVtbk5hbWVzKHBhcmFtZXRlcnNbMV0pOwotICAgICAgICBp
ZiAoZXh0cmFjdGVkQ29sdW1uTmFtZXMpIHsKLSAgICAgICAgICAgIHVzZXJQcm92aWRlZENvbHVt
bk5hbWVzID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbHVtbk5hbWVzID0gZXh0cmFjdGVkQ29sdW1u
TmFtZXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayBmaXJzdCBmb3IgdmFsdWVQcmV2
aWV3cyBpbiB0aGUgcHJvcGVydGllcyBtZWFuaW5nIHRoaXMgd2FzIGFuIGFycmF5IG9mIG9iamVj
dHMuCi0gICAgICAgIGlmIChwcmV2aWV3LnByb3BlcnR5UHJldmlld3MpIHsKLSAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJvd1Byb3BlcnR5ID0gcHJldmlldy5wcm9wZXJ0eVBy
ZXZpZXdzW2ldOwotICAgICAgICAgICAgICAgIHZhciByb3dQcmV2aWV3ID0gcm93UHJvcGVydHku
dmFsdWVQcmV2aWV3OwotICAgICAgICAgICAgICAgIGlmICghcm93UHJldmlldykKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcm93VmFsdWUgPSB7
fTsKLSAgICAgICAgICAgICAgICBjb25zdCBtYXhDb2x1bW5zVG9SZW5kZXIgPSAxMDsKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJvd1ByZXZpZXcucHJvcGVydHlQcmV2aWV3
cy5sZW5ndGg7ICsraikgewotICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbFByb3BlcnR5ID0g
cm93UHJldmlldy5wcm9wZXJ0eVByZXZpZXdzW2pdOwotICAgICAgICAgICAgICAgICAgICB2YXIg
Y29sdW1uUmVuZGVyZWQgPSBjb2x1bW5OYW1lcy5jb250YWlucyhjZWxsUHJvcGVydHkubmFtZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29sdW1uUmVuZGVyZWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh1c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyB8fCBjb2x1bW5OYW1lcy5s
ZW5ndGggPT09IG1heENvbHVtbnNUb1JlbmRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblJlbmRlcmVkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVzLnB1c2goY2VsbFByb3BlcnR5
Lm5hbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcm93
VmFsdWVbY2VsbFByb3BlcnR5Lm5hbWVdID0gV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZhbHVlLmNy
ZWF0ZUVsZW1lbnRGb3JQcm9wZXJ0eVByZXZpZXcoY2VsbFByb3BlcnR5KTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcm93cy5wdXNoKFtyb3dQcm9wZXJ0eS5uYW1lLCByb3dW
YWx1ZV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUg
d2VyZSB2YWx1ZVByZXZpZXdzLCBjb252ZXJ0IHRvIGEgZmxhdCBsaXN0LgotICAgICAgICBpZiAo
cm93cy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGNvbnN0IGVtRGFzaCA9ICJcdTIwMTQiOwotICAg
ICAgICAgICAgY29sdW1uTmFtZXMudW5zaGlmdChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihJbmRl
eCkiKSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICB2YXIgcm93TmFtZSA9IHJvd3NbaV1bMF07Ci0gICAgICAgICAg
ICAgICAgdmFyIHJvd1ZhbHVlID0gcm93c1tpXVsxXTsKLSAgICAgICAgICAgICAgICBmbGF0VmFs
dWVzLnB1c2gocm93TmFtZSk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBj
b2x1bW5OYW1lcy5sZW5ndGg7ICsraikgewotICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1u
TmFtZSA9IGNvbHVtbk5hbWVzW2pdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIShjb2x1bW5O
YW1lIGluIHJvd1ZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVz
aChlbURhc2gpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBmbGF0VmFsdWVzLnB1c2gocm93VmFsdWVbY29sdW1uTmFtZV0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZXJlIHdl
cmUgbm8gdmFsdWUgUHJldmlld3MsIHRoZW4gY2hlY2sgZm9yIGFuIGFycmF5IG9mIHZhbHVlcy4K
LSAgICAgICAgaWYgKCFmbGF0VmFsdWVzLmxlbmd0aCAmJiBwcmV2aWV3LnByb3BlcnR5UHJldmll
d3MpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldmlldy5wcm9wZXJ0eVBy
ZXZpZXdzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJvd1Byb3BlcnR5ID0g
cHJldmlldy5wcm9wZXJ0eVByZXZpZXdzW2ldOwotICAgICAgICAgICAgICAgIGlmICghKCJ2YWx1
ZSIgaW4gcm93UHJvcGVydHkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgICAgIGlmICghY29sdW1uTmFtZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbHVtbk5hbWVzLnB1c2goV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJbmRleCIpKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMucHVzaChXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IlZhbHVlIikpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZsYXRWYWx1
ZXMucHVzaChyb3dQcm9wZXJ0eS5uYW1lKTsKLSAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1
c2goV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JQcm9wZXJ0eVBy
ZXZpZXcocm93UHJvcGVydHkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIElmIGxvc3NsZXNzIG9yIG5vdCB0YWJsZSBkYXRhLCBvdXRwdXQgdGhlIG9iamVjdCBzbyBm
dWxsIGRhdGEgY2FuIGJlIGdvdHRlbi4KLSAgICAgICAgaWYgKCFwcmV2aWV3Lmxvc3NsZXNzIHx8
ICFmbGF0VmFsdWVzLmxlbmd0aCkgewotICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0
aGlzLl9mb3JtYXRQYXJhbWV0ZXIodGFibGUpKTsKLSAgICAgICAgICAgIGlmICghZmxhdFZhbHVl
cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2YXIgZGF0YUdyaWRDb250YWluZXIgPSBlbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFu
Iik7Ci0gICAgICAgIHZhciBkYXRhR3JpZCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5jcmVhdGVT
b3J0YWJsZURhdGFHcmlkKGNvbHVtbk5hbWVzLCBmbGF0VmFsdWVzKTsKLSAgICAgICAgZGF0YUdy
aWQuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJpbmxpbmUiKTsKLSAgICAgICAgZGF0YUdyaWRDb250
YWluZXIuYXBwZW5kQ2hpbGQoZGF0YUdyaWQuZWxlbWVudCk7Ci0KLSAgICAgICAgcmV0dXJuIGVs
ZW1lbnQ7Ci0gICAgfSwKLQotICAgIF9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nOiBmdW5j
dGlvbihwYXJhbWV0ZXJzLCBmb3JtYXR0ZWRSZXN1bHQpCi0gICAgewotICAgICAgICB2YXIgZm9y
bWF0dGVycyA9IHt9OwotCi0gICAgICAgIGZ1bmN0aW9uIHBhcmFtZXRlckZvcm1hdHRlcihmb3Jj
ZSwgb2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0UGFyYW1l
dGVyKG9iaiwgZm9yY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc3RyaW5nRm9y
bWF0dGVyKG9iaikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG9iai5kZXNjcmlwdGlv
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZsb2F0Rm9ybWF0dGVyKG9iaikKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmoudmFsdWUgIT09ICJudW1iZXIiKQot
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG9iai5kZXNjcmlwdGlvbik7Ci0gICAg
ICAgICAgICByZXR1cm4gb2JqLnZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24g
aW50ZWdlckZvcm1hdHRlcihvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2Yg
b2JqLnZhbHVlICE9PSAibnVtYmVyIikKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQo
b2JqLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG9iai52YWx1
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY3VycmVudFN0eWxlID0gbnVsbDsKLSAgICAg
ICAgZnVuY3Rpb24gc3R5bGVGb3JtYXR0ZXIob2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
dXJyZW50U3R5bGUgPSB7fTsKLSAgICAgICAgICAgIHZhciBidWZmZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICBidWZmZXIuc2V0QXR0cmlidXRlKCJzdHls
ZSIsIG9iai5kZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1
ZmZlci5zdHlsZS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9
IGJ1ZmZlci5zdHlsZVtpXTsKLSAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZWxpc3RlZFByb3Bl
cnR5KHByb3BlcnR5KSkKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0eWxlW3Byb3BlcnR5
XSA9IGJ1ZmZlci5zdHlsZVtwcm9wZXJ0eV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHZhciBwcmVmaXhlcyA9IFsiYmFja2dyb3VuZCIsICJib3JkZXIiLCAi
Y29sb3IiLCAiZm9udCIsICJsaW5lIiwgIm1hcmdpbiIsICJwYWRkaW5nIiwgInRleHQiLCAiLXdl
YmtpdC1iYWNrZ3JvdW5kIiwgIi13ZWJraXQtYm9yZGVyIiwgIi13ZWJraXQtZm9udCIsICItd2Vi
a2l0LW1hcmdpbiIsICItd2Via2l0LXBhZGRpbmciLCAiLXdlYmtpdC10ZXh0Il07Ci0gICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnR5LnN0YXJ0c1dpdGgocHJlZml4ZXNbaV0pKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpcmVidWcgdXNlcyAlbyBmb3IgZm9y
bWF0dGluZyBvYmplY3RzLgotICAgICAgICBmb3JtYXR0ZXJzLm8gPSBwYXJhbWV0ZXJGb3JtYXR0
ZXIuYmluZCh0aGlzLCBmYWxzZSk7Ci0gICAgICAgIGZvcm1hdHRlcnMucyA9IHN0cmluZ0Zvcm1h
dHRlcjsKLSAgICAgICAgZm9ybWF0dGVycy5mID0gZmxvYXRGb3JtYXR0ZXI7Ci0KLSAgICAgICAg
Ly8gRmlyZWJ1ZyBhbGxvd3MgYm90aCAlaSBhbmQgJWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMu
Ci0gICAgICAgIGZvcm1hdHRlcnMuaSA9IGludGVnZXJGb3JtYXR0ZXI7Ci0gICAgICAgIGZvcm1h
dHRlcnMuZCA9IGludGVnZXJGb3JtYXR0ZXI7Ci0KLSAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVj
IGZvciBzdHlsaW5nIHRoZSBtZXNzYWdlLgotICAgICAgICBmb3JtYXR0ZXJzLmMgPSBzdHlsZUZv
cm1hdHRlcjsKLQotICAgICAgICAvLyBTdXBwb3J0ICVPIHRvIGZvcmNlIG9iamVjdCBmb3JtYXR0
aW5nLCBpbnN0ZWFkIG9mIHRoZSB0eXBlLWJhc2VkICVvIGZvcm1hdHRpbmcuCi0gICAgICAgIGZv
cm1hdHRlcnMuTyA9IHBhcmFtZXRlckZvcm1hdHRlci5iaW5kKHRoaXMsIHRydWUpOwotCi0gICAg
ICAgIGZ1bmN0aW9uIGFwcGVuZChhLCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYiBp
bnN0YW5jZW9mIE5vZGUpCi0gICAgICAgICAgICAgICAgYS5hcHBlbmRDaGlsZChiKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGIpIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9BcHBlbmQgPSBXZWJJ
bnNwZWN0b3IubGlua2lmeVN0cmluZ0FzRnJhZ21lbnQoYi50b1N0cmluZygpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudFN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB3cmFw
cGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gY3VycmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAg
d3JhcHBlci5zdHlsZVtrZXldID0gY3VycmVudFN0eWxlW2tleV07Ci0gICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQodG9BcHBlbmQpOwotICAgICAgICAgICAgICAgICAgICB0
b0FwcGVuZCA9IHdyYXBwZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZh
ciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgICAg
IHNwYW4uY2xhc3NOYW1lID0gInR5cGUtc3RyaW5nIjsKLSAgICAgICAgICAgICAgICBzcGFuLmFw
cGVuZENoaWxkKHRvQXBwZW5kKTsKLSAgICAgICAgICAgICAgICBhLmFwcGVuZENoaWxkKHNwYW4p
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGE7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBTdHJpbmcuZm9ybWF0IGRvZXMgdHJlYXQgZm9ybWF0dGVkUmVzdWx0IGxpa2UgYSBC
dWlsZGVyLCByZXN1bHQgaXMgYW4gb2JqZWN0LgotICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1h
dChwYXJhbWV0ZXJzWzBdLmRlc2NyaXB0aW9uLCBwYXJhbWV0ZXJzLnNsaWNlKDEpLCBmb3JtYXR0
ZXJzLCBmb3JtYXR0ZWRSZXN1bHQsIGFwcGVuZCk7Ci0gICAgfSwKLQotICAgIGRlY29yYXRlTWVz
c2FnZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
ZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50OwotCi0gICAgICAgIGVs
ZW1lbnQubWVzc2FnZSA9IHRoaXM7Ci0gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29u
c29sZS1tZXNzYWdlIik7Ci0KLSAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7Ci0KLSAg
ICAgICAgc3dpdGNoICh0aGlzLmxldmVsKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuVGlwOgotICAgICAgICAgICAgICAgIGVsZW1l
bnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS10aXAtbGV2ZWwiKTsKLSAgICAgICAgICAgICAgICBl
bGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0
cmluZygiVGlwOiAiKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgotICAgICAgICAg
ICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1sb2ctbGV2ZWwiKTsKLSAgICAg
ICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiTG9nOiAiKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVi
dWc6Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWRlYnVn
LWxldmVsIik7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFi
ZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRlYnVnOiAiKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlTGV2ZWwuV2FybmluZzoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlz
dC5hZGQoImNvbnNvbGUtd2FybmluZy1sZXZlbCIpOwotICAgICAgICAgICAgICAgIGVsZW1lbnQu
c2V0QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJX
YXJuaW5nOiAiKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6Ci0gICAgICAgICAg
ICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWVycm9yLWxldmVsIik7Ci0gICAg
ICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkVycm9yOiAiKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cCB8fCB0aGlzLnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkKQotICAg
ICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWdyb3VwLXRpdGxlIik7Ci0K
LSAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmZvcm1hdHRlZE1lc3NhZ2UpOwotCi0g
ICAgICAgIGlmICh0aGlzLnJlcGVhdENvdW50ID4gMSkKLSAgICAgICAgICAgIHRoaXMudXBkYXRl
UmVwZWF0Q291bnQoKTsKLQotICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9LAotCi0gICAg
dG9NZXNzYWdlRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2Vs
ZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDsKLQotICAgICAgICB2YXIg
ZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotCi0gICAgICAgIHJldHVy
biB0aGlzLmRlY29yYXRlTWVzc2FnZUVsZW1lbnQoZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9w
b3B1bGF0ZVN0YWNrVHJhY2VUcmVlRWxlbWVudDogZnVuY3Rpb24ocGFyZW50VHJlZUVsZW1lbnQp
Ci0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3N0YWNrVHJhY2UubGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuX3N0YWNrVHJhY2VbaV07
Ci0KLSAgICAgICAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZVRleHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmNsYXNzTmFt
ZSA9ICJjb25zb2xlLW1lc3NhZ2UtdGV4dCI7Ci0gICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1l
ID0gZnJhbWUuZnVuY3Rpb25OYW1lIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255bW91
cyBmdW5jdGlvbikiKTsKLSAgICAgICAgICAgIG1lc3NhZ2VUZXh0RWxlbWVudC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmdW5jdGlvbk5hbWUpKTsKLSAgICAgICAgICAgIGNv
bnRlbnQuYXBwZW5kQ2hpbGQobWVzc2FnZVRleHRFbGVtZW50KTsKLQotICAgICAgICAgICAgaWYg
KGZyYW1lLnVybCAmJiAhdGhpcy5fc2hvdWxkSGlkZVVSTChmcmFtZS51cmwpKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSB0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKGZyYW1lKTsK
LSAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQo
Y29udGVudCk7Ci0gICAgICAgICAgICBwYXJlbnRUcmVlRWxlbWVudC5hcHBlbmRDaGlsZCh0cmVl
RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgdXBkYXRlUmVwZWF0Q291bnQ6IGZ1
bmN0aW9uKCkgewotICAgICAgICBpZiAoIXRoaXMucmVwZWF0Q291bnRFbGVtZW50KSB7Ci0gICAg
ICAgICAgICB0aGlzLnJlcGVhdENvdW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InNwYW4iKTsKLSAgICAgICAgICAgIHRoaXMucmVwZWF0Q291bnRFbGVtZW50LmNsYXNzTmFtZSA9
ICJidWJibGUiOwotCi0gICAgICAgICAgICB0aGlzLl9lbGVtZW50Lmluc2VydEJlZm9yZSh0aGlz
LnJlcGVhdENvdW50RWxlbWVudCwgdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKTsKLSAgICAgICAg
fQotICAgICAgICB0aGlzLnJlcGVhdENvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMucmVw
ZWF0Q291bnQ7Ci0gICAgfSwKLQotICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgc291cmNlU3RyaW5nOwotICAgICAgICBzd2l0Y2ggKHRoaXMuc291cmNlKSB7Ci0g
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNl
LkhUTUw6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkhUTUwiOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVNvdXJjZS5YTUw6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIlhN
TCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTOgotICAgICAgICAgICAgICAgIHNvdXJj
ZVN0cmluZyA9ICJKUyI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcms6Ci0gICAg
ICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIk5ldHdvcmsiOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVNvdXJjZS5Db25zb2xlQVBJOgotICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJDb25z
b2xlQVBJIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuT3RoZXI6Ci0gICAgICAgICAgICAg
ICAgc291cmNlU3RyaW5nID0gIk90aGVyIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciB0eXBlU3RyaW5nOwotICAgICAgICBzd2l0Y2ggKHRoaXMudHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVR5cGUuTG9nOgotICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiTG9nIjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VUeXBlLkRpcjoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkRpciI7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5EaXJYTUw6Ci0gICAgICAgICAgICAgICAgdHlwZVN0
cmluZyA9ICJEaXIgWE1MIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlOgotICAgICAg
ICAgICAgICAgIHR5cGVTdHJpbmcgPSAiVHJhY2UiOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUu
U3RhcnRHcm91cENvbGxhcHNlZDoKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXA6Ci0gICAgICAgICAgICAgICAgdHlwZVN0
cmluZyA9ICJTdGFydCBHcm91cCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cDoK
LSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkVuZCBHcm91cCI7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlVHlwZS5Bc3NlcnQ6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJBc3NlcnQi
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVzdWx0OgotICAgICAgICAgICAgICAgIHR5cGVT
dHJpbmcgPSAiUmVzdWx0IjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBzb3VyY2VTdHJpbmcgKyAiICIgKyB0eXBlU3RyaW5nICsgIiAiICsgdGhp
cy5sZXZlbFN0cmluZyArICI6ICIgKyB0aGlzLmZvcm1hdHRlZE1lc3NhZ2UudGV4dENvbnRlbnQg
KyAiXG4iICsgdGhpcy51cmwgKyAiIGxpbmUgIiArIHRoaXMubGluZTsKLSAgICB9LAotCi0gICAg
Z2V0IHRleHQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VUZXh0OwotICAg
IH0sCi0KLSAgICBpc0VxdWFsOiBmdW5jdGlvbihtc2cpCi0gICAgewotICAgICAgICBpZiAoIW1z
ZykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAodGhpcy5fc3RhY2tU
cmFjZSkgewotICAgICAgICAgICAgaWYgKCFtc2cuX3N0YWNrVHJhY2UpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdmFyIGwgPSB0aGlzLl9zdGFja1RyYWNlOwot
ICAgICAgICAgICAgdmFyIHIgPSBtc2cuX3N0YWNrVHJhY2U7Ci0gICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGwubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAobFtpXS51
cmwgIT09IHJbaV0udXJsIHx8Ci0gICAgICAgICAgICAgICAgICAgIGxbaV0uZnVuY3Rpb25OYW1l
ICE9PSByW2ldLmZ1bmN0aW9uTmFtZSB8fAotICAgICAgICAgICAgICAgICAgICBsW2ldLmxpbmVO
dW1iZXIgIT09IHJbaV0ubGluZU51bWJlciB8fAotICAgICAgICAgICAgICAgICAgICBsW2ldLmNv
bHVtbk51bWJlciAhPT0gcltpXS5jb2x1bW5OdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAo
dGhpcy5zb3VyY2UgPT09IG1zZy5zb3VyY2UpCi0gICAgICAgICAgICAmJiAodGhpcy50eXBlID09
PSBtc2cudHlwZSkKLSAgICAgICAgICAgICYmICh0aGlzLmxldmVsID09PSBtc2cubGV2ZWwpCi0g
ICAgICAgICAgICAmJiAodGhpcy5saW5lID09PSBtc2cubGluZSkKLSAgICAgICAgICAgICYmICh0
aGlzLnVybCA9PT0gbXNnLnVybCkKLSAgICAgICAgICAgICYmICh0aGlzLm1lc3NhZ2UgPT09IG1z
Zy5tZXNzYWdlKQotICAgICAgICAgICAgJiYgKHRoaXMuX3JlcXVlc3QgPT09IG1zZy5fcmVxdWVz
dCk7Ci0gICAgfSwKLQotICAgIGdldCBzdGFja1RyYWNlKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9zdGFja1RyYWNlOwotICAgIH0sCi0KLSAgICBjbG9uZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGUodGhp
cy5zb3VyY2UsIHRoaXMubGV2ZWwsIHRoaXMuX21lc3NhZ2VUZXh0LCB0aGlzLnR5cGUsIHRoaXMu
dXJsLCB0aGlzLmxpbmUsIHRoaXMuY29sdW1uLCB0aGlzLnJlcGVhdENvdW50LCB0aGlzLl9wYXJh
bWV0ZXJzLCB0aGlzLl9zdGFja1RyYWNlLCB0aGlzLl9yZXF1ZXN0KTsKLSAgICB9LAotCi0gICAg
Z2V0IGxldmVsU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgewot
ICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVs
LlRpcDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlRpcCI7Ci0gICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgotICAgICAgICAgICAg
ICAgIHJldHVybiAiTG9nIjsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgotICAgICAgICAgICAgICAgIHJldHVybiAiV2Fy
bmluZyI7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNz
YWdlTGV2ZWwuRGVidWc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJEZWJ1ZyI7Ci0gICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFcnJvciI7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgZ2V0IGNsaXBib2FyZFByZWZpeFN0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gIlsi
ICsgdGhpcy5sZXZlbFN0cmluZyArICJdICI7Ci0gICAgfSwKLQotICAgIHRvQ2xpcGJvYXJkU3Ry
aW5nOiBmdW5jdGlvbihpc1ByZWZpeE9wdGlvbmFsKQotICAgIHsKLSAgICAgICAgdmFyIGlzVHJh
Y2UgPSB0aGlzLl9zaG91bGREdW1wU3RhY2tUcmFjZSgpOwotCi0gICAgICAgIHZhciBjbGlwYm9h
cmRTdHJpbmcgPSAiIjsKLSAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UgJiYgIWlz
VHJhY2UpCi0gICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgPSB0aGlzLl9mb3JtYXR0ZWRNZXNz
YWdlLnF1ZXJ5U2VsZWN0b3IoInNwYW4iKS5pbm5lclRleHQ7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNsaXBib2FyZFN0cmluZyA9IHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlID8gImNvbnNvbGUudHJhY2UoKSIgOiB0aGlzLl9t
ZXNzYWdlIHx8IHRoaXMuX21lc3NhZ2VUZXh0OwotCi0gICAgICAgIGlmICghaXNQcmVmaXhPcHRp
b25hbCB8fCB0aGlzLmVuZm9yY2VzQ2xpcGJvYXJkUHJlZml4U3RyaW5nKQotICAgICAgICAgICAg
Y2xpcGJvYXJkU3RyaW5nID0gdGhpcy5jbGlwYm9hcmRQcmVmaXhTdHJpbmcgKyBjbGlwYm9hcmRT
dHJpbmc7Ci0KLSAgICAgICAgaWYgKGlzVHJhY2UpIHsKLSAgICAgICAgICAgIHRoaXMuX3N0YWNr
VHJhY2UuZm9yRWFjaChmdW5jdGlvbihmcmFtZSkgewotICAgICAgICAgICAgICAgIGNsaXBib2Fy
ZFN0cmluZyArPSAiXG5cdCIgKyAoZnJhbWUuZnVuY3Rpb25OYW1lIHx8IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiKGFub255bW91cyBmdW5jdGlvbikiKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZy
YW1lLnVybCkKLSAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5nICs9ICIgKCIgKyBX
ZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwoZnJhbWUudXJsKSArICIsIGxpbmUgIiArIGZy
YW1lLmxpbmVOdW1iZXIgKyAiKSI7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHZhciByZXBlYXRTdHJpbmcgPSB0aGlzLnJlcGVhdENvdW50ID4gMSA/ICJ4
IiArIHRoaXMucmVwZWF0Q291bnQgOiAiIjsKLQotICAgICAgICAgICAgdmFyIHVybExpbmUgPSAi
IjsKLSAgICAgICAgICAgIGlmICh0aGlzLnVybCkgewotICAgICAgICAgICAgICAgIHZhciBjb21w
b25lbnRzID0gW1dlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCh0aGlzLnVybCksICJsaW5l
ICIgKyB0aGlzLmxpbmVdOwotICAgICAgICAgICAgICAgIGlmIChyZXBlYXRTdHJpbmcpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaChyZXBlYXRTdHJpbmcpOwotICAgICAgICAg
ICAgICAgIHVybExpbmUgPSAiICgiICsgY29tcG9uZW50cy5qb2luKCIsICIpICsgIikiOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChyZXBlYXRTdHJpbmcpCi0gICAgICAgICAgICAgICAgdXJsTGlu
ZSA9ICIgKCIgKyByZXBlYXRTdHJpbmcgKyAiKSI7Ci0KLSAgICAgICAgICAgIGlmICh1cmxMaW5l
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gY2xpcGJvYXJkU3RyaW5nLnNwbGl0KCJc
biIpOwotICAgICAgICAgICAgICAgIGxpbmVzWzBdICs9IHVybExpbmU7Ci0gICAgICAgICAgICAg
ICAgY2xpcGJvYXJkU3RyaW5nID0gbGluZXMuam9pbigiXG4iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBjbGlwYm9hcmRTdHJpbmc7Ci0gICAgfQotfTsKLQot
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX19wcm90b19fID0gV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeUNvbnNvbGVNZXNzYWdlLmpz
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTGVnYWN5Q29uc29s
ZU1lc3NhZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4ZDcxMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0xlZ2FjeUNvbnNvbGVNZXNzYWdlLmpzCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xl
TWVzc2FnZSA9IGZ1bmN0aW9uKHNvdXJjZSwgbGV2ZWwsIHVybCwgbGluZSwgY29sdW1uLCByZXBl
YXRDb3VudCkKK3sKKyAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTsKKyAgICB0aGlzLmxldmVsID0g
bGV2ZWw7CisgICAgdGhpcy51cmwgPSB1cmwgfHwgbnVsbDsKKyAgICB0aGlzLmxpbmUgPSBsaW5l
IHx8IDA7CisgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW4gfHwgMDsKKworICAgIHJlcGVhdENvdW50
ID0gcmVwZWF0Q291bnQgfHwgMTsKKyAgICB0aGlzLnJlcGVhdENvdW50ID0gcmVwZWF0Q291bnQ7
CisgICAgdGhpcy5yZXBlYXREZWx0YSA9IHJlcGVhdENvdW50OworICAgIHRoaXMudG90YWxSZXBl
YXRDb3VudCA9IHJlcGVhdENvdW50OworfTsKKworV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVN
ZXNzYWdlLnByb3RvdHlwZSA9IHsKKyAgICBpc0Vycm9yT3JXYXJuaW5nOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gKHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lD
b25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZyB8fCB0aGlzLmxldmVsID09PSBXZWJJ
bnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKTsKKyAgICB9
LAorCisgICAgdXBkYXRlUmVwZWF0Q291bnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8v
IEltcGxlbWVudGVkIGJ5IGNvbmNyZXRlIGluc3RhbmNlcworICAgIH0sCisKKyAgICBjbG9uZTog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgY29uY3JldGUgaW5z
dGFuY2VzCisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLmNy
ZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHR5cGUsIHVybCwgbGluZSwg
Y29sdW1uLCByZXBlYXRDb3VudCwgcGFyYW1ldGVycywgc3RhY2tUcmFjZSwgcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwoc291
cmNlLCBsZXZlbCwgbWVzc2FnZSwgbnVsbCwgdHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVh
dENvdW50LCBwYXJhbWV0ZXJzLCBzdGFja1RyYWNlLCByZXF1ZXN0KTsKK307CisKKy8vIEZJWE1F
OiBTd2l0Y2ggdG8gQ29uc29sZUFnZW50LkNvbnNvbGVNZXNzYWdlU291cmNlLgorV2ViSW5zcGVj
dG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UgPSB7CisgICAgSFRNTDogImh0
bWwiLAorICAgIFhNTDogInhtbCIsCisgICAgSlM6ICJqYXZhc2NyaXB0IiwKKyAgICBOZXR3b3Jr
OiAibmV0d29yayIsCisgICAgQ29uc29sZUFQSTogImNvbnNvbGUtYXBpIiwKKyAgICBPdGhlcjog
Im90aGVyIgorfTsKKworLy8gRklYTUU6IFN3aXRjaCB0byBDb25zb2xlQWdlbnQuQ29uc29sZU1l
c3NhZ2VUeXBlLgorV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBl
ID0geworICAgIExvZzogImxvZyIsCisgICAgRGlyOiAiZGlyIiwKKyAgICBEaXJYTUw6ICJkaXJ4
bWwiLAorICAgIFRhYmxlOiAidGFibGUiLAorICAgIFRyYWNlOiAidHJhY2UiLAorICAgIFN0YXJ0
R3JvdXA6ICJzdGFydEdyb3VwIiwKKyAgICBTdGFydEdyb3VwQ29sbGFwc2VkOiAic3RhcnRHcm91
cENvbGxhcHNlZCIsCisgICAgRW5kR3JvdXA6ICJlbmRHcm91cCIsCisgICAgQXNzZXJ0OiAiYXNz
ZXJ0IiwKKyAgICBSZXN1bHQ6ICJyZXN1bHQiCit9OworCisvLyBGSVhNRTogU3dpdGNoIHRvIENv
bnNvbGVBZ2VudC5Db25zb2xlTWVzc2FnZUxldmVsLgorV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VMZXZlbCA9IHsKKyAgICBUaXA6ICJ0aXAiLAorICAgIExvZzogImxv
ZyIsCisgICAgV2FybmluZzogIndhcm5pbmciLAorICAgIEVycm9yOiAiZXJyb3IiLAorICAgIERl
YnVnOiAiZGVidWciCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTlkNjUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MZWdhY3lD
b25zb2xlTWVzc2FnZUltcGwuanMKQEAgLTAsMCArMSw4MDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2Fn
ZUltcGwgPSBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBsaW5raWZpZXIsIHR5cGUs
IHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCwgcGFyYW1ldGVycywgc3RhY2tUcmFjZSwg
cmVxdWVzdCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuY2FsbCh0
aGlzLCBzb3VyY2UsIGxldmVsLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQpOworCisg
ICAgdGhpcy5fbGlua2lmaWVyID0gbGlua2lmaWVyOworICAgIHRoaXMudHlwZSA9IHR5cGUgfHwg
V2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZzsKKyAgICB0
aGlzLl9tZXNzYWdlVGV4dCA9IG1lc3NhZ2U7CisgICAgdGhpcy5fcGFyYW1ldGVycyA9IHBhcmFt
ZXRlcnM7CisgICAgdGhpcy5fc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2U7CisgICAgdGhpcy5fcmVx
dWVzdCA9IHJlcXVlc3Q7CisKKyAgICB0aGlzLl9jdXN0b21Gb3JtYXR0ZXJzID0geworICAgICAg
ICAib2JqZWN0IjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCisgICAgICAgICJlcnJv
ciI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAorICAgICAgICAibWFwIjogdGhpcy5f
Zm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCisgICAgICAgICJzZXQiOiB0aGlzLl9mb3JtYXRQYXJh
bWV0ZXJBc09iamVjdCwKKyAgICAgICAgIndlYWttYXAiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJB
c09iamVjdCwKKyAgICAgICAgIml0ZXJhdG9yIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmpl
Y3QsCisgICAgICAgICJhcnJheSI6ICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc0FycmF5LAorICAg
ICAgICAibm9kZSI6ICAgdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNOb2RlLAorICAgICAgICAic3Ry
aW5nIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNTdHJpbmcKKyAgICB9OworfTsKKworV2ViSW5z
cGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUgPSB7CisKKyAgICBlbmZv
cmNlc0NsaXBib2FyZFByZWZpeFN0cmluZzogdHJ1ZSwKKworICAgIF9mb3JtYXRNZXNzYWdlOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdl
LmNsYXNzTmFtZSA9ICJjb25zb2xlLW1lc3NhZ2UtdGV4dCI7CisKKyAgICAgICAgdmFyIG1lc3Nh
Z2VUZXh0OworICAgICAgICBpZiAodGhpcy5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lD
b25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkNvbnNvbGVBUEkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAodGhpcy50eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2U6CisgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2VUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImNvbnNvbGUudHJhY2UoKSIp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5Bc3NlcnQ6CisgICAgICAg
ICAgICAgICAgICAgIHZhciBhcmdzID0gW1dlYkluc3BlY3Rvci5VSVN0cmluZygiQXNzZXJ0aW9u
IGZhaWxlZDoiKV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYXJhbWV0ZXJzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KHRoaXMuX3BhcmFtZXRl
cnMpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdz
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRGlyOgorICAgICAgICAg
ICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fcGFyYW1ldGVycyA/IHRoaXMuX3BhcmFtZXRlcnNb
MF0gOiB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gWyIlTyIsIG9i
al07CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0KGFyZ3Mp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHRoaXMuX3BhcmFtZXRlcnMgfHwgW3RoaXMu
X21lc3NhZ2VUZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0aGlzLl9m
b3JtYXQoYXJncyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3Vy
Y2UgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5l
dHdvcmspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fc3RhY2tUcmFjZSA9IHRoaXMuX3JlcXVlc3Quc3RhY2tUcmFjZTsKKyAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5pbml0aWF0b3IgJiYgdGhpcy5fcmVxdWVzdC5pbml0
aWF0b3IudXJsKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXJsID0gdGhpcy5fcmVxdWVz
dC5pbml0aWF0b3IudXJsOworICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmUgPSB0aGlzLl9y
ZXF1ZXN0LmluaXRpYXRvci5saW5lTnVtYmVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBtZXNzYWdlVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcikgeworICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl9yZXF1ZXN0
LnJlcXVlc3RNZXRob2QgKyAiICIpKTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQu
YXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXF1ZXN0QXNOb2RlKHRoaXMuX3JlcXVl
c3QpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QuZmFpbGVkKQorICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoIiAiICsgdGhpcy5fcmVxdWVzdC5sb2NhbGl6ZWRGYWlsRGVzY3JpcHRpb24p
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiICsgdGhpcy5f
cmVxdWVzdC5zdGF0dXNDb2RlICsgIiAoIiArIHRoaXMuX3JlcXVlc3Quc3RhdHVzVGV4dCArICIp
IikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBm
cmFnbWVudCA9IFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudFdpdGhDdXN0b21M
aW5raWZpZXIodGhpcy5fbWVzc2FnZVRleHQsIFdlYkluc3BlY3Rvci5saW5raWZ5UmVxdWVzdEFz
Tm9kZS5iaW5kKG51bGwsIHRoaXMuX3JlcXVlc3QsICIiKSk7CisgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2VUZXh0LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLnVybCkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgYW5jaG9yID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkxBc05v
ZGUodGhpcy51cmwsIHRoaXMudXJsLCAiY29uc29sZS1tZXNzYWdlLXVybCIpOworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKGFuY2hvcik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9y
bWF0KFt0aGlzLl9tZXNzYWdlVGV4dF0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9wYXJhbWV0ZXJzIHx8IFt0aGlzLl9tZXNz
YWdlVGV4dF07CisgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLnNvdXJjZSAhPT0gV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yayB8fCB0aGlzLl9yZXF1ZXN0
KSB7CisgICAgICAgICAgICB2YXIgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUgPSB0aGlzLl9maXJz
dE5vbk5hdGl2ZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgaWYgKGZpcnN0Tm9uTmF0aXZlQ2Fs
bEZyYW1lKSB7CisgICAgICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSB0aGlzLl9saW5raWZ5
Q2FsbEZyYW1lKGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICAgICAg
fSBlbHNlIGlmICh0aGlzLnVybCAmJiAhdGhpcy5fc2hvdWxkSGlkZVVSTCh0aGlzLnVybCkpIHsK
KyAgICAgICAgICAgICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlMb2NhdGlvbih0
aGlzLnVybCwgdGhpcy5saW5lLCB0aGlzLmNvbHVtbik7CisgICAgICAgICAgICAgICAgdGhpcy5f
Zm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZCh1cmxFbGVtZW50KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQo
bWVzc2FnZVRleHQpOworCisgICAgICAgIGlmICh0aGlzLnNhdmVkUmVzdWx0SW5kZXgpIHsKKyAg
ICAgICAgICAgIHZhciBzYXZlZFZhcmlhYmxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKKyAgICAgICAgICAgIHNhdmVkVmFyaWFibGVFbGVtZW50LmNsYXNzTmFtZSA9
ICJjb25zb2xlLXNhdmVkLXZhcmlhYmxlIjsKKyAgICAgICAgICAgIHNhdmVkVmFyaWFibGVFbGVt
ZW50LnRleHRDb250ZW50ID0gIiA9ICQiICsgdGhpcy5zYXZlZFJlc3VsdEluZGV4OworICAgICAg
ICAgICAgaWYgKHRoaXMuX29iamVjdFRyZWUpCisgICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0
VHJlZS5hcHBlbmRUaXRsZVN1ZmZpeChzYXZlZFZhcmlhYmxlRWxlbWVudCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGls
ZChzYXZlZFZhcmlhYmxlRWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5f
c2hvdWxkRHVtcFN0YWNrVHJhY2UoKSkgeworICAgICAgICAgICAgdmFyIG9sID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgib2wiKTsKKyAgICAgICAgICAgIG9sLmNsYXNzTmFtZSA9ICJvdXRsaW5l
LWRpc2Nsb3N1cmUiOworICAgICAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gbmV3IFRyZWVPdXRs
aW5lKG9sKTsKKworICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9mb3JtYXR0ZWRNZXNz
YWdlOworICAgICAgICAgICAgdmFyIHJvb3QgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCwgbnVs
bCwgdHJ1ZSk7CisgICAgICAgICAgICBjb250ZW50LnRyZWVFbGVtZW50Rm9yVGVzdCA9IHJvb3Q7
CisgICAgICAgICAgICB0cmVlT3V0bGluZS5hcHBlbmRDaGlsZChyb290KTsKKyAgICAgICAgICAg
IGlmICh0aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNz
YWdlVHlwZS5UcmFjZSkKKyAgICAgICAgICAgICAgICByb290LmV4cGFuZCgpOworCisgICAgICAg
ICAgICB0aGlzLl9wb3B1bGF0ZVN0YWNrVHJhY2VUcmVlRWxlbWVudChyb290KTsKKyAgICAgICAg
ICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UgPSBvbDsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFRoaXMgaXMgdXNlZCBmb3IgaW5saW5lIG1lc3NhZ2UgYnViYmxlcyBpbiBTb3VyY2VGcmFtZXMs
IG9yIG90aGVyIHBsYWluLXRleHQgcmVwcmVzZW50YXRpb25zLgorICAgICAgICB0aGlzLl9tZXNz
YWdlID0gbWVzc2FnZVRleHQudGV4dENvbnRlbnQ7CisgICAgfSwKKworICAgIF9zaG91bGREdW1w
U3RhY2tUcmFjZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhdGhpcy5fc3Rh
Y2tUcmFjZSAmJiB0aGlzLl9zdGFja1RyYWNlLmxlbmd0aCAmJiAodGhpcy5zb3VyY2UgPT09IFdl
Ykluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcmsgfHwg
dGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VM
ZXZlbC5FcnJvciB8fCB0aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVz
c2FnZS5NZXNzYWdlVHlwZS5UcmFjZSk7CisgICAgfSwKKworICAgIF9zaG91bGRIaWRlVVJMOiBm
dW5jdGlvbih1cmwpCisgICAgeworICAgICAgICByZXR1cm4gdXJsID09PSAidW5kZWZpbmVkIiB8
fCB1cmwgPT09ICJbbmF0aXZlIGNvZGVdIjsKKyAgICB9LAorCisgICAgX2ZpcnN0Tm9uTmF0aXZl
Q2FsbEZyYW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3N0YWNrVHJh
Y2UpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuX3N0YWNrVHJhY2UubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBmcmFt
ZSA9IHRoaXMuX3N0YWNrVHJhY2VbaV07CisgICAgICAgICAgICBpZiAoIWZyYW1lLnVybCB8fCBm
cmFtZS51cmwgPT09ICJbbmF0aXZlIGNvZGVdIikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBu
dWxsOworICAgIH0sCisKKyAgICBnZXQgbWVzc2FnZSgpCisgICAgeworICAgICAgICAvLyBmb3Jj
ZSBtZXNzYWdlIGZvcm1hdHRpbmcKKyAgICAgICAgdmFyIGZvcm1hdHRlZE1lc3NhZ2UgPSB0aGlz
LmZvcm1hdHRlZE1lc3NhZ2U7CisgICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlOworICAgIH0s
CisKKyAgICBnZXQgZm9ybWF0dGVkTWVzc2FnZSgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMu
X2Zvcm1hdHRlZE1lc3NhZ2UpCisgICAgICAgICAgICB0aGlzLl9mb3JtYXRNZXNzYWdlKCk7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlOworICAgIH0sCisKKyAgICBfbGlu
a2lmeUxvY2F0aW9uOiBmdW5jdGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAg
ICB7CisgICAgICAgIC8vIENvbnNvbGVNZXNzYWdlIHN0YWNrIHRyYWNlIGxpbmUgbnVtYmVycyBh
cmUgb25lLWJhc2VkLgorICAgICAgICBsaW5lTnVtYmVyID0gbGluZU51bWJlciA/IGxpbmVOdW1i
ZXIgLSAxIDogMDsKKyAgICAgICAgY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyID8gY29sdW1u
TnVtYmVyIC0gMSA6IDA7CisKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5saW5raWZ5TG9j
YXRpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsICJjb25zb2xlLW1lc3NhZ2UtdXJs
Iik7CisgICAgfSwKKworICAgIF9saW5raWZ5Q2FsbEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbGlua2lmeUxvY2F0aW9uKGNhbGxGcmFtZS51
cmwsIGNhbGxGcmFtZS5saW5lTnVtYmVyLCBjYWxsRnJhbWUuY29sdW1uTnVtYmVyKTsKKyAgICB9
LAorCisgICAgaXNFcnJvck9yV2FybmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICh0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVz
c2FnZUxldmVsLldhcm5pbmcgfHwgdGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcik7CisgICAgfSwKKworICAgIF9mb3JtYXQ6
IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICAvLyBUaGlzIG5vZGUgaXMgdXNl
ZCBsaWtlIGEgQnVpbGRlci4gVmFsdWVzIGFyZSBjb250aW51YWxseSBhcHBlbmRlZCBvbnRvIGl0
LgorICAgICAgICB2YXIgZm9ybWF0dGVkUmVzdWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOworICAgICAgICBpZiAoIXBhcmFtZXRlcnMubGVuZ3RoKQorICAgICAgICAgICAgcmV0
dXJuIGZvcm1hdHRlZFJlc3VsdDsKKworICAgICAgICAvLyBGb3JtYXR0aW5nIGNvZGUgYmVsb3cg
YXNzdW1lcyB0aGF0IHBhcmFtZXRlcnMgYXJlIGFsbCB3cmFwcGVycyB3aGVyZWFzIGZyb250ZW5k
IGNvbnNvbGUKKyAgICAgICAgLy8gQVBJIGFsbG93cyBwYXNzaW5nIGFyYml0cmFyeSB2YWx1ZXMg
YXMgbWVzc2FnZXMgKHN0cmluZ3MsIG51bWJlcnMsIGV0Yy4pLiBXcmFwIHRoZW0gaGVyZS4KKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogT25seSBwYXNzIHJ1bnRpbWUgd3JhcHBlcnMgaGVyZS4KKyAgICAg
ICAgICAgIGlmIChwYXJhbWV0ZXJzW2ldIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9i
amVjdCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHR5cGVv
ZiBwYXJhbWV0ZXJzW2ldID09PSAib2JqZWN0IikKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJz
W2ldID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChwYXJhbWV0ZXJzW2ld
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2Vi
SW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUocGFyYW1ldGVyc1tpXSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGVyZSBjYW4gYmUgc3RyaW5nIGxvZyBhbmQgc3Ry
aW5nIGV2YWwgcmVzdWx0LiBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYmFzZWQgb24gbWVz
c2FnZSB0eXBlLgorICAgICAgICB2YXIgc2hvdWxkRm9ybWF0TWVzc2FnZSA9IFdlYkluc3BlY3Rv
ci5SZW1vdGVPYmplY3QudHlwZShwYXJhbWV0ZXJzWzBdKSA9PT0gInN0cmluZyIgJiYgdGhpcy50
eXBlICE9PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVz
dWx0OworCisgICAgICAgIGlmIChzaG91bGRGb3JtYXRNZXNzYWdlKSB7CisgICAgICAgICAgICAv
LyBNdWx0aXBsZSBwYXJhbWV0ZXJzIHdpdGggdGhlIGZpcnN0IGJlaW5nIGEgZm9ybWF0IHN0cmlu
Zy4gU2F2ZSB1bnVzZWQgc3Vic3RpdHV0aW9ucy4KKyAgICAgICAgICAgIHZhciByZXN1bHQgPSB0
aGlzLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nKHBhcmFtZXRlcnMsIGZvcm1hdHRlZFJl
c3VsdCk7CisgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcmVzdWx0LnVudXNlZFN1YnN0aXR1dGlv
bnM7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5sZW5ndGgpCisgICAgICAgICAgICAgICAg
Zm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRhYmxlKSB7CisgICAgICAgICAgICBmb3Jt
YXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQodGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNUYWJsZShwYXJh
bWV0ZXJzKSk7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworICAgICAgICB9
CisKKyAgICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlciwgb3IgdW51c2VkIHN1YnN0aXR1dGlvbnMg
ZnJvbSBhYm92ZS4KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAvLyBJbmxpbmUgc3RyaW5ncyB3aGVuIGZvcm1hdHRpbmcu
CisgICAgICAgICAgICBpZiAoc2hvdWxkRm9ybWF0TWVzc2FnZSAmJiBwYXJhbWV0ZXJzW2ldLnR5
cGUgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRk
KCJ0eXBlLXN0cmluZyIpOworICAgICAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBwYXJh
bWV0ZXJzW2ldLmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5h
cHBlbmRDaGlsZChzcGFuKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZv
cm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJhbWV0ZXIocGFyYW1ldGVy
c1tpXSwgZmFsc2UpKTsKKworICAgICAgICAgICAgaWYgKGkgPCBwYXJhbWV0ZXJzLmxlbmd0aCAt
IDEgJiYgIXRoaXMuX2lzRXhwYW5kYWJsZShwYXJhbWV0ZXJzW2ldKSkKKyAgICAgICAgICAgICAg
ICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAi
KSk7CisKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworICAgIH0s
CisKKyAgICBfaXNFeHBhbmRhYmxlOiBmdW5jdGlvbihyZW1vdGVPYmplY3QpIHsKKyAgICAgICAg
aWYgKCFyZW1vdGVPYmplY3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKHJlbW90ZU9iamVjdC5oYXNDaGlsZHJlbiAmJiByZW1vdGVPYmplY3QucHJldmlldyAmJiBy
ZW1vdGVPYmplY3QucHJldmlldy5sb3NzbGVzcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICByZXR1cm4gcmVtb3RlT2JqZWN0Lmhhc0NoaWxkcmVuOworICAgIH0sCisKKyAg
ICBfZm9ybWF0UGFyYW1ldGVyOiBmdW5jdGlvbihvdXRwdXQsIGZvcmNlT2JqZWN0Rm9ybWF0KQor
ICAgIHsKKyAgICAgICAgdmFyIHR5cGU7CisgICAgICAgIGlmIChmb3JjZU9iamVjdEZvcm1hdCkK
KyAgICAgICAgICAgIHR5cGUgPSAib2JqZWN0IjsKKyAgICAgICAgZWxzZSBpZiAob3V0cHV0IGlu
c3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCkKKyAgICAgICAgICAgIHR5cGUgPSBv
dXRwdXQuc3VidHlwZSB8fCBvdXRwdXQudHlwZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dHlwZSA9IHR5cGVvZiBvdXRwdXQ7CisKKyAgICAgICAgdmFyIGZvcm1hdHRlciA9IHRoaXMuX2N1
c3RvbUZvcm1hdHRlcnNbdHlwZV07CisgICAgICAgIGlmICghZm9ybWF0dGVyKQorICAgICAgICAg
ICAgZm9ybWF0dGVyID0gdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNWYWx1ZTsKKworICAgICAgICB2
YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKworICAgICAgICBpZiAo
dGhpcy5faXNFeHBhbmRhYmxlKG91dHB1dCkpCisgICAgICAgICAgICBzcGFuLmNsYXNzTGlzdC5h
ZGQoImV4cGFuZGFibGUiKTsKKworICAgICAgICBmb3JtYXR0ZXIuY2FsbCh0aGlzLCBvdXRwdXQs
IHNwYW4sIGZvcmNlT2JqZWN0Rm9ybWF0KTsKKyAgICAgICAgcmV0dXJuIHNwYW47CisgICAgfSwK
KworICAgIF9mb3JtYXRQYXJhbWV0ZXJBc1ZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgZWxlbSkKKyAg
ICB7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZhbHVl
LmNyZWF0ZUVsZW1lbnRGb3JSZW1vdGVPYmplY3QodmFsdWUpKTsKKyAgICB9LAorCisgICAgX2Zv
cm1hdFBhcmFtZXRlckFzT2JqZWN0OiBmdW5jdGlvbihvYmosIGVsZW0sIGZvcmNlRXhwYW5zaW9u
KQorICAgIHsKKyAgICAgICAgdGhpcy5fb2JqZWN0VHJlZSA9IG5ldyBXZWJJbnNwZWN0b3IuT2Jq
ZWN0VHJlZVZpZXcob2JqLCBXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcuTW9kZS5Qcm9wZXJ0
aWVzLCB0aGlzLl9yb290UHJvcGVydHlQYXRoRm9yT2JqZWN0KG9iaiksIGZvcmNlRXhwYW5zaW9u
KTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0aGlzLl9vYmplY3RUcmVlLmVsZW1lbnQpOwor
ICAgIH0sCisKKyAgICBfZm9ybWF0UGFyYW1ldGVyQXNTdHJpbmc6IGZ1bmN0aW9uKG91dHB1dCwg
ZWxlbSkKKyAgICB7CisgICAgICAgIHZhciBzcGFuID0gV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZh
bHVlLmNyZWF0ZUxpbmtpZmllZEVsZW1lbnRTdHJpbmcob3V0cHV0LmRlc2NyaXB0aW9uKTsKKyAg
ICAgICAgZWxlbS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICB9LAorCisgICAgX2Zvcm1hdFBhcmFt
ZXRlckFzTm9kZTogZnVuY3Rpb24ob2JqZWN0LCBlbGVtKQorICAgIHsKKyAgICAgICAgdmFyIHNw
YW4gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvck5vZGUob2Jq
ZWN0KTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICB9LAorCisgICAgX2Zv
cm1hdFBhcmFtZXRlckFzQXJyYXk6IGZ1bmN0aW9uKGFyciwgZWxlbSkKKyAgICB7CisgICAgICAg
IHRoaXMuX29iamVjdFRyZWUgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3KGFyciwg
V2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3Lk1vZGUuUHJvcGVydGllcywgdGhpcy5fcm9vdFBy
b3BlcnR5UGF0aEZvck9iamVjdChhcnIpKTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0aGlz
Ll9vYmplY3RUcmVlLmVsZW1lbnQpOworICAgIH0sCisKKyAgICBfcm9vdFByb3BlcnR5UGF0aEZv
ck9iamVjdDogZnVuY3Rpb24ob2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLnNhdmVk
UmVzdWx0SW5kZXgpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5Qcm9wZXJ0eVBhdGgob2JqZWN0LCAiJCIgKyB0aGlzLnNhdmVkUmVz
dWx0SW5kZXgpOworICAgIH0sCisKKyAgICBfdXNlclByb3ZpZGVkQ29sdW1uTmFtZXM6IGZ1bmN0
aW9uKGNvbHVtbk5hbWVzQXJndW1lbnQpCisgICAgeworICAgICAgICBpZiAoIWNvbHVtbk5hbWVz
QXJndW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgcmVtb3Rl
T2JqZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChjb2x1bW5OYW1l
c0FyZ3VtZW50KTsKKworICAgICAgICAvLyBTaW5nbGUgcHJpbWl0aXZlIGFyZ3VtZW50LgorICAg
ICAgICBpZiAocmVtb3RlT2JqZWN0LnR5cGUgPT09ICJzdHJpbmciIHx8IHJlbW90ZU9iamVjdC50
eXBlID09PSAibnVtYmVyIikKKyAgICAgICAgICAgIHJldHVybiBbU3RyaW5nKGNvbHVtbk5hbWVz
QXJndW1lbnQudmFsdWUpXTsKKworICAgICAgICAvLyBJZ25vcmUgZXZlcnl0aGluZyB0aGF0IGlz
IG5vdCBhbiBhcnJheSB3aXRoIHByb3BlcnR5IHByZXZpZXdzLgorICAgICAgICBpZiAocmVtb3Rl
T2JqZWN0LnR5cGUgIT09ICJvYmplY3QiIHx8IHJlbW90ZU9iamVjdC5zdWJ0eXBlICE9PSAiYXJy
YXkiIHx8ICFyZW1vdGVPYmplY3QucHJldmlldyB8fCAhcmVtb3RlT2JqZWN0LnByZXZpZXcucHJv
cGVydHlQcmV2aWV3cykKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIC8vIEFy
cmF5LiBMb29rIGludG8gdGhlIHByZXZpZXcgYW5kIGdldCBzdHJpbmcgdmFsdWVzLgorICAgICAg
ICB2YXIgZXh0cmFjdGVkQ29sdW1uTmFtZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgcHJvcGVy
dHlQcmV2aWV3IG9mIHJlbW90ZU9iamVjdC5wcmV2aWV3LnByb3BlcnR5UHJldmlld3MpIHsKKyAg
ICAgICAgICAgIGlmIChwcm9wZXJ0eVByZXZpZXcudHlwZSA9PT0gInN0cmluZyIgfHwgcHJvcGVy
dHlQcmV2aWV3LnR5cGUgPT09ICJudW1iZXIiKQorICAgICAgICAgICAgICAgIGV4dHJhY3RlZENv
bHVtbk5hbWVzLnB1c2goU3RyaW5nKHByb3BlcnR5UHJldmlldy52YWx1ZSkpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGV4dHJhY3RlZENvbHVtbk5hbWVzLmxlbmd0aCA/IGV4dHJhY3Rl
ZENvbHVtbk5hbWVzIDogbnVsbDsKKyAgICB9LAorCisgICAgX2Zvcm1hdFBhcmFtZXRlckFzVGFi
bGU6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICB2YXIgZWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgdmFyIHRhYmxlID0gcGFyYW1l
dGVyc1swXTsKKyAgICAgICAgaWYgKCF0YWJsZSB8fCAhdGFibGUucHJldmlldykKKyAgICAgICAg
ICAgIHJldHVybiBlbGVtZW50OworCisgICAgICAgIHZhciByb3dzID0gW107CisgICAgICAgIHZh
ciBjb2x1bW5OYW1lcyA9IFtdOworICAgICAgICB2YXIgZmxhdFZhbHVlcyA9IFtdOworICAgICAg
ICB2YXIgcHJldmlldyA9IHRhYmxlLnByZXZpZXc7CisgICAgICAgIHZhciB1c2VyUHJvdmlkZWRD
b2x1bW5OYW1lcyA9IGZhbHNlOworCisgICAgICAgIC8vIFVzZXIgcHJvdmlkZWQgY29sdW1uTmFt
ZXMuCisgICAgICAgIHZhciBleHRyYWN0ZWRDb2x1bW5OYW1lcyA9IHRoaXMuX3VzZXJQcm92aWRl
ZENvbHVtbk5hbWVzKHBhcmFtZXRlcnNbMV0pOworICAgICAgICBpZiAoZXh0cmFjdGVkQ29sdW1u
TmFtZXMpIHsKKyAgICAgICAgICAgIHVzZXJQcm92aWRlZENvbHVtbk5hbWVzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGNvbHVtbk5hbWVzID0gZXh0cmFjdGVkQ29sdW1uTmFtZXM7CisgICAgICAgIH0K
KworICAgICAgICAvLyBDaGVjayBmaXJzdCBmb3IgdmFsdWVQcmV2aWV3cyBpbiB0aGUgcHJvcGVy
dGllcyBtZWFuaW5nIHRoaXMgd2FzIGFuIGFycmF5IG9mIG9iamVjdHMuCisgICAgICAgIGlmIChw
cmV2aWV3LnByb3BlcnR5UHJldmlld3MpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHJvd1Byb3BlcnR5ID0gcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzW2ldOworICAgICAg
ICAgICAgICAgIHZhciByb3dQcmV2aWV3ID0gcm93UHJvcGVydHkudmFsdWVQcmV2aWV3OworICAg
ICAgICAgICAgICAgIGlmICghcm93UHJldmlldykKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgICAgICB2YXIgcm93VmFsdWUgPSB7fTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBtYXhDb2x1bW5zVG9SZW5kZXIgPSAxMDsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IHJvd1ByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5sZW5ndGg7ICsraikgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbFByb3BlcnR5ID0gcm93UHJldmlldy5wcm9wZXJ0
eVByZXZpZXdzW2pdOworICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uUmVuZGVyZWQgPSBj
b2x1bW5OYW1lcy5jb250YWlucyhjZWxsUHJvcGVydHkubmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghY29sdW1uUmVuZGVyZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1
c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyB8fCBjb2x1bW5OYW1lcy5sZW5ndGggPT09IG1heENvbHVt
bnNUb1JlbmRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbHVtblJlbmRlcmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbk5hbWVzLnB1c2goY2VsbFByb3BlcnR5Lm5hbWUpOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcm93VmFsdWVbY2VsbFByb3BlcnR5
Lm5hbWVdID0gV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JQcm9w
ZXJ0eVByZXZpZXcoY2VsbFByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcm93cy5wdXNoKFtyb3dQcm9wZXJ0eS5uYW1lLCByb3dWYWx1ZV0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSB2YWx1ZVByZXZpZXdz
LCBjb252ZXJ0IHRvIGEgZmxhdCBsaXN0LgorICAgICAgICBpZiAocm93cy5sZW5ndGgpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGVtRGFzaCA9ICJcdTIwMTQiOworICAgICAgICAgICAgY29sdW1uTmFt
ZXMudW5zaGlmdChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihJbmRleCkiKSk7CisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcm93TmFtZSA9IHJvd3NbaV1bMF07CisgICAgICAgICAgICAgICAgdmFyIHJvd1ZhbHVl
ID0gcm93c1tpXVsxXTsKKyAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1c2gocm93TmFtZSk7
CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBjb2x1bW5OYW1lcy5sZW5ndGg7
ICsraikgeworICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTmFtZSA9IGNvbHVtbk5hbWVz
W2pdOworICAgICAgICAgICAgICAgICAgICBpZiAoIShjb2x1bW5OYW1lIGluIHJvd1ZhbHVlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChlbURhc2gpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1
c2gocm93VmFsdWVbY29sdW1uTmFtZV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gdmFsdWUgUHJldmll
d3MsIHRoZW4gY2hlY2sgZm9yIGFuIGFycmF5IG9mIHZhbHVlcy4KKyAgICAgICAgaWYgKCFmbGF0
VmFsdWVzLmxlbmd0aCAmJiBwcmV2aWV3LnByb3BlcnR5UHJldmlld3MpIHsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICAgICAgdmFyIHJvd1Byb3BlcnR5ID0gcHJldmlldy5wcm9wZXJ0eVBy
ZXZpZXdzW2ldOworICAgICAgICAgICAgICAgIGlmICghKCJ2YWx1ZSIgaW4gcm93UHJvcGVydHkp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGlmICgh
Y29sdW1uTmFtZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVzLnB1
c2goV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJbmRleCIpKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29sdW1uTmFtZXMucHVzaChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlZhbHVlIikpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChyb3dQcm9wZXJ0
eS5uYW1lKTsKKyAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1c2goV2ViSW5zcGVjdG9yLkZv
cm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JQcm9wZXJ0eVByZXZpZXcocm93UHJvcGVydHkp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGxvc3NsZXNzIG9y
IG5vdCB0YWJsZSBkYXRhLCBvdXRwdXQgdGhlIG9iamVjdCBzbyBmdWxsIGRhdGEgY2FuIGJlIGdv
dHRlbi4KKyAgICAgICAgaWYgKCFwcmV2aWV3Lmxvc3NsZXNzIHx8ICFmbGF0VmFsdWVzLmxlbmd0
aCkgeworICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJhbWV0
ZXIodGFibGUpKTsKKyAgICAgICAgICAgIGlmICghZmxhdFZhbHVlcy5sZW5ndGgpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZGF0YUdy
aWRDb250YWluZXIgPSBlbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIik7CisgICAgICAgIHZhciBk
YXRhR3JpZCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5jcmVhdGVTb3J0YWJsZURhdGFHcmlkKGNv
bHVtbk5hbWVzLCBmbGF0VmFsdWVzKTsKKyAgICAgICAgZGF0YUdyaWQuZWxlbWVudC5jbGFzc0xp
c3QuYWRkKCJpbmxpbmUiKTsKKyAgICAgICAgZGF0YUdyaWRDb250YWluZXIuYXBwZW5kQ2hpbGQo
ZGF0YUdyaWQuZWxlbWVudCk7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfSwKKwor
ICAgIF9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nOiBmdW5jdGlvbihwYXJhbWV0ZXJzLCBm
b3JtYXR0ZWRSZXN1bHQpCisgICAgeworICAgICAgICB2YXIgZm9ybWF0dGVycyA9IHt9OworCisg
ICAgICAgIGZ1bmN0aW9uIHBhcmFtZXRlckZvcm1hdHRlcihmb3JjZSwgb2JqKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0UGFyYW1ldGVyKG9iaiwgZm9yY2UpOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc3RyaW5nRm9ybWF0dGVyKG9iaikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG9iai5kZXNjcmlwdGlvbjsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGZsb2F0Rm9ybWF0dGVyKG9iaikKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHR5cGVvZiBvYmoudmFsdWUgIT09ICJudW1iZXIiKQorICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJzZUZsb2F0KG9iai5kZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gb2Jq
LnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW50ZWdlckZvcm1hdHRlcihv
YmopCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnZhbHVlICE9PSAibnVt
YmVyIikKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLmRlc2NyaXB0aW9uKTsK
KyAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG9iai52YWx1ZSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgY3VycmVudFN0eWxlID0gbnVsbDsKKyAgICAgICAgZnVuY3Rpb24gc3R5bGVG
b3JtYXR0ZXIob2JqKQorICAgICAgICB7CisgICAgICAgICAgICBjdXJyZW50U3R5bGUgPSB7fTsK
KyAgICAgICAgICAgIHZhciBidWZmZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7
CisgICAgICAgICAgICBidWZmZXIuc2V0QXR0cmlidXRlKCJzdHlsZSIsIG9iai5kZXNjcmlwdGlv
bik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlci5zdHlsZS5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGJ1ZmZlci5zdHlsZVtpXTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KSkKKyAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFN0eWxlW3Byb3BlcnR5XSA9IGJ1ZmZlci5zdHlsZVtw
cm9wZXJ0eV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBp
c1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZh
ciBwcmVmaXhlcyA9IFsiYmFja2dyb3VuZCIsICJib3JkZXIiLCAiY29sb3IiLCAiZm9udCIsICJs
aW5lIiwgIm1hcmdpbiIsICJwYWRkaW5nIiwgInRleHQiLCAiLXdlYmtpdC1iYWNrZ3JvdW5kIiwg
Ii13ZWJraXQtYm9yZGVyIiwgIi13ZWJraXQtZm9udCIsICItd2Via2l0LW1hcmdpbiIsICItd2Vi
a2l0LXBhZGRpbmciLCAiLXdlYmtpdC10ZXh0Il07CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb3Bl
cnR5LnN0YXJ0c1dpdGgocHJlZml4ZXNbaV0pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZpcmVidWcgdXNlcyAlbyBmb3IgZm9ybWF0dGluZyBvYmplY3RzLgor
ICAgICAgICBmb3JtYXR0ZXJzLm8gPSBwYXJhbWV0ZXJGb3JtYXR0ZXIuYmluZCh0aGlzLCBmYWxz
ZSk7CisgICAgICAgIGZvcm1hdHRlcnMucyA9IHN0cmluZ0Zvcm1hdHRlcjsKKyAgICAgICAgZm9y
bWF0dGVycy5mID0gZmxvYXRGb3JtYXR0ZXI7CisKKyAgICAgICAgLy8gRmlyZWJ1ZyBhbGxvd3Mg
Ym90aCAlaSBhbmQgJWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMuCisgICAgICAgIGZvcm1hdHRl
cnMuaSA9IGludGVnZXJGb3JtYXR0ZXI7CisgICAgICAgIGZvcm1hdHRlcnMuZCA9IGludGVnZXJG
b3JtYXR0ZXI7CisKKyAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVjIGZvciBzdHlsaW5nIHRoZSBt
ZXNzYWdlLgorICAgICAgICBmb3JtYXR0ZXJzLmMgPSBzdHlsZUZvcm1hdHRlcjsKKworICAgICAg
ICAvLyBTdXBwb3J0ICVPIHRvIGZvcmNlIG9iamVjdCBmb3JtYXR0aW5nLCBpbnN0ZWFkIG9mIHRo
ZSB0eXBlLWJhc2VkICVvIGZvcm1hdHRpbmcuCisgICAgICAgIGZvcm1hdHRlcnMuTyA9IHBhcmFt
ZXRlckZvcm1hdHRlci5iaW5kKHRoaXMsIHRydWUpOworCisgICAgICAgIGZ1bmN0aW9uIGFwcGVu
ZChhLCBiKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIE5vZGUpCisg
ICAgICAgICAgICAgICAgYS5hcHBlbmRDaGlsZChiKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGIp
IHsKKyAgICAgICAgICAgICAgICB2YXIgdG9BcHBlbmQgPSBXZWJJbnNwZWN0b3IubGlua2lmeVN0
cmluZ0FzRnJhZ21lbnQoYi50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dFN0eWxlKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4g
Y3VycmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5zdHlsZVtrZXld
ID0gY3VycmVudFN0eWxlW2tleV07CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5k
Q2hpbGQodG9BcHBlbmQpOworICAgICAgICAgICAgICAgICAgICB0b0FwcGVuZCA9IHdyYXBwZXI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgICAgIHNwYW4uY2xhc3NOYW1lID0g
InR5cGUtc3RyaW5nIjsKKyAgICAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKHRvQXBwZW5k
KTsKKyAgICAgICAgICAgICAgICBhLmFwcGVuZENoaWxkKHNwYW4pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdHJpbmcuZm9y
bWF0IGRvZXMgdHJlYXQgZm9ybWF0dGVkUmVzdWx0IGxpa2UgYSBCdWlsZGVyLCByZXN1bHQgaXMg
YW4gb2JqZWN0LgorICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdChwYXJhbWV0ZXJzWzBdLmRl
c2NyaXB0aW9uLCBwYXJhbWV0ZXJzLnNsaWNlKDEpLCBmb3JtYXR0ZXJzLCBmb3JtYXR0ZWRSZXN1
bHQsIGFwcGVuZCk7CisgICAgfSwKKworICAgIGRlY29yYXRlTWVzc2FnZUVsZW1lbnQ6IGZ1bmN0
aW9uKGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9lbGVtZW50OworCisgICAgICAgIGVsZW1lbnQubWVzc2FnZSA9IHRo
aXM7CisgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1tZXNzYWdlIik7CisK
KyAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7CisKKyAgICAgICAgc3dpdGNoICh0aGlz
LmxldmVsKSB7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVz
c2FnZS5NZXNzYWdlTGV2ZWwuVGlwOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0
LmFkZCgiY29uc29sZS10aXAtbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0
dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGlwOiAi
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgorICAgICAgICAgICAgICAg
IGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1sb2ctbGV2ZWwiKTsKKyAgICAgICAgICAg
ICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiTG9nOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVi
dWc6CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWRlYnVn
LWxldmVsIik7CisgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFi
ZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRlYnVnOiAiKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xl
TWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZzoKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNs
YXNzTGlzdC5hZGQoImNvbnNvbGUtd2FybmluZy1sZXZlbCIpOworICAgICAgICAgICAgICAgIGVs
ZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJXYXJuaW5nOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6
CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWVycm9yLWxl
dmVsIik7CisgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxw
cmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVycm9yOiAiKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy50eXBlID09PSBXZWJJbnNw
ZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cCB8fCB0aGlz
LnR5cGUgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5T
dGFydEdyb3VwQ29sbGFwc2VkKQorICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJj
b25zb2xlLWdyb3VwLXRpdGxlIik7CisKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz
LmZvcm1hdHRlZE1lc3NhZ2UpOworCisgICAgICAgIGlmICh0aGlzLnJlcGVhdENvdW50ID4gMSkK
KyAgICAgICAgICAgIHRoaXMudXBkYXRlUmVwZWF0Q291bnQoKTsKKworICAgICAgICByZXR1cm4g
ZWxlbWVudDsKKyAgICB9LAorCisgICAgdG9NZXNzYWdlRWxlbWVudDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZWxlbWVudDsKKworICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworCisgICAgICAgIHJldHVybiB0aGlzLmRlY29yYXRlTWVzc2FnZUVsZW1lbnQoZWxl
bWVudCk7CisgICAgfSwKKworICAgIF9wb3B1bGF0ZVN0YWNrVHJhY2VUcmVlRWxlbWVudDogZnVu
Y3Rpb24ocGFyZW50VHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuX3N0YWNrVHJhY2UubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBmcmFt
ZSA9IHRoaXMuX3N0YWNrVHJhY2VbaV07CisKKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICB2YXIgbWVzc2FnZVRleHRF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgbWVz
c2FnZVRleHRFbGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xlLW1lc3NhZ2UtdGV4dCI7CisgICAg
ICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnJhbWUuZnVuY3Rpb25OYW1lIHx8IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiKGFub255bW91cyBmdW5jdGlvbikiKTsKKyAgICAgICAgICAgIG1lc3Nh
Z2VUZXh0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmdW5jdGlv
bk5hbWUpKTsKKyAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQobWVzc2FnZVRleHRFbGVt
ZW50KTsKKworICAgICAgICAgICAgaWYgKGZyYW1lLnVybCAmJiAhdGhpcy5fc2hvdWxkSGlkZVVS
TChmcmFtZS51cmwpKSB7CisgICAgICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSB0aGlzLl9s
aW5raWZ5Q2FsbEZyYW1lKGZyYW1lKTsKKyAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZENo
aWxkKHVybEVsZW1lbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgdHJlZUVs
ZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCk7CisgICAgICAgICAgICBwYXJlbnRUcmVl
RWxlbWVudC5hcHBlbmRDaGlsZCh0cmVlRWxlbWVudCk7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgdXBkYXRlUmVwZWF0Q291bnQ6IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMucmVw
ZWF0Q291bnRFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLnJlcGVhdENvdW50RWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgIHRoaXMucmVwZWF0
Q291bnRFbGVtZW50LmNsYXNzTmFtZSA9ICJidWJibGUiOworCisgICAgICAgICAgICB0aGlzLl9l
bGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLnJlcGVhdENvdW50RWxlbWVudCwgdGhpcy5fZWxlbWVu
dC5maXJzdENoaWxkKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnJlcGVhdENvdW50RWxlbWVu
dC50ZXh0Q29udGVudCA9IHRoaXMucmVwZWF0Q291bnQ7CisgICAgfSwKKworICAgIHRvU3RyaW5n
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc291cmNlU3RyaW5nOworICAgICAgICBz
d2l0Y2ggKHRoaXMuc291cmNlKSB7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkhUTUw6CisgICAgICAgICAgICAgICAgc291
cmNlU3RyaW5nID0gIkhUTUwiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5YTUw6
CisgICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIlhNTCI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2Fn
ZS5NZXNzYWdlU291cmNlLkpTOgorICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJKUyI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5M
ZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcms6CisgICAgICAgICAgICAg
ICAgc291cmNlU3RyaW5nID0gIk5ldHdvcmsiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNv
dXJjZS5Db25zb2xlQVBJOgorICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJDb25zb2xl
QVBJIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuT3RoZXI6CisgICAgICAgICAg
ICAgICAgc291cmNlU3RyaW5nID0gIk90aGVyIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciB0eXBlU3RyaW5nOworICAgICAgICBzd2l0Y2ggKHRoaXMu
dHlwZSkgeworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUuTG9nOgorICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiTG9nIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkRpcjoKKyAgICAgICAgICAgICAgICB0eXBl
U3RyaW5nID0gIkRpciI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5EaXJYTUw6Cisg
ICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJEaXIgWE1MIjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VUeXBlLlRyYWNlOgorICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiVHJhY2Ui
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
TGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cENvbGxhcHNlZDoKKyAg
ICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VU
eXBlLlN0YXJ0R3JvdXA6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJTdGFydCBHcm91
cCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cDoKKyAgICAgICAgICAg
ICAgICB0eXBlU3RyaW5nID0gIkVuZCBHcm91cCI7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5Bc3NlcnQ6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJBc3NlcnQiOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGVT
dHJpbmcgPSAiUmVzdWx0IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBzb3VyY2VTdHJpbmcgKyAiICIgKyB0eXBlU3RyaW5nICsgIiAiICsgdGhp
cy5sZXZlbFN0cmluZyArICI6ICIgKyB0aGlzLmZvcm1hdHRlZE1lc3NhZ2UudGV4dENvbnRlbnQg
KyAiXG4iICsgdGhpcy51cmwgKyAiIGxpbmUgIiArIHRoaXMubGluZTsKKyAgICB9LAorCisgICAg
Z2V0IHRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VUZXh0OworICAg
IH0sCisKKyAgICBpc0VxdWFsOiBmdW5jdGlvbihtc2cpCisgICAgeworICAgICAgICBpZiAoIW1z
ZykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAodGhpcy5fc3RhY2tU
cmFjZSkgeworICAgICAgICAgICAgaWYgKCFtc2cuX3N0YWNrVHJhY2UpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdmFyIGwgPSB0aGlzLl9zdGFja1RyYWNlOwor
ICAgICAgICAgICAgdmFyIHIgPSBtc2cuX3N0YWNrVHJhY2U7CisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGwubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAobFtpXS51
cmwgIT09IHJbaV0udXJsIHx8CisgICAgICAgICAgICAgICAgICAgIGxbaV0uZnVuY3Rpb25OYW1l
ICE9PSByW2ldLmZ1bmN0aW9uTmFtZSB8fAorICAgICAgICAgICAgICAgICAgICBsW2ldLmxpbmVO
dW1iZXIgIT09IHJbaV0ubGluZU51bWJlciB8fAorICAgICAgICAgICAgICAgICAgICBsW2ldLmNv
bHVtbk51bWJlciAhPT0gcltpXS5jb2x1bW5OdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAo
dGhpcy5zb3VyY2UgPT09IG1zZy5zb3VyY2UpCisgICAgICAgICAgICAmJiAodGhpcy50eXBlID09
PSBtc2cudHlwZSkKKyAgICAgICAgICAgICYmICh0aGlzLmxldmVsID09PSBtc2cubGV2ZWwpCisg
ICAgICAgICAgICAmJiAodGhpcy5saW5lID09PSBtc2cubGluZSkKKyAgICAgICAgICAgICYmICh0
aGlzLnVybCA9PT0gbXNnLnVybCkKKyAgICAgICAgICAgICYmICh0aGlzLm1lc3NhZ2UgPT09IG1z
Zy5tZXNzYWdlKQorICAgICAgICAgICAgJiYgKHRoaXMuX3JlcXVlc3QgPT09IG1zZy5fcmVxdWVz
dCk7CisgICAgfSwKKworICAgIGdldCBzdGFja1RyYWNlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9zdGFja1RyYWNlOworICAgIH0sCisKKyAgICBjbG9uZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5jcmVh
dGUodGhpcy5zb3VyY2UsIHRoaXMubGV2ZWwsIHRoaXMuX21lc3NhZ2VUZXh0LCB0aGlzLnR5cGUs
IHRoaXMudXJsLCB0aGlzLmxpbmUsIHRoaXMuY29sdW1uLCB0aGlzLnJlcGVhdENvdW50LCB0aGlz
Ll9wYXJhbWV0ZXJzLCB0aGlzLl9zdGFja1RyYWNlLCB0aGlzLl9yZXF1ZXN0KTsKKyAgICB9LAor
CisgICAgZ2V0IGxldmVsU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGhpcy5sZXZl
bCkgeworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2Uu
TWVzc2FnZUxldmVsLlRpcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRpcCI7CisgICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwu
TG9nOgorICAgICAgICAgICAgICAgIHJldHVybiAiTG9nIjsKKyAgICAgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgorICAg
ICAgICAgICAgICAgIHJldHVybiAiV2FybmluZyI7CisgICAgICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVidWc6CisgICAgICAgICAg
ICAgICAgcmV0dXJuICJEZWJ1ZyI7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0
dXJuICJFcnJvciI7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZ2V0IGNsaXBib2FyZFByZWZp
eFN0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIlsiICsgdGhpcy5sZXZlbFN0cmluZyAr
ICJdICI7CisgICAgfSwKKworICAgIHRvQ2xpcGJvYXJkU3RyaW5nOiBmdW5jdGlvbihpc1ByZWZp
eE9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgdmFyIGlzVHJhY2UgPSB0aGlzLl9zaG91bGREdW1w
U3RhY2tUcmFjZSgpOworCisgICAgICAgIHZhciBjbGlwYm9hcmRTdHJpbmcgPSAiIjsKKyAgICAg
ICAgaWYgKHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UgJiYgIWlzVHJhY2UpCisgICAgICAgICAgICBj
bGlwYm9hcmRTdHJpbmcgPSB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLnF1ZXJ5U2VsZWN0b3IoInNw
YW4iKS5pbm5lclRleHQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNsaXBib2FyZFN0cmlu
ZyA9IHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VUeXBlLlRyYWNlID8gImNvbnNvbGUudHJhY2UoKSIgOiB0aGlzLl9tZXNzYWdlIHx8IHRoaXMu
X21lc3NhZ2VUZXh0OworCisgICAgICAgIGlmICghaXNQcmVmaXhPcHRpb25hbCB8fCB0aGlzLmVu
Zm9yY2VzQ2xpcGJvYXJkUHJlZml4U3RyaW5nKQorICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5n
ID0gdGhpcy5jbGlwYm9hcmRQcmVmaXhTdHJpbmcgKyBjbGlwYm9hcmRTdHJpbmc7CisKKyAgICAg
ICAgaWYgKGlzVHJhY2UpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0YWNrVHJhY2UuZm9yRWFjaChm
dW5jdGlvbihmcmFtZSkgeworICAgICAgICAgICAgICAgIGNsaXBib2FyZFN0cmluZyArPSAiXG5c
dCIgKyAoZnJhbWUuZnVuY3Rpb25OYW1lIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255
bW91cyBmdW5jdGlvbikiKSk7CisgICAgICAgICAgICAgICAgaWYgKGZyYW1lLnVybCkKKyAgICAg
ICAgICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5nICs9ICIgKCIgKyBXZWJJbnNwZWN0b3IuZGlz
cGxheU5hbWVGb3JVUkwoZnJhbWUudXJsKSArICIsIGxpbmUgIiArIGZyYW1lLmxpbmVOdW1iZXIg
KyAiKSI7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZh
ciByZXBlYXRTdHJpbmcgPSB0aGlzLnJlcGVhdENvdW50ID4gMSA/ICJ4IiArIHRoaXMucmVwZWF0
Q291bnQgOiAiIjsKKworICAgICAgICAgICAgdmFyIHVybExpbmUgPSAiIjsKKyAgICAgICAgICAg
IGlmICh0aGlzLnVybCkgeworICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzID0gW1dlYklu
c3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCh0aGlzLnVybCksICJsaW5lICIgKyB0aGlzLmxpbmVd
OworICAgICAgICAgICAgICAgIGlmIChyZXBlYXRTdHJpbmcpCisgICAgICAgICAgICAgICAgICAg
IGNvbXBvbmVudHMucHVzaChyZXBlYXRTdHJpbmcpOworICAgICAgICAgICAgICAgIHVybExpbmUg
PSAiICgiICsgY29tcG9uZW50cy5qb2luKCIsICIpICsgIikiOworICAgICAgICAgICAgfSBlbHNl
IGlmIChyZXBlYXRTdHJpbmcpCisgICAgICAgICAgICAgICAgdXJsTGluZSA9ICIgKCIgKyByZXBl
YXRTdHJpbmcgKyAiKSI7CisKKyAgICAgICAgICAgIGlmICh1cmxMaW5lKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGxpbmVzID0gY2xpcGJvYXJkU3RyaW5nLnNwbGl0KCJcbiIpOworICAgICAgICAg
ICAgICAgIGxpbmVzWzBdICs9IHVybExpbmU7CisgICAgICAgICAgICAgICAgY2xpcGJvYXJkU3Ry
aW5nID0gbGluZXMuam9pbigiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBjbGlwYm9hcmRTdHJpbmc7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9y
LkxlZ2FjeUNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xvZ0NvbnRlbnRWaWV3LmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTG9nQ29udGVudFZpZXcuanMKaW5k
ZXggZmY0OTRlMy4uNDdmMGNlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvTG9nQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTG9nQ29udGVudFZpZXcuanMKQEAgLTE3Niw3ICsx
NzYsNyBAQCBXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlID0gewogICAgICAg
ICBXZWJJbnNwZWN0b3IucXVpY2tDb25zb2xlLnVwZGF0ZUxheW91dCgpOwogCiAgICAgICAgIC8v
IE5lc3QgdGhlIG1lc3NhZ2UuCi0gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgIT09IFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cCkgeworICAgICAgICBpZiAo
bWVzc2FnZS50eXBlICE9PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVR5cGUuRW5kR3JvdXApIHsKICAgICAgICAgICAgIHZhciB4ID0gMTYgKiB0aGlzLl9uZXN0aW5n
TGV2ZWw7CiAgICAgICAgICAgICB2YXIgbWVzc2FnZUVsZW1lbnQgPSBtZXNzYWdlLnRvTWVzc2Fn
ZUVsZW1lbnQoKTsKICAgICAgICAgICAgIG1lc3NhZ2VFbGVtZW50LnN0eWxlLmxlZnQgPSB4ICsg
InB4IjsKQEAgLTE4NSwxMSArMTg1LDExIEBAIFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5w
cm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gVXBkYXRlIHRoZSBuZXN0aW5nIGxldmVsLgogICAg
ICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkgewotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwOgotICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkOgor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5TdGFydEdyb3VwOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVz
c2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkOgogICAgICAgICAgICAgKyt0aGlz
Ll9uZXN0aW5nTGV2ZWw7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRW5kR3JvdXA6CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwOgog
ICAgICAgICAgICAgLS10aGlzLl9uZXN0aW5nTGV2ZWw7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtMjAyLDcgKzIwMiw3IEBAIFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5w
cm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gV2Ugb25seSBhdXRvIHNob3cgdGhlIGNvbnNvbGUg
aWYgdGhlIG1lc3NhZ2UgaXMgYSByZXN1bHQuCiAgICAgICAgIC8vIFRoaXMgaXMgd2hlbiB0aGUg
dXNlciBldmFsdWF0ZWQgc29tZXRoaW5nIGRpcmVjdGx5IGluIHRoZSBwcm9tcHQuCi0gICAgICAg
IGlmIChtZXNzYWdlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5SZXN1bHQpCisgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5M
ZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IuaXNTaG93aW5nQ29uc29sZVZpZXcoKSkK
QEAgLTMzMCw3ICszMzAsNyBAQCBXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgdGhpcy5fcHJvdmlzaW9uYWxNZXNzYWdlcy5wdXNoKGV2ZW50LmRh
dGEubWVzc2FnZSk7CiAKICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLl9sb2dWaWV3Q29udHJv
bGxlci5hcHBlbmRDb25zb2xlTWVzc2FnZShldmVudC5kYXRhLm1lc3NhZ2UpOwotICAgICAgICBp
ZiAobWVzc2FnZS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5
cGUuRW5kR3JvdXApCisgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5M
ZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cCkKICAgICAgICAgICAgIHRo
aXMuX2ZpbHRlck1lc3NhZ2VzKFttZXNzYWdlLnRvTWVzc2FnZUVsZW1lbnQoKV0pOwogICAgIH0s
CiAKQEAgLTY3NywxNCArNjc3LDE0IEBAIFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIgdmlzaWJsZSA9IHNob3dzQWxsIHx8IG1lc3NhZ2Uu
Y29tbWFuZCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZCB8fCBtZXNzYWdl
Lm1lc3NhZ2UgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQ7CiAg
ICAgICAgICAgICBpZiAoIXZpc2libGUpIHsKICAgICAgICAgICAgICAgICBzd2l0Y2gobWVzc2Fn
ZS5tZXNzYWdlLmxldmVsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2Fy
bmluZzoKICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGUgPSBzaG93c1dhcm5pbmdzOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZUxldmVsLkVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IHNob3dzRXJy
b3JzOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VM
ZXZlbC5EZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZzoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkRlYnVnOgog
ICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IHNob3dzTG9nczsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTk5Niw3ICs5OTYsNyBA
QCBXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlID0gewogCiAgICAgICAgIGZv
ciAodmFyIHByb3Zpc2lvbmFsTWVzc2FnZSBvZiB0aGlzLl9wcm92aXNpb25hbE1lc3NhZ2VzKSB7
CiAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMuX2xvZ1ZpZXdDb250cm9sbGVyLmFwcGVu
ZENvbnNvbGVNZXNzYWdlKHByb3Zpc2lvbmFsTWVzc2FnZSk7Ci0gICAgICAgICAgICBpZiAobWVz
c2FnZS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRW5k
R3JvdXApCisgICAgICAgICAgICBpZiAobWVzc2FnZS50eXBlICE9PSBXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRW5kR3JvdXApCiAgICAgICAgICAgICAgICAg
dGhpcy5fZmlsdGVyTWVzc2FnZXMoW21lc3NhZ2UudG9NZXNzYWdlRWxlbWVudCgpXSk7CiAgICAg
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3RvclVJ
LnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvaiBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9X
ZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2oKaW5kZXggNDVkMjRk
OS4uMDQ3OGNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3Rv
clVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvV2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qCkBAIC0z
MTUsOCArMzE1LDggQEAKICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXENvbnNv
bGVDb21tYW5kLmpzIiAvPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcQ29u
c29sZUNvbW1hbmRSZXN1bHQuanMiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVy
ZmFjZVxDb25zb2xlR3JvdXAuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVy
ZmFjZVxDb25zb2xlTWVzc2FnZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50
ZXJmYWNlXENvbnNvbGVNZXNzYWdlSW1wbC5qcyIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxV
c2VySW50ZXJmYWNlXExlZ2FjeUNvbnNvbGVNZXNzYWdlLmpzIiAvPgorICAgIDxOb25lIEluY2x1
ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpzIiAvPgogICAg
IDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcQ29uc29sZU9ic2VydmVyLmpzIiAvPgog
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcQ29uc29sZVByb21wdC5jc3MiIC8+
CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxDb25zb2xlUHJvbXB0LmpzIiAv
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3RvclVJLnZjeHBy
b2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1dlYkluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvai5maWx0ZXJzCmlu
ZGV4IDhjMGQ3OTEuLmRkYTc2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9X
ZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2ouZmlsdGVycworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0
b3JVSS52Y3hwcm9qLmZpbHRlcnMKQEAgLTE5NSwxMCArMTk1LDEwIEBACiAgICAgPE5vbmUgSW5j
bHVkZT0iLi5cVXNlckludGVyZmFjZVxDb25zb2xlR3JvdXAuanMiPgogICAgICAgPEZpbHRlcj5V
c2VySW50ZXJmYWNlPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XFVzZXJJbnRlcmZhY2VcQ29uc29sZU1lc3NhZ2UuanMiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4u
XFVzZXJJbnRlcmZhY2VcTGVnYWN5Q29uc29sZU1lc3NhZ2UuanMiPgogICAgICAgPEZpbHRlcj5V
c2VySW50ZXJmYWNlPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XFVzZXJJbnRlcmZhY2VcQ29uc29sZU1lc3NhZ2VJbXBsLmpzIj4KKyAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxVc2VySW50ZXJmYWNlXExlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5qcyI+CiAgICAgICA8
RmlsdGVyPlVzZXJJbnRlcmZhY2U8L0ZpbHRlcj4KICAgICA8L05vbmU+CiAgICAgPE5vbmUgSW5j
bHVkZT0iLi5cVXNlckludGVyZmFjZVxDb25zb2xlT2JzZXJ2ZXIuanMiPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>